±à¼ÍƼö: |
±¾ÎÄÖØµãHTTP
·þÎñÆ÷µÄ·ÓÉÀ´Öض¨Ïò¶à¸öÓ¦Óᢲ»Í¬µÄ¿ò¼ÜÖ®ÉÏÉè¼ÆÍ¨Ñ¶¡¢¼ÓÔØ»úÖÆ¡¢iFrame¡¢Web
Components ¹¹½¨Ó¦Óá¢Web Components ¹¹½¨¡¢¹¹½¨Ò»¸öµ¥ÌåÓ¦ÓõÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ΢ÐÅ phodal,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼ÍƼö¡£ |
|
΢ǰ¶Ë¼Ü¹¹ÊÇÒ»ÖÖÀàËÆÓÚ΢·þÎñµÄ¼Ü¹¹£¬Ëü½«Î¢·þÎñµÄÀíÄîÓ¦ÓÃÓÚä¯ÀÀÆ÷¶Ë£¬¼´½«
Web Ó¦ÓÃÓɵ¥Ò»µÄµ¥ÌåÓ¦ÓÃת±äΪ¶à¸öСÐÍǰ¶ËÓ¦ÓþۺÏΪһµÄÓ¦Óá£
ÓÉ´Ë´øÀ´µÄ±ä»¯ÊÇ£¬ÕâЩǰ¶ËÓ¦ÓÿÉÒÔ¶ÀÁ¢ÔËÐС¢¶ÀÁ¢¿ª·¢¡¢¶ÀÁ¢²¿Êð¡£ÒÔ¼°£¬ËüÃÇÓ¦¸Ã¿ÉÒÔÔÚ¹²Ïí×é¼þµÄͬʱ½øÐв¢Ðпª·¢¡ª¡ªÕâЩ×é¼þ¿ÉÒÔͨ¹ý
NPM »òÕß Git Tag¡¢Git Submodule À´¹ÜÀí¡£
×¢Ò⣺ÕâÀïµÄǰ¶ËÓ¦ÓÃÖ¸µÄÊÇǰºó¶Ë·ÖÀëµÄµ¥Ó¦ÓÃÒ³Ãæ£¬ÔÚÕâ»ù´¡²Å̸ÂÛ΢ǰ¶Ë²ÅÓÐÒâÒå¡£
½áºÏÎÒ×î½ü°ëÄêÔÚ΢ǰ¶Ë·½ÃæµÄʵ¼ùºÍÑо¿À´¿´£¬Î¢Ç°¶Ë¼Ü¹¹Ò»°ã¿ÉÒÔÓÉÒÔϼ¸ÖÖ·½Ê½½øÐУº
ʹÓà HTTP ·þÎñÆ÷µÄ·ÓÉÀ´Öض¨Ïò¶à¸öÓ¦ÓÃ
ÔÚ²»Í¬µÄ¿ò¼ÜÖ®ÉÏÉè¼ÆÍ¨Ñ¶¡¢¼ÓÔØ»úÖÆ£¬ÖîÈç Mooa ºÍ Single-SPA
ͨ¹ý×éºÏ¶à¸ö¶ÀÁ¢Ó¦Óá¢×é¼þÀ´¹¹½¨Ò»¸öµ¥ÌåÓ¦ÓÃ
iFrame¡£Ê¹Óà iFrame ¼°×Ô¶¨ÒåÏûÏ¢´«µÝ»úÖÆ
ʹÓô¿ Web Components ¹¹½¨Ó¦ÓÃ
½áºÏ Web Components ¹¹½¨
²»Í¬µÄ·½Ê½ÊÊÓÃÓÚ²»Í¬µÄʹÓó¡¾°£¬µ±È»Ò²¿ÉÒÔ×éºÏÒ»ÆðʹÓá£ÄÇô£¬¾ÍÈÃÎÒÃÇÀ´Ò»Ò»Á˽âһϣ¬ÎªÒÔºóµÄ¼Ü¹¹Ñݽø×öһЩ¼¼ÊõÆÌµæ¡£
»ù´¡ÆÌµæ£ºÓ¦Ó÷ַ¢Â·ÓÉ -> ·ÓÉ·Ö·¢Ó¦ÓÃ
ÔÚÒ»¸öµ¥Ìåǰ¶Ë¡¢µ¥Ìåºó¶ËÓ¦ÓÃÖУ¬ÓÐÒ»¸öµäÐ͵ÄÌØÕ÷£¬¼´Â·ÓÉÊÇÓÉ¿ò¼ÜÀ´·Ö·¢µÄ£¬¿ò¼Ü½«Â·ÓÉÖ¸¶¨µ½¶ÔÓ¦µÄ×é¼þ»òÕßÄÚ²¿·þÎñÖС£Î¢·þÎñÔÚÕâ¸ö¹ý³ÌÖÐ×öµÄÊÂÇéÊÇ£¬½«µ÷ÓÃÓɺ¯Êýµ÷Óñä³ÉÁËÔ¶³Ìµ÷Óã¬ÖîÈçÔ¶³Ì
HTTP µ÷Ó᣶øÎ¢Ç°¶ËÄØ£¬Ò²ÊÇÀàËÆµÄ£¬ËüÊǽ«Ó¦ÓÃÄÚµÄ×é¼þµ÷Óñä³ÉÁ˸üϸÁ£¶ÈµÄÓ¦Óüä×é¼þµ÷Ó㬼´ÔÏÈÎÒÃÇÖ»Êǽ«Â·ÓÉ·Ö·¢µ½Ó¦ÓõÄ×é¼þÖ´ÐУ¬ÏÖÔÚÔòÐèÒª¸ù¾Ý·ÓÉÀ´ÕÒµ½¶ÔÓ¦µÄÓ¦Óã¬ÔÙÓÉÓ¦Ó÷ַ¢µ½¶ÔÓ¦µÄ×é¼þÉÏ¡£
ºó¶Ë£ºº¯Êýµ÷Óà -> Ô¶³Ìµ÷ÓÃ
ÔÚ´ó¶àÊýµÄ CRUD ÀàÐ굀 Web Ó¦ÓÃÖУ¬Ò²¶¼´æÔÚһЩ¼«ÎªÏàËÆµÄģʽ£¬¼´£ºÊ×Ò³ -> Áбí
-> ÏêÇ飺
Ê×Ò³£¬ÓÃÓÚÃæÏòÓû§Õ¹Ê¾Ìض¨µÄÊý¾Ý»òÒ³Ãæ¡£ÕâЩÊý¾Ýͨ³£ÊÇÓÐÏÞ¸öÊýµÄ£¬²¢ÇÒÊǶàÖÖÄ£Ð͵ġ£
ÁÐ±í£¬¼´Êý¾ÝÄ£Ð͵ľۺϣ¬ÆäµäÐÍÌØµãÊÇijһÀàÊý¾ÝµÄ¼¯ºÏ£¬¿ÉÒÔ¿´µ½¾¡¿ÉÄܶàµÄÊý¾Ý¸ÅÒª£¨Èç Google
Ö»·µ»Ø 100 Ò³£©£¬µäÐͼû Google¡¢ÌÔ±¦¡¢¾©¶«µÄËÑË÷½á¹ûÒ³¡£
ÏêÇ飬չʾһ¸öÊý¾ÝµÄ¾¡¿ÉÄܶàµÄÄÚÈÝ¡£
ÈçÏÂÊÇÒ»¸ö Spring ¿ò¼Ü£¬ÓÃÓÚ·µ»ØÊ×Ò³µÄʾÀý£º
@RequestMapping(value="/")
public ModelAndView homePage(){
return new ModelAndView("/WEB-INF/jsp/index.jsp");
} |
¶ÔÓÚij¸öÏêÇéÒ³ÃæÀ´Ëµ£¬Ëü¿ÉÄÜÊÇÕâÑùµÄ£º
@RequestMapping(value="/detail/{detailId}")
public ModelAndView detail(HttpServletRequest
request, ModelMap model){
....
return new ModelAndView("/WEB-INF/jsp/detail.jsp",
"detail", detail);
} |
ÄÇô£¬ÔÚ΢·þÎñµÄÇé¿öÏ£¬ËüÔò»á±ä³ÉÕâÑù×Ó£º
@RequestMapping("/name")
public String name(){
String name = restTemplate.getForObject("http://account/name",
String.class);
return Name" + name;
} |
¶øºó¶ËÔÚÕâ¸ö¹ý³ÌÖУ¬¶àÁËÒ»¸ö·þÎñ·¢ÏֵķþÎñ£¬À´¹ÜÀí²»Í¬Î¢·þÎñµÄ¹ØÏµ¡£
ǰ¶Ë£º×é¼þµ÷Óà -> Ó¦Óõ÷ÓÃ
ÔÚÐÎʽÉÏÀ´Ëµ£¬µ¥Ìåǰ¶Ë¿ò¼ÜµÄ·Óɺ͵¥Ìåºó¶ËÓ¦Ó㬲¢Ã»ÓÐÌ«´óµÄÇø±ð£ºÒÀ¾Ý²»Í¬µÄ·ÓÉ£¬À´·µ»Ø²»Í¬Ò³ÃæµÄÄ£°å¡£
const appRoutes:
Routes = [
{ path: 'index', component: IndexComponent
},
{ path: 'detail/:id', component: DetailComponent
},
]; |
¶øµ±ÎÒÃǽ«Ö®Î¢·þÎñ»¯ºó£¬Ôò¿ÉÄܱä³ÉÓ¦Óà A µÄ·ÓÉ£º
const appRoutes: Routes
= [
{ path: 'index', component: IndexComponent
},
]; |
Íâ¼ÓÖ®Ó¦Óà B µÄ·ÓÉ£º
const appRoutes: Routes
= [
{ path: 'detail/:id', component: DetailComponent
},
]; |
¶øÎÊÌâµÄ¹Ø¼ü¾ÍÔÚÓÚ£ºÔõô½«Â·ÓÉ·Ö·¢µ½ÕâЩ²»Í¬µÄÓ¦ÓÃÖÐÈ¥¡£Óë´Ëͬʱ£¬»¹Òª¸ºÔð¹ÜÀí²»Í¬µÄǰ¶ËÓ¦Óá£
·ÓÉ·Ö·¢Ê½Î¢Ç°¶Ë
·ÓÉ·Ö·¢Ê½Î¢Ç°¶Ë£¬¼´Í¨¹ý·Óɽ«²»Í¬µÄÒµÎñ·Ö·¢µ½²»Í¬µÄ¡¢¶ÀÁ¢Ç°¶ËÓ¦ÓÃÉÏ¡£Æäͨ³£¿ÉÒÔͨ¹ý HTTP ·þÎñÆ÷µÄ·´Ïò´úÀíÀ´ÊµÏÖ£¬ÓÖ»òÕßÊÇÓ¦Óÿò¼Ü×Ô´øµÄ·ÓÉÀ´½â¾ö¡£
¾Íµ±Ç°¶øÑÔ£¬Í¨¹ý·ÓÉ·Ö·¢Ê½µÄ΢ǰ¶Ë¼Ü¹¹Ó¦¸ÃÊDzÉÓÃ×î¶à¡¢×îÒײÉÓÃµÄ ¡°Î¢Ç°¶Ë¡± ·½°¸¡£µ«ÊÇÕâÖÖ·½Ê½¿´ÉÏÈ¥¸üÏñÊǶà¸öǰ¶ËÓ¦Óõľۺϣ¬¼´ÎÒÃÇÖ»Êǽ«ÕâЩ²»Í¬µÄǰ¶ËÓ¦ÓÃÆ´´Õµ½Ò»Æð£¬Ê¹ËûÃÇ¿´ÆðÀ´ÏñÊÇÒ»¸öÍêÕûµÄÕûÌå¡£µ«ÊÇËüÃDz¢²»ÊÇ£¬Ã¿´ÎÓû§´Ó
A Ó¦Óõ½ B Ó¦ÓõÄʱºò£¬ÍùÍùÐèҪˢÐÂÒ»ÏÂÒ³Ãæ¡£
ÔÚ¼¸ÄêǰµÄÒ»¸öÏîÄ¿ÀÎÒÃǵ±Ê±ÕýÔÚ½øÐÐÒÅÁôÏµÍ³ÖØÐ´¡£ÎÒÃÇÖÆ¶¨ÁËÒ»¸öÇ¨ÒÆ¼Æ»®£º
Ê×ÏÈ£¬Ê¹Óþ²Ì¬ÍøÕ¾Éú³É¶¯Ì¬Éú³ÉÊ×Ò³
Æä´Î£¬Ê¹Óà React ¼Æ»®Õ»Öع¹ÏêÇéÒ³
×îºó£¬Ìæ»»ËÑË÷½á¹ûÒ³
Õû¸öϵͳ²¢²»ÊÇÒ»´ÎÐÔÇ¨ÒÆ¹ýÈ¥£¬¶øÊÇÒ»²½²½ÍùϽøÐС£Òò´ËÔÚÍê³É²»Í¬µÄ²½Öèʱ£¬ÎÒÃǾÍÐèÒªÉÏÏßÕâ¸ö¹¦ÄÜ£¬ÓÚÊǾÍÐèҪʹÓÃ
Nginx À´½øÐзÓÉ·Ö·¢¡£
ÈçÏÂÊÇÒ»¸ö»ùÓÚ·ÓÉ·Ö·¢µÄ Nginx ÅäÖÃʾÀý£º
http {
server {
listen 80;
server_name www.phodal.com;
location /api/ {
proxy_pass http://http://172.31.25.15:8000/api;
}
location /web/admin {
proxy_pass http://172.31.25.29/web/admin;
}
location /web/notifications {
proxy_pass http://172.31.25.27/web/notifications;
}
location / {
proxy_pass /;
}
}
} |
ÔÚÕâ¸öʾÀýÀ²»Í¬µÄÒ³ÃæµÄÇëÇó±»·Ö·¢µ½²»Í¬µÄ·þÎñÆ÷ÉÏ¡£
Ëæºó£¬ÎÒÃÇÔÚ±ðµÄÏîÄ¿ÉÏҲʹÓÃÁËÀàËÆµÄ·½Ê½£¬ÆäÖ÷ÒªÔÒòÊÇ£º¿çÍŶӵÄÐ×÷¡£µ±ÍŶӴﵽһ¶¨¹æÄ£µÄʱºò£¬ÎÒÃDz»µÃ²»Ãæ¶ÔÕâ¸öÎÊÌâ¡£³ý´Ë£¬»¹ÓÐ
Angluar ÌøÑÂʽÉý¼¶µÄÎÊÌâ¡£ÓÚÊÇ£¬ÔÚÕâÖÖÇé¿öÏ£¬Óû§Ç°Ì¨Ê¹Óà Angular ÖØÐ´£¬ºǫ́¼ÌÐøÊ¹ÓÃ
Angular.js µÈ±£³ÖÔÙÓеļ¼ÊõÕ»¡£ÔÚ²»Í¬µÄ³¡¾°Ï£¬¶¼ÓÐһЩÏàËÆµÄ¼¼Êõ¾ö²ß¡£
Òò´ËÔÚÕâÖÖÇé¿öÏ£¬ËüÊÊÓÃÓÚÒÔϳ¡¾°£º
²»Í¬¼¼ÊõÕ»Ö®¼ä²îÒì±È½Ï´ó£¬ÄÑÒÔ¼æÈÝ¡¢Ç¨ÒÆ¡¢¸ÄÔì
ÏîÄ¿²»Ï뻨·Ñ´óÁ¿µÄʱ¼äÔÚÕâ¸öϵͳµÄ¸ÄÔìÉÏ
ÏÖÓеÄϵͳÔÚδÀ´½«»á±»È¡´ú
ϵͳ¹¦ÄÜÒѾºÜÍêÉÆ£¬»ù±¾²»»áÓÐÐÂÐèÇó
¶øÔÚÂú×ãÉÏÃæ³¡¾°µÄÇé¿öÏ£¬Èç¹ûΪÁ˸üºÃµÄÓû§ÌåÑ飬»¹¿ÉÒÔ²ÉÓà iframe µÄ·½Ê½À´½â¾ö¡£
ʹÓà iFrame ´´½¨ÈÝÆ÷
iFrame ×÷Ϊһ¸ö·Ç³£¹ÅÀϵģ¬ÈËÈ˶¼¾õµÃÆÕͨµÄ¼¼Êõ£¬È´Ò»Ö±ºÜ¹ÜÓá£
HTML ÄÚÁª¿ò¼ÜÔªËØ <iframe> ±íʾǶÌ×µÄÕýÔÚä¯ÀÀµÄÉÏÏÂÎÄ£¬ÄÜÓÐЧµØ½«ÁíÒ»¸ö
HTML Ò³ÃæÇ¶Èëµ½µ±Ç°Ò³ÃæÖС£
iframe ¿ÉÒÔ´´½¨Ò»¸öȫеĶÀÁ¢µÄËÞÖ÷»·¾³£¬ÕâÒâζ×ÅÎÒÃǵÄǰ¶ËÓ¦ÓÃÖ®¼ä¿ÉÒÔÏ໥¶ÀÁ¢ÔËÐС£²ÉÓÃ
iframe Óм¸¸öÖØÒªµÄǰÌ᣺
ÍøÕ¾²»ÐèÒª SEO Ö§³Ö
ÓµÓÐÏàÓ¦µÄÓ¦ÓùÜÀí»úÖÆ¡£
Èç¹ûÎÒÃÇ×öµÄÊÇÒ»¸öÓ¦ÓÃÆ½Ì¨£¬»áÔÚÎÒÃǵÄϵͳÖм¯³ÉµÚÈý·½ÏµÍ³£¬»òÕß¶à¸ö²»Í¬²¿ÃÅÍŶÓϵÄϵͳ£¬ÏÔÈ»ÕâÊÇÒ»¸ö²»´íµÄ·½°¸¡£Ò»Ð©µäÐ͵ij¡¾°£¬È紫ͳµÄ
Desktop Ó¦ÓÃÇ¨ÒÆµ½ Web Ó¦Óãº

