ʱ¹ý¾³Ç¨£¬Web
Ó¦ÓñÈÒÔÍùÈκÎʱºò¶¼¸ü¾ß½»»¥ÐÔ¡£¸ã¶¨ÐÔÄÜ¿ÉÒÔ°ïÖúÄ㼫´óµØ¸ÄÉÆÖÕ¶ËÓû§µÄÌåÑé¡£ÔĶÁÒÔϵļ¼Çɲ¢Ñ§ÒÔÖÂÓ㬿´¿´ÄÄЩ¿ÉÒÔÓÃÀ´¸ÄÉÆÑÓ³Ù£¬äÖȾʱ¼äÒÔ¼°ÕûÌåÐÔÄܰɣ¡
¸ü¿ìµÄ Web Ó¦ÓÃ
ÓÅ»¯ Web Ó¦ÓÃÊÇÒ»Ïî·Ñ¾¢µÄ¹¤×÷¡£Web Ó¦Óò»½ö´¦ÓÚ¿Í»§¶ËºÍ·þÎñÆ÷¶ËµÄÁ½²¿·Ö×é¼þµ±ÖУ¬Í¨³£À´ËµÒ²ÊÇÓɶàÖÖ¶àÑùµÄ¼¼ÊõÕ»¹¹½¨¶ø³É£ºÊý¾Ý¿â£¬ºó¶Ë×é¼þ£¨Ò»°ãÒ²ÊǴÔÚ²»Í¬¼¼Êõ¼Ü¹¹Ö®Éϵģ©£¬ÒÔ¼°Ç°¶Ë£¨HTML
+ JavaScript + CSS + תÒëÆ÷£©¡£ÔËÐÐʱҲÊDZ仯¶à¶ËµÄ£ºiOS£¬Android£¬Chrome£¬Firefox£¬Edge¡£Èç¹ûÄãÔø¾¹¤×÷ÔÚÒ»¸ö²»Í¬µÄµ¥Ò»ÅÓ´óµÄƽ̨֮ÉÏ£¬Í¨³£Çé¿öÏÂÐÔÄÜÓÅ»¯Ö»Õë¶ÔÓÚµ¥Ò»Ä¿±ê£¨ÉõÖÁÖ»ÊÇÄ¿±êµÄµ¥Ò»°æ±¾¶øÒÑ£©£¬µ«ÊÇÏÖÔڵϰÄã¾Í¿ÉÄÜ»áÒâʶµ½ÈÎÎñ¸´ÔÓ¶ÈÒªÔ¶³¬ÓÚ´Ë¡£Õâ¾Í¶ÔÁË¡£µ«Õâ¶ùÒ²ÓÐһЩͨÓõÄÓÅ»¯Ö¸ÄÏ¿ÉÒÔ´ó´óÓÅ»¯Ò»¸öÓ¦Óá£ÎÒÃǽ«»áÔÚ½ÓÏÂÀ´µÄÕ½ÚÖÐ̽ÌÖÕâЩָÄϵÄÄÚÈÝ¡£
¹ýÔçÓÅ»¯£¿
ÓÅ»¯×îÄѵĵط½¾ÍÊÇÈçºÎÔÚ¿ª·¢ÉúÃüÖÜÆÚÖÐ×îÊʵ±µÄʱºòÈ¥×öÓÅ»¯¡£Donald Knuth ÓÐÒ»¾äÃûÑÔ£º¡¸¹ýÔçÓÅ»¯ÄËÍò¶ñÖ®Ô´¡¹¡£Õâ¾ä»°±³ºóµÄÔÒò·Ç³£¼òµ¥£ºÒòΪһ²»Ð¡ÐľͻáÀË·Ñʱ¼äÈ¥ÓÅ»¯Ä³¸ö
1% µÄµØ·½£¬µ«Êǽá¹ûÈ´²¢²»»á¶ÔÐÔÄÜÔì³ÉÊ²Ã´ÖØ´óÓ°Ïì¡£Óë´Ëͬʱ£¬Ò»Ð©ÓÅ»¯»¹·Á°Á˿ɶÁÐÔ»òÕßÊÇ¿Éά»¤ÐÔ£¬ÉõÖÁ»¹»áÒýÈëеÄ
Bug¡£»»¾ä»°Ëµ£¬ÓÅ»¯²»Ó¦µ±±»ÈÏΪÊÇ¡¸Òâζ×ŵõ½Ó¦ÓóÌÐòµÄ×î¼ÑÐÔÄÜ¡¹£¬¶øÊÇ¡¸Ì½Ë÷ÓÅ»¯Ó¦ÓõÄÕýÈ·µÄ·½Ê½£¬²¢µÃµ½×î´óµÄÐ§Òæ¡¹¡£ÔÙ»»¾ä»°Ëµ£¬Ã¤Ä¿µÄÓÅ»¯¿ÉÄܻᵼÖÂЧÂʵĶªÊ§£¬¶øÊÕÒæÈ´ºÜС¡£ÔÚÄãÓ¦ÓÃÒÔϼ¼ÇɵÄʱºòÇ뽫´ËÃú¼ÇÔÚÐÄ¡£Äã×îºÃµÄÅóÓѾÍÊÇ·ÖÎö¹¤¾ß£ºÕÒµ½Äã¿ÉÒÔ½øÐÐͨ¹ýÓÅ»¯»ñµÃ×î´ó³Ì¶È¸ÄÉÆµÄÐÔÄܵ㣬¶ø²»ÓÃËðº¦Ó¦Óÿª·¢µÄ½ø³Ì»òÕß¿Éά»¤ÐÔ¡£
1. JavaScript ѹËõºÍÄ£¿é´ò°ü
JavaScript Ó¦ÓÃÊÇÒÔÔ´ÂëÐÎʽ½øÐзַ¢µÄ£¬¶øÔ´Âë½âÎöµÄЧÂÊÊÇÒª±È×Ö½ÚÂëµÍµÄ¡£¶ÔÓÚһС¶Î½Å±¾À´Ëµ£¬Çø±ð¿ÉÒÔºöÂÔ²»¼Æ¡£µ«ÊǶÔÓÚ¸ü´óÐ͵ÄÓ¦Ó㬽ű¾µÄ´óС»á¶ÔÓ¦ÓÃÆô¶¯Ê±¼äÓÐןºÃæµÄÓ°Ïì¡£ÊÂʵÉÏ£¬¼ÄÆÚÍûÓÚʹÓÃ
WebAssembly ¶ø»ñµÃ×î´ó³Ì¶ÈµÄ¸ÄÉÆ£¬ÆäÖÐÖ®Ò»¾ÍÊÇ¿ÉÒԵõ½¸ü¿ìµÄÆô¶¯Ê±¼ä¡£
ÁíÒ»·½Ã棬ģ¿é´ò°üÔòÓÃÓÚ½«²»Í¬½Å±¾´ò°üÔÚÒ»Æð²¢·Å½øÍ¬Ò»Îļþ¡£¸üÉÙµÄ HTTP ÇëÇóºÍµ¥¸öÎļþ½âÎö¶¼¿ÉÒÔ¼õÉÙ¼ÓÔØÊ±¼ä¡£Í¨³£Çé¿öÏ£¬µ¥¶ÀÒ»ÖÖ¹¤¾ß¾Í¿ÉÒÔ´¦Àí´ò°üºÍѹËõ¡£Webpack
¾ÍÊÇÆäÖÐÖ®Ò»¡£
ʾÀý´úÂ룺
function insert(i) {
document.write("Sample " + i);
}
for(var i = 0; i < 30; ++i) {
insert(i);
} |
½á¹ûÈçÏ£º
!function(r){function t(o){if(e[o])return e[o] .exports;var
n=e[o]={exports:{},id:o,loaded:!1};return r[o].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var
e={}; return t.m=r,t.c=e,t.p="",t(0)}([function(r,t){function
e(r) {document.write("Sample "+r)}for(var
o=0;30>o;++o)e(o)}]);
//# sourceMappingURL=bundle.min.js.map |
½øÒ»²½´ò°ü
ÄãÒ²¿ÉÒÔʹÓà Webpack ´ò°ü CSS ÎļþÒÔ¼°ºÏ²¢Í¼Æ¬¡£ÕâÐ©ÌØÐÔ¶¼¿ÉÒÔÓÐÖúÓÚ¸ÄÉÆÆô¶¯Ê±¼ä¡£Ñо¿Ò»ÏÂ
Webpack ÎĵµÀ´×öЩ²âÊÔ°É£¡
2. °´Ðè¼ÓÔØ×ÊÔ´
×ÊÔ´£¨ÌرðÊÇͼƬ£©µÄ°´Ðè¼ÓÔØ»òÕß˵¶èÐÔ¼ÓÔØ£¬¿ÉÒÔÓÐÖúÓÚÄãµÄ Web Ó¦ÓÃÔÚÕûÌåÉÏ»ñµÃ¸üºÃµÄÐÔÄÜ¡£¶ÔÓÚʹÓôóÁ¿Í¼Æ¬µÄÒ³ÃæÀ´Ëµ¶èÐÔ¼ÓÔØÓÐ×ÅÏÔÖøµÄÈý¸öºÃ´¦£º
¼õÉÙÏò·þÎñÆ÷·¢³öµÄ²¢·¢ÇëÇóÊýÁ¿£¨Õâ¾ÍʹµÃÒ³ÃæµÄÆäËû²¿·Ö»ñµÃ¸ü¿ìµÄ¼ÓÔØÊ±¼ä£©
¼õÉÙä¯ÀÀÆ÷µÄÄÚ´æÊ¹ÓÃÂÊ£¨¸üÉÙµÄͼƬ£¬¸üÉÙµÄÄڴ棩
¼õÉÙ·þÎñÆ÷¶ËµÄ¸ºÔØ
´óÌåÉϵÄÀíÄî¾ÍÊÇÖ»ÔÚ±ØÒªµÄʱºò²ÅÈ¥¼ÓÔØÍ¼Æ¬»ò×ÊÔ´£¨ÈçÊÓÆµ£©£¬±ÈÈçÔÚµÚÒ»´Î±»ÏÔʾµÄʱºò£¬»òÕßÊÇÔÚ½«ÒªÏÔʾµÄʱºò¶ÔÆä½øÐмÓÔØ¡£ÓÉÓÚÕâÖÖ·½Ê½¸úÄ㽨վµÄ·½Ê½ÃÜÇÐÏà¹Ø£¬¶èÐÔ¼ÓÔØµÄ½â¾ö·½°¸Í¨³£ÐèÒª½èÖúÆäËû¿âµÄ²å¼þ»òÕßÀ©Õ¹À´ÊµÏÖ¡£¾Ù¸öÀý×Ó£¬react-lazy-load
¾ÍÊÇÒ»¸öÓÃÓÚ´¦Àí React ¶èÐÔ¼ÓÔØÍ¼Æ¬µÄ²å¼þ£º
const MyComponent = () => ( <div>
Scroll to load images. <div className="filler"
/> <LazyLoad height={762} offsetVertical={300}>
<img src='http://apod.nasa.gov/apod/image /1502/HDR_MVMQ20Feb2015ouellet1024.jpg'
/> </LazyLoad>
(...) |
3. ÔÚʹÓà DOM ²Ù×÷¿âʱÓÃÉÏ array-ids
Èç¹ûÄãÕýÔÚʹÓà React£¬Ember£¬Angular »òÕ߯äËû DOM ²Ù×÷¿â£¬Ê¹Óà array-ids£¨»òÕß
Angular 1.x ÖÐµÄ track-by ÌØÐÔ£©·Ç³£ÓÐÖúÓÚʵÏÖ¸ßÐÔÄÜ£¬¶ÔÓÚ¶¯Ì¬ÍøÒ³ÓÈÆäÈç´Ë¡£ÎÒÃÇÒѾÔÚÉÏһƪ³ÌÐòºâÁ¿±ê×¼µÄÎÄÕÂÖп´µ½Õâ¸öÌØÐÔµÄЧ¹ûÁË£º
More Benchmarks: Virtual DOM vs Angular 1 & 2
vs Mithril.js vs cito.js vs The Rest (Updated and
Improved!)¡£

´ËÌØÐÔ±³ºóµÄÖ÷Òª¸ÅÄî¾ÍÊǾ¡¿ÉÄÜ¶àµØÖØÓÃÒÑÓеĽڵ㡣Array ids ʹµÃ DOM ²Ù×÷ÒýÇæ¿ÉÒÔ¡¸ÖªµÀ¡¹ÔÚʲôʱºòij¸ö½Úµã¿ÉÒÔ±»Ó³Éäµ½Êý×éµ±ÖеÄij¸öÔªËØ¡£Ã»ÓÐ
array-ids »òÕß track-by µÄ»°£¬´ó²¿·Ö¿â¶¼»á½øÐÐÖØÐÂÅÅÐò¶ø´Ý»ÙÒÑÓÐµÄ½Úµã²¢ÖØÐ´´½¨Ðµġ£Õâ¾Í·Ç³£ËðºÄÐÔÄÜÁË¡£
4. »º´æ
Caches ÊÇÓÃÓÚ´æ´¢ÄÇЩ±»Æµ·±´æÈ¡µÄ¾²Ì¬Êý¾ÝµÄ×é¼þ£¬±ãÓÚËæºó¶ÔÓÚÕâ¸öÊý¾ÝµÄÇëÇó¿ÉÒÔ¸ü¿ìµØ±»ÏìÓ¦£¬»òÕß˵ÇëÇó·½Ê½¸ü¼Ó¸ßЧ¡£ÓÉÓÚ
Web Ó¦ÓÃÊÇÓɺܶà¿É²ðжµÄ²¿¼þ×éºÏ¶ø³É£¬»º´æ¾Í¿ÉÒÔ´æÔÚÓڼܹ¹Öеĺܶಿ·Ö¡£¾ÙÀýÀ´Ëµ£¬»º´æ¿ÉÒÔ±»·ÅÔÚ¶¯Ì¬ÄÚÈÝ·þÎñÆ÷ºÍ¿Í»§¶ËÖ®¼ä£¬¾Í¿ÉÒÔ±ÜÃ⹫¹²ÇëÇóÒÔ¼õÉÙ·þÎñÆ÷µÄ¸ºÔØ£¬Óë´Ëͬʱ¸ÄÉÆÏìӦʱ¼ä¡£ÆäËû»º´æ¿ÉÄܱ»·ÅÖÃÔÚ´úÂëÀÒÔÓÅ»¯Ä³Ð©ÓÃÓڽű¾´æÈ¡µÄͨÓÃģʽ£¬»¹ÓÐЩ»º´æ¿ÉÄܱ»·ÅÖÃÔÚÊý¾Ý¿â»òÕßÊdz¤ÔËÐнø³Ì֮ǰ¡£
¼ò¶øÑÔÖ®£¬ÔÚ Web Ó¦ÓÃÖÐʹÓûº´æÊÇÒ»ÖÖ¸ÄÉÆÏìӦʱ¼äºÍ¼õÉÙ CPU ʹÓõľø¼Ñ·½Ê½¡£Äѵã¾ÍÔÚÓÚ¸ãÇå³þÄÄÀï²ÅÊÇÔڼܹ¹Öдæ·Å»º´æµÄµØ·½¡£ÔÙÒ»´Î£¬´ð°¸¾ÍÊÇÐÔÄÜ·ÖÎö£º³£¼ûµÄÆ¿¾±ÔÚÄÄÀÊý¾Ý»òÕß½á¹û¿É»º´æÂð£¿ËûÃǶ¼Ì«ÈÝÒ×ʧЧÂð£¿Õâ¶¼ÊÇһЩ¼¬ÊÖµÄÎÊÌ⣬ÐèÒª´ÓÔÀíÉÏÀ´Ò»µãÒ»µã»Ø´ð¡£
»º´æµÄʹÓÃÔÚ Web »·¾³Öи»Óд´ÔìÐÔ¡£±ÈÈ磬basket.js ¾ÍÊÇÒ»¸öʹÓÃLocal Storage
À´»º´æÓ¦Óýű¾µÄ¿â¡£ËùÒÔÄãµÄ Web Ó¦ÓÃÔÚµÚ¶þ´ÎÔËÐнű¾µÄʱºò¾Í¿ÉÒÔ¼¸ºõ˲¼ä¼ÓÔØÁË¡£
Èç½ñÒ»¸ö¹ãÊÜ»¶ÓµÄ»º´æ·þÎñ¾ÍÊÇÑÇÂíÑ·µÄ CloudFront¡£CloudFront ¾Í¸úͨ³£µÄÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©ÓÃ;һÑù£¬¿ÉÒÔ±»ÉèÖÃ×÷Ϊ¶¯Ì¬ÄÚÈݵĻº´æ¡£
5. ÆôÓÃ HTTP/2
Ô½À´Ô½¶àµÄä¯ÀÀÆ÷¶¼¿ªÊ¼Ö§³Ö HTTP/2¡£Õâ¿ÉÄÜÌýÆðÀ´Ã»ÓбØÒª£¬µ«ÊÇ HTTP/2 Ϊͬһ·þÎñÆ÷µÄ²¢·¢Á¬½ÓÎÊÌâ´øÀ´Á˺ܶàºÃ´¦¡£»»¾ä»°Ëµ£¬Èç¹ûÓкܶàСÐÍ×ÊÔ´ÐèÒª¼ÓÔØ£¨Èç¹ûÄã´ò°ü¹ýµÄ»°¾ÍûÓбØÒªÁË£©£¬ÔÚÑÓ³ÙºÍÐÔÄÜ·½Ãæ
HTTP/2 Ãëɱ HTTP/1¡£ÊÔÊÔ Akamai µÄ HTTP/2 demo£¬¿ÉÒÔÔÚ×îеÄä¯ÀÀÆ÷Öп´µ½Çø±ð¡£

6. Ó¦ÓÃÐÔÄÜ·ÖÎö
ÐÔÄÜ·ÖÎöÊÇÓÅ»¯ÈκÎÓ¦ÓóÌÐòʱµÄÖØÒªÒ»²½¡£¾ÍÏñ½éÉÜÖÐËùÌáµ½µÄÄÇÑù£¬Ã¤Ä¿³¢ÊÔÓÅ»¯Ó¦Óþ³£»áµ¼ÖÂЧÂʵÄÀË·Ñ£¬Î¢²»×ãµÀµÄÊÕÒæºÍ¸ü²îµÄ¿Éά»¤ÐÔ¡£Ö´ÐÐÐÔÄÜ·ÖÎöÊÇʶ±ðÄãµÄÓ¦ÓÃÎÊÌâËùÔÚµÄÒ»¸öÖØÒª²½Öè¡£
¶ÔÓÚ Web Ó¦ÓÃÀ´Ëµ£¬ÑÓ³Ùʱ¼äÊÇ×î´óµÄ±§Ô¹Ö®Ò»£¬ËùÒÔÄãÐèҪȷ±£Êý¾ÝµÄ¼ÓÔØºÍÏÔʾ¶¼¾¡¿ÉÄܵÿ졣Chrome
ÌṩÁ˷dz£°ôµÄÐÔÄÜ·ÖÎö¹¤¾ß¡£ÌرðÊÇ Chrome Dev Tools ÖеÄʱ¼äÏߺÍÍøÂçÊÓͼ¶¼¶ÔÓÚ¶¨Î»ÑÓ³ÙÎÊÌâÓÐןܴóµÄ°ïÖú£º

ʱ¼äÏßÊÓͼ¿ÉÒÔ°ïæÕÒµ½ÔËÐÐʱ¼ä½Ï³¤µÄ²Ù×÷¡£

ÍøÂçÊÓͼ¿ÉÒÔ°ïÖúʶ±ð³ö¶îÍâµÄÓÉ»ºÂýÇëÇóµ¼ÖµÄÑÓ³Ù»ò¶ÔÓÚijһ¶ËµãµÄ´®ÐзÃÎÊ¡£
ÕýÈ··ÖÎöµÄ»°£¬ÄÚ´æÔòÊÇÁíÒ»¿é¿ÉÄÜ»ñµÃÊÕÒæµÄ²¿·Ö¡£Èç¹ûÄãÕýÔÚÔËÐÐ×ÅÒ»¸öÓµÓкܶàÐéÄâÔªËØµÄÒ³Ãæ£¨ÅÓ´óµÄ¶¯Ì¬±í¸ñ£©»òÕ߿ɽ»»¥Ê½µÄÔªËØ£¨±ÈÈçÓÎÏ·£©£¬ÄÚ´æÓÅ»¯¿ÉÒÔ»ñµÃ¸üÉٵĿ¨¶ÙºÍ¸ü¸ßµÄÖ¡ÂÊ¡£´ÓÎÒÃÇ×î½üµÄÎÄÕÂ
4 Types of Memory Leaks in JavaScript and How to Get
Rid Of Them ÖУ¬¶ÔÓÚÈçºÎʹÓà Chrome µÄ¿ª·¢¹¤¾ßÓÐ׎øÒ»²½µÄÉî¶ÈÀí½â¡£
CPU ÐÔÄÜ·ÖÎöÒ²¿ÉÒÔÔÚ Chrome Dev Tools ÖÐÕÒµ½¡£¿´¿´ÕâÆªÀ´×Ô Google ¹Ù·½ÎĵµÖеÄÎÄÕÂ
Profiling JavaScript Performance¡£

ÕÒµ½ÐÔÄÜËðºÄµÄÖÐÐÄ¿ÉÒÔÈÃÄãÓÐЧÂʵشﵽÓÅ»¯µÄÄ¿±ê¡£
¶Ôºó¶ËµÄÐÔÄÜ·ÖÎö»á¸ü¼ÓÀ§ÄÑ¡£Í¨³£Çé¿öÏ£¬È·ÈÏÒ»¸öºÄ·Ñ½Ï¶àʱ¼äµÄÇëÇó¿ÉÒÔÈÃÄãÃ÷È·Ó¦¸ÃÓÅÏÈ·ÖÎöÄÄÒ»¸ö·þÎñ¡£¶ÔÓÚºó¶ËµÄ·ÖÎö¹¤¾ßÀ´Ëµ£¬ÔòÈ¡¾öÓÚËù¹¹½¨µÄ¼¼ÊõÕ»¡£
Ò»¸ö¹ØÓÚËã·¨µÄ×¢ÒâÊÂÏî
ÔÚ´ó¶àÊýÇé¿öÏ£¬Ñ¡ÔñÒ»¸ö¸üÓŵÄËã·¨£¬±ÈÎ§ÈÆ×ÅС³É±¾ÖÐÐÄËùʵÏֵľßÌåÓÅ»¯²ßÂÔÄܹ»»ñµÃ¸ü´óµÄÊÕÒæ¡£ÔÚijÖ̶ֳÈÉÏ£¬CPU
ºÍÄÚ´æ·ÖÎöÓ¦¸Ã¿ÉÒÔ°ïÄãÕÒµ½´óµÄÐÔÄÜÆ¿¾±¡£µ±ÕâЩƿ¾±¸ú±àÂëÎÊÌâ²¢²»Ïà¹ØÊ±£¬ÔòÊÇʱºò¿¼ÂÇ¿¼ÂDz»Í¬µÄËã·¨ÁË¡£
7. ʹÓøºÔؾùºâ·½°¸
ÎÒÃÇÔÚ֮ǰÌÖÂÛ»º´æµÄʱºò¼òÒªÌáµ½ÁËÄÚÈÝ·Ö·¢ÍøÂ磨CDNs£©¡£°Ñ¸ºÔØ·ÖÅäµ½²»Í¬µÄ·þÎñÆ÷£¨ÉõÖÁÓÚ²»Í¬µÄµØÀíÇøÓò£©¿ÉÒÔ¸øÄãµÄÓû§Ìṩ¸üºÃµÄÑÓ³Ùʱ¼ä£¬µ«ÊÇÕâÌõ·»¹ºÜÂþ³¤£¬ÌرðÊÇÔÚ´¦ÀíºÜ¶àµÄ²¢·¢Á¬½ÓµÄʱºò¡£
¸ºÔؾùºâ¾Í¸úʹÓÃij¸ö round-robin£¨Ñ»·£©½â¾ö·½°¸Ò»Ñù¼òµ¥£¬¿ÉÒÔ»ùÓÚÒ»¸ö nginx ·´Ïò´úÀí
£¬»òÕß»ùÓÚÒ»¸ö³ÉÊìµÄ·Ö²¼Ê½ÍøÂ磬±ÈÈç Cloudflare »òÕß Amazon CloudFront¡£

ÒÔÉϵÄͼÀ´×ÔÓÚ Citrix¡£ ΪÁËʹ¸ºÔؾùºâÕæÕýÓÐЧ£¬¶¯Ì¬ÄÚÈݺ;²Ì¬ÄÚÈݶ¼Ó¦¸Ã±»²ð·Ö³ÉÒ×ÓÚ²¢·¢·ÃÎʵġ£»»¾ä»°Ëµ£¬ÔªËصĴ®ÐηÃÎÊ»áÏ÷Èõ¸ºÔؾùºâÆ÷ÒÔ×î¼ÑÐÎʽ½øÐзÖÁ÷µÄÄÜÁ¦¡£Óë´Ëͬʱ£¬¶ÔÓÚ×ÊÔ´µÄ²¢·¢·ÃÎÊ¿ÉÒÔ¸ÄÉÆÆô¶¯Ê±¼ä¡£
ËäÈ»¸ºÔؾùºâ¿ÉÄÜ»áºÜ¸´ÔÓ¡£¶Ô×îÖÕÒ»ÖÂÐÔËã·¨²»ÓѺõÄÊý¾ÝÄ£ÐÍ£¬»òÕß»º´æ¶¼»áÈÃÊÂÇé¸ü¼ÓÀ§ÄÑ¡£ÐÒÔ˵ÄÊÇ£¬´ó¶àÊýÓ¦ÓöÔÓÚÒѼò»¯µÄÊý¾Ý¼¯¶¼Ö»ÐèÒª±£Ö¤¸ß²ã´ÎµÄÒ»ÖÂÐÔ¼´¿É¡£Èç¹ûÄãµÄÓ¦ÓóÌÐòûÓÐÕâÑùÉè¼ÆµÄ»°£¬¾ÍÓбØÒªÖع¹Ò»ÏÂÁË¡£
8. ΪÁ˸ü¿ìµÄÆô¶¯Ê±¼ä¿¼ÂÇÒ»ÏÂͬ¹¹ JavaScript
¸ÄÉÆ Web Ó¦ÓóÌÐò¹Û¸ÐµÄ·½Ê½Ö®Ò»£¬¾ÍÊǼõÉÙÆô¶¯Ê±¼ä»òÕß¼õÉÙÊ×Ò³äÖȾʱ¼ä¡£Õâ¶ÔÓÚÐÂÐ˵ĵ¥Ò³ÃæÓ¦ÓÃÓÈÎªÖØÒª£¬ÆäÐèÒªÔÚ¿Í»§¶ËÖ´ÐдóÁ¿ÈÎÎñ¡£ÔÚ¿Í»§¶Ë×ö¸ü¶àÊÂÇéͨ³£¾ÍÒâζ×Å£¬ÔÚµÚÒ»´ÎäÖȾ±»Ö´ÐÐ֮ǰ¾ÍÐèÒªÏÂÔØ¸ü¶àµÄÐÅÏ¢¡£Í¬¹¹
JavaScript ¿ÉÒÔ½â¾öÕâ¸öÎÊÌ⣺×Ô´Ó JavaScript ¿ÉÒÔͬʱÔËÐÐÔÚ¿Í»§¶ËºÍ·þÎñÆ÷¶Ë£¬Õâ¾ÍÈÃÔÚ·þÎñÆ÷¶ËÀ´Ö´ÐÐÒ³ÃæµÄÊ×´ÎäÖȾ³ÉΪ¿ÉÄÜ£¬ÏȰÑÒÑäÖȾµÄÒ³Ãæ·¢ËͳöȥȻºóÔÙÓɿͻ§¶ËµÄ½Å±¾½Ó¹Ü¡£ÕâÏÞÖÆÁËËùʹÓõĺó¶Ë£¨±ØÐëʹÓÃÖ§³Ö¸ÃÌØÐÔµÄ
JavaScript ¿ò¼Ü£©£¬µ«È´ÄÜ»ñµÃ¸üºÃµÄÓû§ÌåÑé¡£¾ÙÀýÀ´Ëµ£¬React ¾ÍºÜÊʺÏÓÚ×öÕâ¸ö£¬¾ÍÏñÒÔÏ´úÂëËùʾ£º
var React = require('react/addons');
var ReactApp = React.createFactory (require('../components/ReactApp').ReactApp);
module.exports = function(app) {
app.get('/', function(req, res){
// React.renderToString takes your component
// and generates the markup
var reactHtml = React.renderToString(ReactApp({}));
// Output html rendered by react
// console.log(myAppHtml);
res.render('index.ejs', {reactOutput: reactHtml});
});
}; |
Meteor.js ¶ÔÓÚ¿Í»§¶ËºÍ·þÎñÆ÷¶ËµÄ JavaScript »ìÓÃÓÐ×ŷdz£°ôµÄÖ§³Ö¡£
if (Meteor.isClient) {
Template.hello.greeting = function () {
return "Welcome to myapp.";
};
Template.hello.events({
'click input': function () {
// template data, if any, is available in 'this'
if (typeof console !== 'undefined')
console.log("You pressed the button");
}
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
} |
µ«ÊÇ£¬ÎªÁËÖ§³Ö·þÎñÆ÷¶ËäÖȾ£¬ÐèÒªÏñ meteor-ssr ÕâÑùµÄ²å¼þ¡£
лл gabrielpoca ÔÚÆÀÂÛÖÐÖ¸³öÕâÒ»µã¡£Èç¹ûÄãÓи´ÔӵĻòÕßÖеȴóСµÄÓ¦ÓÃÐèÒªÖ§³Öͬ¹¹²¿Êð£¬ÊÔÊÔÕâ¸ö£¬Äã¿ÉÄÜ»á¸Ðµ½¾ªÑȵġ£
9. ʹÓÃË÷Òý¼ÓËÙÊý¾Ý¿â²éѯ
Èç¹ûÄãÐèÒª½â¾öÊý¾Ý¿â²éѯºÄ·Ñ´óÁ¿Ê±¼äµÄÎÊÌ⣨·ÖÎöÄãµÄÓ¦Óÿ´¿´ÊÇ·ñÊÇÕâÖÖÇé¿ö£¡£©£¬ÊÇʱºòÕÒ³ö¼ÓËÙÊý¾Ý¿âµÄ·½·¨ÁË¡£Ã¿¸öÊý¾Ý¿âºÍÊý¾ÝÄ£ÐͶ¼ÓÐ×Ô¼ºµÄȨºâ¡£Êý¾Ý¿âÓÅ»¯ÔÚÿһ·½Ãæ¶¼ÊÇÒ»¸öÖ÷Ì⣺Êý¾ÝÄ£ÐÍ£¬Êý¾Ý¿âÀàÐÍ£¬¾ßÌåʵÏÖ·½°¸£¬µÈµÈ¡£ÌáËÙ¿ÉÄܲ»ÊÇÄÇôµÄ¼òµ¥¡£µ«ÊÇÕâ¶ùÓиö½¨Ò飬¿ÉÄÜ¿ÉÒÔ¶ÔijЩÊý¾Ý¿âÓÐËù°ïÖú£ºË÷Òý¡£Ë÷ÒýÊÇÒ»¸ö¹ý³Ì£¬¼´Êý¾Ý¿âËù´´½¨µÄ¿ìËÙ·ÃÎÊÊý¾Ý½á¹¹£¬´ÓÄÚ²¿Ó³Éäµ½¼ü£¨ÔÚ¹ØÏµÊý¾Ý¿âÖеÄÁУ©£¬¿ÉÒÔÌá¸ß¼ìË÷Ïà¹ØÊý¾ÝµÄËÙ¶È¡£´ó¶àÊýÏÖ´úÊý¾Ý¿â¶¼Ö§³ÖË÷Òý¡£Ë÷Òý²¢²»ÊÇÎĵµÐÍÊý¾Ý¿â£¨±ÈÈç
MongoDB£©Ëù¶ÀÓеģ¬Ò²°üÀ¨¹ØÏµÐÍÊý¾Ý¿â£¨±ÈÈçPostgreSQL£©¡£
ΪÁËʹÓÃË÷ÒýÀ´ÓÅ»¯ÄãµÄ²éѯ£¬Ä㽫ÐèÒªÑо¿Ò»ÏÂÓ¦ÓóÌÐòµÄ·ÃÎÊģʽ£ºÊ²Ã´ÊÇ×î³£¼ûµÄ²éѯ£¬ÔÚÄĸö¼ü»òÁÐÖÐÖ´ÐÐËÑË÷£¬µÈµÈ¡£
10. ʹÓøü¿ìµÄתÒë·½°¸
JavaScript Èí¼þ¼¼ÊõÕ»Ò»Èç¼ÈÍùµÄ¸´ÔÓ¡£¶ø¸ÄÉÆÓïÑÔ±¾ÉíµÄÐèÇóÔòÓÖÔö¼ÓÁ˸´ÔÓ¶È¡£²»ÐÒµØÊÇ£¬JavaScript
×÷ΪĿ±êƽ̨ÓֻᱻÓû§µÄÔËÐÐʱËùÏÞÖÆ¡£¾¡¹ÜºÜ¶à¸Ä½øÒѾÒÔ ECMAScript 2015£¨2016ÕýÔÚ½øÐУ©µÄÐÎʽʵÏÖÁË£¬µ«ÊÇͨ³£Çé¿öÏ£¬¶Ô¿Í»§¶Ë´úÂëÀ´ËµÓÖ²»¿ÉÄÜÒÀÀµÓÚÕâ¸ö°æ±¾¡£ÕâÖÖÇ÷ÊÆ´ÙʹÁËһϵÁеÄתÒëÆ÷£ºÓÃÓÚ´¦Àí
ECMAScript 2015 ´úÂëµÄ¹¤¾ßºÍֻʹÓà ECMAScript 5 ½á¹¹ÊµÏÖÆäÖÐËùȱʧµÄÌØÐÔ¡£Óë´Ëͬʱ£¬Ä£¿é°ó¶¨ºÍѹËõ´¦ÀíÒ²ÒѾ±»¼¯³Éµ½Õâ¸öÉú²ú¹ý³ÌÖУ¬±»³ÆÎªÎª·¢²¼¶ø¹¹½¨µÄ´úÂë°æ±¾¡£ÕâЩ¹¤¾ß¿ÉÒÔת»¯´úÂ룬²¢ÇÒÄܹ»ÒÔÓÐÏ޵ķ½Ê½Ó°Ïìµ½×îÖÕ´úÂëµÄÐÔÄÜ¡£Google
¿ª·¢Õß Paul Irish »¨ÁËһЩʱ¼äÀ´Ñ°ÕÒÕâЩתÒë·½°¸»áÈçºÎÓ°ÏìÐÔÄܺÍ×îÖÕ´úÂëµÄ´óС¡£¾¡¹Ü´ó¶àÊýÇé¿öÏÂÊÕÒæ»áºÜС£¬µ«Ò²ÖµµÃÔÚÕýʽ²ÉÓÃij¸ö¹¤¾ßջ֮ǰ¿´¿´ÕâЩÊý¾Ý¡£¶ÔÓÚ´óÐÍÓ¦ÓóÌÐòÀ´Ëµ£¬ÕâÖÖÇø±ð¿ÉÄÜ»áÓ°ÏìÖØ´ó¡£
11. ±ÜÃâ»ò×îС»¯ JavaScript ºÍ CSS µÄʹÓöø×èÈûäÖȾ
JavaScript ºÍ CSS ×ÊÔ´¶¼»á×èÈûÒ³ÃæµÄäÖȾ¡£Í¨¹ý²ÉȡijЩµÄ¹æÔò£¬Äã¿ÉÒÔ±£Ö¤ÄãµÄ½Å±¾ºÍ
CSS ±»¾¡¿ÉÄÜ¿ìËٵش¦Àí£¬ÒÔ±ãÓÚä¯ÀÀÆ÷Äܹ»ÏÔʾÄãµÄÍøÕ¾ÄÚÈÝ¡£
ÔÚ CSS µÄÇé¿öÏÂÕâÊǷdz£ÖØÒªµÄ£¬ËùÓÐµÄ CSS ¹æÔò¶¼²»ÄÜÓëÌØ¶¨Ã½ÌåÖ±½ÓÏà¹Ø£¬¹æÔòÖ»ÓÃÓÚ´¦ÀíÄã×¼±¸ÔÚÒ³ÃæÉÏËùÏÔʾÄÚÈݵÄÓÅÏȼ¶¡£Õâ¿ÉÒÔͨ¹ýʹÓÃ
CSS ýÌå²éѯÀ´ÊµÏÖ¡£Ã½Ìå²éѯ¸æËßä¯ÀÀÆ÷£¬ÄÄЩ CSS Ñùʽ±íÓ¦ÓÃÔÚij¸öÌØ¶¨µÄÏÔʾýÌåÉÏ¡£¾Ù¸öÀý×Ó£¬ÓÃÓÚ´òÓ¡µÄijЩ¹æÔò¿ÉÒÔ±»¸³Óè±ÈÓÃÓÚÆÁÄ»ÏÔʾ¸üµÍµÄÓÅÏȼ¶¡£
ýÌå²éѯ¿ÉÒÔ±»ÉèÖÃ³É ±êÇ©ÊôÐÔ£º
<link rel="stylesheet" type="text/css"
media="only screen and (max-device-width:
480px)" href="mobile-device.css"
/> |
ÂÖµ½ JavaScript ÁË£¬¹Ø¼ü¾ÍÔÚÓÚ×ñÑijЩÓÃÓÚÄÚÁª JavaScript µÄ¹æÔò£¨±ÈÈçÄÚÁªÔÚ
HTML Îļþµ±ÖеĴúÂ룩¡£ÄÚÁª JavaScript Ó¦¸Ã¾¡¿ÉẠ̈ܶ¬²¢½«Æä·ÅÔÚ²»»á×èÈûÒ³ÃæÊ£Óಿ·Ö½âÎöµÄµØ·½¡£»»¾ä»°Ëµ£¬±»·ÅÔÚ
HTML Ê÷ÖмäµÄÄÚÁª JavaScript ½«»áÔÚÕâ¸öµØ·½×èÈû½âÎöÆ÷£¬²¢Ç¿ÖÆÆäµÈ´ýÖ±µ½½Å±¾±»Ö´ÐÐÍê±Ï¡£Èç¹ûÔÚ
HTML ÎļþÖÐËæÒâ·ÅÁËһЩ´óµÄ´úÂë¿é»òÕߺܶàСµÄ´úÂë¿é£¬¶ÔÓÚÐÔÄÜÀ´ËµÕâ»á³ÉΪÐÔÄÜɱÊÖ¡£ÄÚÁª¿ÉÒÔÓÐЧ¼õÉÙ¶îÍâ¶ÔÓÚÄ³Ð©ÌØ¶¨½Å±¾µÄÍøÂçÇëÇó¡£µ«ÊǶÔÓÚÖØ¸´Ê¹ÓõĽű¾»òÕß´óµÄ´úÂë¿éÀ´Ëµ£¬Õâ¸öºÃ´¦¾Í¿ÉÒÔºöÂÔ²»¼ÆÁË¡£
·ÀÖ¹ JavaScript ×èÈû½âÎöÆ÷ºÍäÖȾÆ÷µÄÒ»ÖÖ·½·¨¾ÍÊǽ« script ±êÇ©±ê¼ÇΪÒì²½µÄ¡£ÕâÏÞÖÆÁËÎÒÃǶÔÓÚ
DOM µÄ·ÃÎʵ«ÊÇ¿ÉÒÔÈÃä¯ÀÀÆ÷²»¹Ü½Å±¾µÄÖ´ÐÐ״̬¶ø¼ÌÐø½âÎöºÍäÖÈ¾Ò³Ãæ¡£»»¾ä»°Ëµ£¬ÎªÁË»ñµÃ×î¼ÑµÄÆô¶¯Ê±¼ä£¬È·±£ÄÇЩ¶ÔÓÚäÖȾ²»ÖØÒªµÄ½Å±¾ÒѾͨ¹ýÒì²½ÊôÐԵķ½Ê½±ê¼Ç³ÉÒì²½µÄÁË¡£
<script src="async.js" async></script> |
12. ÓÃÓÚδÀ´µÄÒ»¸ö½¨Ò飺ʹÓà service workers + Á÷
Jake Archibald ×î½üµÄһƪ²©ÎÄÏêϸÃèÊöÁËÒ»ÖÖÓÐȤµÄ¼¼Êõ£¬¿ÉÒÔÓÃÓÚ¼ÓËÙäÖȾʱ¼ä£º½« service
workers ºÍÁ÷½áºÏÆðÀ´¡£½á¹û·Ç³£ÁîÈË̾·þ£º
²»ÐÒµÄÊÇÕâ¸ö¼¼ÊõËùÐèÒªµÄ APIs ¶¼»¹²»Îȶ¨£¬ÕâÒ²ÊÇΪʲôÕâÊÇÒ»ÖÖÓÐȤµÄ¸ÅÄÏÖÔÚ»¹Ã»ÓÐÕæÕý±»Ó¦ÓõÄÔÒò¡£Õâ¸öÏë·¨µÄÖ÷Ö¼¾ÍÊÇÔÚÍøÕ¾ºÍ¿Í»§¶ËÖ®¼ä·ÅÖÃÒ»¸ö
service worker¡£Õâ¸ö service worker ¿ÉÒÔÔÚ»ñȡȱʧÐÅÏ¢µÄͬʱ»º´æÄ³Ð©Êý¾Ý£¨±ÈÈç
header ºÍһЩ²»»á¾³£¸Ä±äµÄ¶«Î÷£©¡£È±Ê§µÄÄÚÈݾͿÉÒÔ¾¡¿ÉÄÜ¿ìËÙµØÁ÷Ïò±»äÖȾµÄÒ³Ãæ¡£
13. ¸üУºÍ¼Æ¬±àÂëÓÅ»¯
ÎÒÃǵÄÒ»¸ö¶ÁÕßÖ¸³öÁËÒ»¸ö·Ç³£ÖØÒªµÄÒÅ©£ºÍ¼Æ¬±àÂëÓÅ»¯¡£PNGs ºÍ JPGs ÔÚ Web ·¢²¼Ê±¶¼»áʹÓôÎÓŵÄÉèÖýøÐбàÂ롣ͨ¹ý¸Ä±ä±àÂëÆ÷ºÍËüµÄÉèÖ㬶ÔÓÚÐèÒª´óÁ¿Í¼Æ¬µÄÍøÕ¾À´Ëµ¿ÉÒÔ»ñµÃÓÐЧµÄ¸ÄÉÆ¡£Á÷ÐеĽâ¾ö·½°¸°üÀ¨
OptiPNG ºÍjpegtran¡£
A guide to PNG optimization ÏêϸÃèÊöÁË OptiPNG ¿ÉÒÔÈçºÎÓÃÓÚÓÅ»¯
PNGs¡£
The man page for jpegtran ¶ÔËüµÄÒ»Ð©ÌØÐÔÌṩÁ˺ܺõĽéÉÜ¡£
Èç¹ûÄã·¢ÏÖÕâЩָÄÏÏà¶ÔÓÚÄãµÄÒªÇóÀ´Ëµ¶¼Ì«¸´ÔÓÁ˵ϰ£¬Õâ¶ùÓÐһЩÔÚÏßÍøÕ¾¿ÉÒÔÌṩÓÅ»¯·þÎñ¡£Ò²ÓÐһЩÏñ
RIOT Ò»ÑùµÄͼÐλ¯½çÃæ£¬·Ç³£ÓÐÖúÓÚÅúÁ¿²Ù×÷ºÍ½á¹û¼ì²é¡£
À©Õ¹ÔĶÁ
Äã¿ÉÒÔÔÚÏÂÃæµÄÁ´½ÓÖÐÔĶÁ¸ü¶àÐÅÏ¢£¬ÒÔ¼°ÕÒµ½ÓÐÖúÓÚÓÅ»¯ÍøÕ¾µÄ¹¤¾ß£º
Best Practices for Speeding up Your Website - Yahoo
Developer Network
YSlow - a tool that checks for Yahoo¡¯s recommended
optimizations
PageSpeed Insights - Google Developers
PageSpeed Tools - Google Developers
HTTP/2: The Long-Awaited Sequel
ÇÄÇÄ»°£ºAuth0 Öг£¼ûµÄÓÅ»¯
ÎÒÃÇÊÇÒ»¸ö Web ¹«Ë¾¡£¾ÍÒÔÕâÖÖÉí·ÝÀ´Ëµ£¬ÎÒÃÇΪÎÒÃǵĻù´¡ÉèÊ©µÄijЩ²¿·Ö²¿ÊðÁËÒ»Ð©ÌØ¶¨µÄÓÅ»¯¡£¾ÙÀýÀ´Ëµ£¬ÔÚµÇÂ¼Ò³ÃæÄã¿ÉÒÔ·¢ÏÖ£¬ÔÚÎÒÃÇÓòÃûµÄ
/learn ·¾¶Ï£¨±ÈÈ磬µÇÂ¼Ò³ÃæµÄµ¥µãµÇ¼£©£¬ÎÒÃDzÉÓÃÁËÒ»ÖÖÌØ±ðµÄÓÅ»¯£ºÎªÁË·½±ãÎÒÃÇʹÓà CMS
À´´´½¨Ã¿ÆªÎÄÕ¡£ÒòΪÎÄÕ¶¼Ã»ÓÐÖÐÐÄË÷Òý£¬µ«ÊÇΪÁËÄܹ»±»ËÑË÷ÒýÇæ·¢ÏÖ£¬Ê¹ÓÃÁË webtask µÄÅÀ³æÀ´Ô¤äÖȾÿ¸öÒ³Ãæ²¢Éú³ÉÁËÒ»¸ö¾²Ì¬°æ±¾È»ºóÉÏ´«µ½ÎÒÃÇ
CDN¡£Õâ¼õÉÙÁËÎÒÃÇÔÚ·þÎñÆ÷¶ËÉϵÄѹÁ¦£¬ÒòΪÎÞÐëΪÿ¸ö·Ã¿Í¶¼Éú³É¶¯Ì¬µÄ·þÎñÆ÷¶ËÄÚÈÝ¡£Óë´Ëͬʱ»¹¸ÄÉÆÁËÑÓ³Ù£¨²¢ÇÒ¸ôÀëÁËÎÒÃÇ·¢ÏÖÓë
CMS Ïà¹ØµÄ°²È«ÎÊÌ⣩¡£
¶ÔÓÚÎĵµ²¿·Ö£¬ÎÒÃÇÕýÔÚʹÓÃͬ¹¹ JavaScript£¬ÕâÈÃÎÒÃÇ»ñµÃÁ˷dz£°ôµÄÆô¶¯Ê±¼ä£¬²¢ÇÒʹÎÒÃǵĺó¶ËºÍǰ¶ËÍŶÓÄܹ»ÇáËɼ¯³É¡£
½áÂÛ
ÓÉÓÚÓ¦ÓóÌÐò±äµÃÔ½À´Ô½´óºÍÔ½À´Ô½¸´ÔÓ£¬ÐÔÄÜÓÅ»¯¶ÔÓÚ Web ¿ª·¢À´ËµÕýÔÚ±äµÃÔ½À´Ô½ÖØÒª¡£ÔÚ×ö³öÈκÎÖµµÃµÄʱ¼äºÍDZÔÚµÄδÀ´³É±¾µÄÓÅ»¯³¢ÊÔʱ£¬ÓÐÕë¶ÔÐԵĸĽø¶¼ÊDZز»¿ÉÉٵġ£Web
Ó¦ÓóÌÐòÔçÒÑÍ»ÆÆÁË´ó¶àÊý¾²Ì¬ÄÚÈݵı߽磬ѧϰ³£¼ûģʽ½øÐÐÓÅ»¯ÔòÊÇÁîÈËÓäÔõÄÓ¦ÓúÍÍêÈ«²»¿ÉÓõÄÓ¦ÓÃÖ®¼ä×î´óµÄÇø±ð£¨ÕâÊÇÈÃÄãµÄ·Ã¿ÍÁôÏÂÀ´µÄ³¤Ô¶Ö®¼Æ£¡£©¡£Ã»ÓÐʲô¹æÔòÊǾø¶ÔµÄ£¬µ«ÊÇ£ºÐÔÄÜ·ÖÎöºÍÑо¿Ìض¨Èí¼þ¼¼ÊõÕ»µÄ´í×Û¸´ÔÓÖ®´¦£¬ÊÇÕÒ³öÈçºÎÓÅ»¯ËüµÄΨһ·½Ê½¡£
|