Angular Tabs ʾÀý
Èç¹ûÕâÒ»ÀàÓ¦ÓùýÓÚ¸´ÔÓ£¬ÄÇôËü±ØÈ»ÊÇÒª½øÐÐ΢·þÎñ»¯µÄ²ð·Ö¡£Òò´Ë£¬ÔÚ²ÉÓà iframe µÄʱºò£¬ÎÒÃÇÐèÒª×öÕâôÁ½¼þÊ£º
Éè¼Æ¹ÜÀíÓ¦ÓûúÖÆ
Éè¼ÆÓ¦ÓÃͨѶ»úÖÆ
¼ÓÔØ»úÖÆ¡£ÔÚʲôÇé¿öÏ£¬ÎÒÃÇ»áÈ¥¼ÓÔØ¡¢Ð¶ÔØÕâЩӦÓã»ÔÚÕâ¸ö¹ý³ÌÖУ¬²ÉÓÃÔõÑùµÄ¶¯»¹ý¶É£¬ÈÃÓû§¿´ÆðÀ´¸ü¼Ó×ÔÈ»¡£
ͨѶ»úÖÆ¡£Ö±½ÓÔÚÿ¸öÓ¦ÓÃÖд´½¨ postMessage ʼþ²¢¼àÌý£¬²¢²»ÊÇÒ»¸öÓѺõÄÊÂÇé¡£Æä±¾Éí¶ÔÓÚÓ¦ÓõÄÇÖÈëÐÔ̫ǿ£¬Òò´Ëͨ¹ý
iframeEl.contentWindow È¥»ñÈ¡ iFrame ÔªËØµÄ Window ¶ÔÏóÊÇÒ»¸ö¸ü¼ò»¯µÄ×ö·¨¡£Ëæºó£¬¾ÍÐèÒª¶¨ÒåÒ»Ì×ͨѶ¹æ·¶£ºÊ¼þÃû²ÉÓÃʲô¸ñʽ¡¢Ê²Ã´Ê±ºò¿ªÊ¼¼àÌýʼþµÈµÈ¡£
ÓÐÐËȤµÄ¶ÁÕߣ¬¿ÉÒÔ¿´¿´±ÊÕß֮ǰдµÄ΢ǰ¶Ë¿ò¼Ü£ºMooa¡£
²»¹ÜÔõÑù£¬iframe ¶ÔÓÚÎÒÃǽñÄêµÄ KPI ÅÂÊÇ´ø²»À´Ò»Ë¿µÄºÃ´¦£¬ÄÇôÎÒÃǾÍÈ¥Ôì¸öÂÖ×Ó°É¡£
×ÔÖÆ¿ò¼Ü¼æÈÝÓ¦ÓÃ
²»ÂÛÊÇ»ùÓÚ Web Components µÄ Angular£¬»òÕßÊÇ VirtualDOM µÄ React
µÈ£¬ÏÖÓеÄǰ¶Ë¿ò¼Ü¶¼Àë²»¿ª»ù±¾µÄ HTML ÔªËØ DOM¡£
ÄÇô£¬ÎÒÃÇÖ»ÐèÒª£º
ÔÚÒ³ÃæºÏÊʵĵط½ÒýÈë»òÕß´´½¨ DOM
Óû§²Ù×÷ʱ£¬¼ÓÔØ¶ÔÓ¦µÄÓ¦Ó㨴¥·¢Ó¦ÓÃµÄÆô¶¯£©£¬²¢ÄÜÐ¶ÔØÓ¦Óá£
µÚÒ»¸öÎÊÌ⣬´´½¨ DOM ÊÇÒ»¸öÈÝÒ×½â¾öµÄÎÊÌâ¡£¶øµÚ¶þ¸öÎÊÌ⣬ÔòÒ»µã¶ù²»ÈÝÒ×£¬ÌرðÊÇÒÆ³ý DOM
ºÍÏàÓ¦Ó¦ÓõļàÌý¡£µ±ÎÒÃÇÓµÓÐÒ»¸ö²»Í¬µÄ¼¼Êõջʱ£¬ÎÒÃǾÍÐèÒªÓÐÕë¶ÔÐÔÉè¼Æ³öÒ»Ì×ÕâÑùµÄÂß¼¡£
¾¡¹Ü Single-SPA ÒѾӵÓÐÁ˴󲿷ֿò¼Ü£¨Èç React¡¢Angular¡¢Vue µÈ¿ò¼Ü£©µÄÆô¶¯ºÍÐ¶ÔØ´¦Àí£¬µ«ÊÇËüÈÔÈ»²»ÊÇÊʺÏÓÚÉú²úÓÃ;¡£µ±ÎÒ»ùÓÚ
Single-SPA Ϊ Angular ¿ò¼ÜÉè¼ÆÒ»¸ö΢ǰ¶Ë¼Ü¹¹µÄÓ¦ÓÃʱ£¬ÎÒ×îºóÑ¡ÔñÖØÐ´Ò»¸ö×Ô¼ºµÄ¿ò¼Ü£¬¼´
Mooa¡£
ËäÈ»£¬ÕâÖÖ·½Ê½µÄÉÏÊÖÄѶÈÏà¶Ô±È½Ï¸ß£¬µ«ÊǺóÆÚ¶©ÖƼ°¿Éά»¤ÐԱȽϷ½±ã¡£ÔÚ²»¿¼ÂÇÿ´Î¼ÓÔØÓ¦ÓôøÀ´µÄÓû§ÌåÑéÎÊÌ⣬ÆäΨһ´æÔڵķçÏÕ¿ÉÄÜÊÇ£ºµÚÈý·½¿â²»¼æÈÝ¡£
µ«ÊÇ£¬²»ÂÛÔõÑù£¬Óë iFrame Ïà±È£¬ÆäÔÚ¼¼ÊõÉϸü¾ßÓпɴµÅ£±ÆÐÔ£¬¸üÓп´µã¡£Í¬ÑùµÄ£¬Óë iframe
ÀàËÆ£¬ÎÒÃÇÈÔÈ»Ãæ¶Ô×ÅһϵÁеIJ»´ó²»Ð¡µÄÎÊÌ⣺
ÐèÒªÉè¼ÆÒ»Ì×¹ÜÀíÓ¦ÓõĻúÖÆ
¶ÔÓÚÁ÷Á¿´óµÄ toC Ó¦ÓÃÀ´Ëµ£¬»áÔÚÊ״μÓÔØµÄʱºò£¬»á¶à³ö´óÁ¿µÄÇëÇó
¶øÎÒÃǼ´ÓÖÒª²ð·ÖÓ¦Óã¬ÓÖÏë blabla¡¡£¬ÎÒÃÇ»¹ÄÜÔõô×ö£¿
×éºÏʽ¼¯³É£º½«Ó¦ÓÃ΢¼þ»¯
×éºÏʽ¼¯³É£¬¼´Í¨¹ýÈí¼þ¹¤³ÌµÄ·½Ê½ÔÚ¹¹½¨Ç°¡¢¹¹½¨Ê±¡¢¹¹½¨ºóµÈ²½ÖèÖУ¬¶ÔÓ¦ÓýøÐÐÒ»²½µÄ²ð·Ö£¬²¢ÖØÐÂ×éºÏ¡£
´ÓÕâÖÖ¶¨ÒåÉÏÀ´¿´£¬Ëü¿ÉÄÜËã²»Éϲ¢²»ÊÇÒ»ÖÖ΢ǰ¶Ë¡ª¡ªËü¿ÉÒÔÂú×ãÁË΢ǰ¶ËµÄÈý¸öÒªËØ£¬¼´£º¶ÀÁ¢ÔËÐС¢¶ÀÁ¢¿ª·¢¡¢¶ÀÁ¢²¿Êð¡£µ«ÊÇ£¬ÅäºÏÉÏǰ¶Ë¿ò¼ÜµÄ×é¼þ
Lazyload ¹¦ÄÜ¡ª¡ª¼´ÔÚÐèÒªµÄʱºò£¬²Å¼ÓÔØ¶ÔÓ¦µÄÒµÎñ×é¼þ»òÓ¦Óã¬Ëü¿´ÉÏÈ¥¾ÍÊÇÒ»¸ö΢ǰ¶ËÓ¦Óá£
Óë´Ëͬʱ£¬ÓÉÓÚËùÓеÄÒÀÀµ¡¢Pollyfill ÒѾ¾¡¿ÉÄܵØÔÚÊ״μÓÔØÁË£¬CSS ÑùʽҲ²»ÐèÒªÖØ¸´¼ÓÔØ¡£
³£¼ûµÄ·½Ê½ÓУº
¶ÀÁ¢¹¹½¨×é¼þºÍÓ¦Óã¬Éú³É chunk Îļþ£¬¹¹½¨ºóÔÙ¹éÀàÉú³ÉµÄ chunk Îļþ¡££¨ÕâÖÖ·½Ê½¸üÀàËÆÓÚ΢·þÎñ£¬µ«Êdzɱ¾¸ü¸ß£©
¿ª·¢Ê±¶ÀÁ¢¿ª·¢×é¼þ»òÓ¦Ó㬼¯³ÉʱºÏ²¢×é¼þºÍÓ¦Óã¬×îºóÉú³Éµ¥ÌåµÄÓ¦Óá£
ÔÚÔËÐÐʱ£¬¼ÓÔØÓ¦ÓÃµÄ Runtime£¬Ëæºó¼ÓÔØ¶ÔÓ¦µÄÓ¦ÓôúÂëºÍÄ£°å¡£
Ó¦ÓüäµÄ¹ØÏµÈçÏÂͼËùʾ£¨ÆäºöÂÔͼÖÐµÄ ¡°Ç°¶Ë΢·þÎñ»¯¡±£©£º

×éºÏʽ¼¯³É¶Ô±È
ÕâÖÖ·½Ê½¿´ÉÏÈ¥Ï൱µÄÀíÏ룬¼´ÄÜÂú×ã¶à¸öÍŶӲ¢Ðпª·¢£¬ÓÖÄܹ¹½¨³öÊʺϵĽ»¸¶Îï¡£
µ«ÊÇ£¬Ê×ÏÈËüÓÐÒ»¸öÑÏÖØµÄÏÞÖÆ£º±ØÐëʹÓÃͬһ¸ö¿ò¼Ü¡£¶ÔÓÚ¶àÊýÍŶÓÀ´Ëµ£¬Õâ²¢²»ÊÇÎÊÌâ¡£²ÉÓÃ΢·þÎñµÄÍŶÓÀҲ²»»áÒòΪ΢·þÎñÕâÒ»¸öǰ¶Ë£¬À´Ê¹Óò»Í¬µÄÓïÑԺͼ¼ÊõÀ´¿ª·¢¡£µ±È»ÁË£¬Èç¹ûҪʹÓñðµÄ¿ò¼Ü£¬Ò²²»ÊÇÎÊÌ⣬ÎÒÃÇÖ»ÐèÒª½áºÏÉÏÒ»²½ÖеÄ×ÔÖÆ¿ò¼Ü¼æÈÝÓ¦ÓþͿÉÒÔÂú×ãÎÒÃǵÄÐèÇó¡£
Æä´Î£¬²ÉÓÃÕâÖÖ·½Ê½»¹ÓÐÒ»¸öÏÞÖÆ£¬ÄǾÍÊÇ£º¹æ·¶£¡*¹æ·¶£¡*¹æ·¶£¡¡£ÔÚ²ÉÓÃÕâÖÖ·½°¸Ê±£¬ÎÒÃÇÐèÒª£º
ͳһÒÀÀµ¡£Í³Ò»ÕâЩÒÀÀµµÄ°æ±¾£¬ÒýÈëеÄÒÀÀµÊ±¶¼ÐèÒªÒ»Ò»¼ÓÈë¡£
¹æ·¶Ó¦ÓõÄ×é¼þ¼°Â·ÓÉ¡£±ÜÃⲻͬµÄÓ¦ÓÃÖ®¼ä£¬ÒòΪÕâЩ×é¼þÃû³Æ·¢Éú³åÍ»¡£
¹¹½¨¸´ÔÓ¡£ÔÚÓÐЩ·½°¸ÀÎÒÃÇÐèÒªÐ޸Ĺ¹½¨ÏµÍ³£¬ÓÐЩ·½°¸ÀïÔòÐèÒª¸´Ôӵļܹ¹½Å±¾¡£
¹²ÏíͨÓôúÂë¡£ÕâÏÔÈ»ÊÇÒ»¸öÒª¾³£Ãæ¶ÔµÄÎÊÌâ¡£
ÖÆ¶¨´úÂë¹æ·¶¡£
Òò´Ë£¬ÕâÖÖ·½Ê½¿´ÆðÀ´¸üÏñÊÇÒ»¸öÈí¼þ¹¤³ÌÎÊÌâ¡£
ÏÖÔÚ£¬ÎÒÃÇÒѾÓÐÁËËÄÖÖ·½°¸£¬Ã¿¸ö·½°¸¶¼ÓÐ×Ô¼ºµÄÀû±×¡£ÏÔÈ»£¬½áºÏÆðÀ´»áÊÇÒ»ÖÖ¸üÀíÏëµÄ×ö·¨¡£
¿¼Âǵ½ÏÖÓм°³£Óõļ¼ÊõµÄ¾ÖÏÞÐÔÎÊÌ⣬ÈÃÎÒÃÇÔٴν«Ä¿¹â·ÅµÃ³¤Ô¶Ò»Ð©¡£
´¿ Web Components ¼¼Êõ¹¹½¨
ÔÚѧϰ Web Components ¿ª·¢Î¢Ç°¶Ë¼Ü¹¹µÄ¹ý³ÌÖУ¬ÎÒ³¢ÊÔȥдÁËÎÒ×Ô¼ºµÄ Web Components
¿ò¼Ü£ºoan¡£ÔÚÌí¼ÓÁËһЩ»ù±¾µÄ Web ǰ¶Ë¿ò¼ÜµÄ¹¦ÄÜÖ®ºó£¬ÎÒ·¢ÏÖÕâÏî¼¼ÊõÌØ±ðÊʺÏÓÚ×÷Ϊ΢ǰ¶ËµÄ»ùʯ¡£
Web Components ÊÇÒ»Ìײ»Í¬µÄ¼¼Êõ£¬ÔÊÐíÄú´´½¨¿ÉÖØÓõĶ¨ÖÆÔªËØ£¨ËüÃǵŦÄÜ·â×°ÔÚÄúµÄ´úÂëÖ®Í⣩²¢ÇÒÔÚÄúµÄ
Web Ó¦ÓÃÖÐʹÓÃËüÃÇ¡£
ËüÖ÷ÒªÓÉËÄÏî¼¼Êõ×é¼þ£º
Custom elements£¬ÔÊÐí¿ª·¢Õß´´½¨×Ô¶¨ÒåµÄÔªËØ¡£
Shadow DOM£¬¼´Ó°×Ó DOM£¬Í¨³£Êǽ« Shadow DOM ¸½¼Óµ½Ö÷Îĵµ DOM ÖУ¬²¢¿ÉÒÔ¿ØÖÆÆä¹ØÁªµÄ¹¦ÄÜ¡£¶øÕâ¸ö
Shadow DOM ÔòÊDz»ÄÜÖ±½ÓÓÃÆäËüÖ÷Îĵµ DOM À´¿ØÖƵġ£
HTML templates£¬¼´ <template> ºÍ <slot>
ÔªËØ£¬ÓÃÓÚ±àд²»ÔÚÒ³ÃæÖÐÏÔʾµÄ±ê¼ÇÄ£°å¡£
HTML Imports£¬ÓÃÓÚÒýÈë×Ô¶¨Òå×é¼þ¡£
ÿ¸ö×é¼þÓÉ link ±êÇ©ÒýÈ룺
<link rel="import"
href="components/di-li.html">
<link rel="import" href="components/d-header.html"> |
Ëæºó£¬ÔÚ¸÷×﵀ HTML ÎļþÀ´´½¨ÏàÓ¦µÄ×é¼þÔªËØ£¬±àдÏàÓ¦µÄ×é¼þÂß¼¡£Ò»¸öµäÐ굀 Web Components
Ó¦Óüܹ¹ÈçÏÂͼËùʾ£º

Web Components ¼Ü¹¹
¿ÉÒÔ¿´µ½Õâ±ß·½Ê½ÓëÎÒÃÇÉÏÃæÊ¹Óà iframe µÄ·½Ê½ºÜÏàËÆ£¬×é¼þÓµÓÐ×Ô¼º¶ÀÁ¢µÄ Scripts ºÍ
Styles£¬ÒÔ¼°¶ÔÓ¦µÄÓÃÓÚµ¥¶À²¿Êð×é¼þµÄÓòÃû¡£È»¶øËü²¢Ã»ÓÐÏëÏóÖеÄÄÇôÃÀºÃ£¬ÒªÖ±½ÓʹÓô¿ Web
Components À´¹¹½¨Ç°¶ËÓ¦ÓõÄÄѶÈÓУº
ÖØÐ´ÏÖÓеÄǰ¶ËÓ¦Óá£Êǵģ¬ÏÖÔÚÎÒÃÇÐèÒªÍê³ÉʹÓà Web Components À´Íê³ÉÕû¸öϵͳµÄ¹¦ÄÜ¡£
ÉÏÏÂÓÎÉú̬ϵͳ²»ÍêÉÆ¡£È±·¦ÏàÓ¦µÄһЩµÚÈý·½¿Ø¼þÖ§³Ö£¬ÕâÒ²ÊÇΪʲô jQuery Ï൱Á÷ÐеÄÔÒò¡£
ϵͳ¼Ü¹¹¸´ÔÓ¡£µ±Ó¦Óñ»²ð·ÖΪһ¸öÓÖÒ»¸öµÄ×é¼þʱ£¬×é¼þ¼äµÄͨѶ¾Í³ÉÁËÒ»¸öÌØ±ð´óµÄÂé·³¡£
Web Components ÖÐµÄ ShadowDOM ¸üÏñÊÇÐÂÒ»´úµÄǰ¶Ë DOM ÈÝÆ÷¡£¶øÒź¶µÄÊDz¢²»ÊÇËùÓеÄä¯ÀÀÆ÷£¬¶¼¿ÉÒÔÍêȫ֧³Ö
Web Components¡£
½áºÏ Web Components ¹¹½¨
Web Components ÀëÏÖÔÚµÄÎÒÃÇ̫Զ£¬¿ÉÊǽáºÏ Web Components À´¹¹½¨Ç°¶ËÓ¦Óã¬Ôò¸üÊÇÒ»ÖÖÃæÏòδÀ´ÑݽøµÄ¼Ü¹¹¡£»òÕß˵ÔÚδÀ´µÄʱºò£¬ÎÒÃÇ¿ÉÒÔ¿ªÊ¼²ÉÓÃÕâÖÖ·½Ê½À´¹¹½¨ÎÒÃǵÄÓ¦Ó᣺ÃÔÚ£¬ÒѾÓпò¼ÜÔÚ´òÔìÕâÖÖ¿ÉÄÜÐÔ¡£
¾Íµ±Ç°¶øÑÔ£¬ÓÐÁ½ÖÖ·½Ê½¿ÉÒÔ½áºÏ Web Components À´¹¹½¨Î¢Ç°¶ËÓ¦Óãº
ʹÓà Web Components ¹¹½¨¶ÀÁ¢ÓÚ¿ò¼ÜµÄ×é¼þ£¬ËæºóÔÚ¶ÔÓ¦µÄ¿ò¼ÜÖÐÒýÈëÕâЩ×é¼þ
ÔÚ Web Components ÖÐÒýÈëÏÖÓеĿò¼Ü£¬ÀàËÆÓÚ iframe µÄÐÎʽ
ǰÕßÊÇÒ»ÖÖ×é¼þʽµÄ·½Ê½£¬»òÕßÔòÏñÊÇÔÚÇ¨ÒÆÎ´À´µÄ ¡°ÒÅÁôϵͳ¡± µ½Î´À´µÄ¼Ü¹¹ÉÏ¡£
ÔÚ Web Components Öм¯³ÉÏÖÓпò¼Ü
ÏÖÓÐµÄ Web ¿ò¼ÜÒѾÓÐһЩ¿ÉÒÔÖ§³Ö Web Components
µÄÐÎʽ£¬ÖîÈç Angular Ö§³ÖµÄ createCustomElement£¬¾Í¿ÉÒÔʵÏÖÒ»¸ö Web
Components ÐÎʽµÄ×é¼þ£º
platformBrowser()
.bootstrapModuleFactory(MyPopupModuleNgFactory)
.then(({injector}) => {
const MyPopupElement = createCustomElement(MyPopup,
{injector});
customElements.define(¡®my-popup¡¯, MyPopupElement);
});
|
ÔÚδÀ´£¬½«Óиü¶àµÄ¿ò¼Ü¿ÉÒÔʹÓÃÀàËÆÕâÑùµÄÐÎʽ£¬¼¯³Éµ½ Web Components Ó¦ÓÃÖС£
¼¯³ÉÔÚÏÖÓпò¼ÜÖÐµÄ Web Components
ÁíÍâÒ»ÖÖ·½Ê½£¬ÔòÊÇÀàËÆÓÚ Stencil µÄÐÎʽ£¬½«×é¼þÖ±½Ó¹¹½¨³É Web Components ÐÎʽµÄ×é¼þ£¬ËæºóÔÚ¶ÔÓ¦µÄÖîÈ磬Èç
React »òÕß Angular ÖÐÖ±½ÓÒýÓá£
ÈçÏÂÊÇÒ»¸öÔÚ React ÖÐÒýÓà Stencil Éú³ÉµÄ Web Components
µÄÀý×Ó£º
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import 'test-components/testcomponents';
ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker(); |
ÔÚÕâÖÖÇé¿ö֮ϣ¬ÎÒÃǾͿÉÒÔ¹¹½¨³ö¶ÀÁ¢ÓÚ¿ò¼ÜµÄ×é¼þ¡£
ͬÑùµÄ Stencil ÈÔȻҲֻÊÇÖ§³Ö×î½üµÄһЩä¯ÀÀÆ÷£¬±ÈÈ磺Chrome¡¢Safari¡¢Firefox¡¢Edge
ºÍ IE11
¸´ºÏÐÍ
¸´ºÏÐÍ£¬¶Ô¾ÍÊÇÉÏÃæµÄ¼¸¸öÀà±ðÖУ¬Ëæ±ãÌô¼¸ÖÖ×éºÏµ½Ò»Æð¡£
ÎҾͲ»·Ï»°ÁË~~¡£
½áÂÛ
ÄÇô£¬ÎÒÃÇÓ¦¸ÃÓÃÄÄÖÖ΢ǰ¶Ë·½°¸ÄØ£¿´ð°¸¼ûÏÂһƪ¡¶Î¢Ç°¶Ë¿ìËÙÑ¡ÐÍÖ¸ÄÏ¡·
Ïà¹Ø×ÊÁÏ£º
MDN Ó°×ÓDOM£¨Shadow DOM£©
Web Components
Shadow DOM v1£º¶ÀÁ¢µÄÍøÂç×é¼þ
|