Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¹æÄ£»¯³¡¾°ÏµÄTwitter LiteÓë¸ßÐÔÄÜReact½¥½øÊ½WebÓ¦ÓÃ
 
À´Ô´£ºInfoQ ·¢²¼ÓÚ£º 2017-5-10
  1828  次浏览      27
 

±¾ÎÄÖ¼ÔÚ°ïÖú¶ÁÕßÁ˽⣬ÔÚÈ«Çò¹æÄ£×î´óµÄReact.js PWAÖ®Ò»¡ª¡ªTwitter Liteµ±ÖУ¬ÊÇÈçºÎÏû³ý¸÷Àà³£¹æÓ뺱¼ûÖ®ÐÔÄÜÆ¿¾±µÄ¡£

ÏëÒª¹¹½¨Ò»¿îÐÔÄܳöÉ«µÄWebÓ¦ÓóÌÐò£¬ÎÒÃÇÐèҪͶÈë´óÁ¿¼¼ÊõÖÜÆÚÒÔ¼ì²âʱ¼äÀ˷ѵ㡢Á˽âÆä·¢ÉúÔ­Òò²¢³¢ÊÔ¸÷Àà½â¾ö·½°¸¡£Òź¶µÄÊÇ£¬ÕâÖÖ×ö·¹ÍùÍùÎÞ·¨¿ìËÙ½â¾öÎÊÌâ¡£ÐÔÄÜÎÞÒÉÊÇÒ»ÏîÓÀºãµÄÃüÌ⣬¼¼ÊõÈËÔ±ÓÀÔ¶ÅÇ»²ÔÚ¹Û²ìÓë²âÁ¿µ±ÖУ¬È´¼¸ºõÓÀÔ¶ÕÒ²»µ½×îÓŽ⡣²»¹ýÀûÓÃTwitter Lite£¬ÎÒÃÇÒѾ­ÔÚÖÚ¶à²ãÃæÄÚÈ¡µÃÁËϸСµ«È´¼«¾ß¼ÛÖµµÄ¸Ä½ø£º´Ó³õʼ¼ÓÔØÊ±¼äµ½React×é¼þäÖȾ£¨·ÀÖ¹¶þ´ÎäÖȾ£©£¬ÔÙµ½Í¼Ïñ¼ÓÔØÒÔ¼°¸ü¶à²ãÃæ¡£¾¡¹Ü´ó¶àÊý±ä¸ü±¾Éí²¢²»ÏÔÖø£¬µ«ÆäÏà¼ÓËù´øÀ´µÄ×îÖÕ½á¹ûÊÇ£¬ÎÒÃǵÃÒÔ¹¹½¨ÆðÒ»¿î¹æÄ£¼«´óÇÒËٶȼ«¿ìµÄ½¥½øÊ½WebÓ¦ÓóÌÐò¡£

ÔĶÁ˵Ã÷Èç¹ûÄã¸Õ¸Õ¿ªÊ¼Í¶ÉíWebÓ¦ÓóÌÐòÐÔÄÜÌáÉýµÄ²âÁ¿¹¤×÷£¬ÎÒÇ¿ÁÒ½¨ÒéÄúÊ×ÏÈÁ˽âÈçºÎ¶ÁÈ¡»ðÑæÍ¼ÐÅÏ¢¡£

ºóÎÄÖеĸ÷¸öÕ½ڽ԰üº¬ÓнØÈ¡×ÔChrome¿ª·¢Õß¹¤¾ßÄÚµÄʱ¼äÏ߼Ǽ¡£ÎªÁ˸üÒ×ÓÚÀí½â£¬ÎÒÃÇÔÚÿÏîʾÀýÖÐÇ¿µ÷ÁËÄÄЩÐÅÏ¢´ú±íÇé¿ö²»Àû£¬¶øÄÄЩ´ú±íÇé¿öÕý³£¡£

ÕâÀïÐèÒªÌØ±ð¾Íʱ¼äÏßÓë»ðÑæÍ¼½øÐÐ˵Ã÷£ºÓÉÓÚÎÒÃÇÐèÒª¶Ô´óÁ¿Òƶ¯É豸½øÐй۲죬Òò´Ëͨ³£Ö»ÔÚÄ£Äâ»·¾³ÖмǼCPUËٶȽöΪÎå·ÖÖ®Ò»ÇÒʹÓÃ3GÍøÂçÁ¬½ÓµÄÇé¿ö¡£ÕâЩÌõ¼þ²»½ö¸üΪÏÖʵ£¬Í¬Ê±Òà¸üÒ×ÓÚ±©Â¶ÐÔÄÜÎÊÌâ¡£ÔÚʹÓÃReact v15.4.0µÄ×é¼þÅäÖÃʱ£¬ÉõÖÁ»á¶ÔÔËÐÐÅäÖüÓÒÔ½øÒ»²½Ñ¹Ëõ¡£×ÀÃæÐÔÄÜʱ¼äÏßÖеÄʵ¼ÊÖµ½«Ô¶¸ßÓÚÎÒÃÇÔÚ±¾ÎÄÖÐÁоٵÄʾÀýÖµ¡£

Ò»¡¢ÃæÏòä¯ÀÀÆ÷½øÐÐÓÅ»¯

1. ʹÓûùÓÚ·ÓɵĴúÂë²ð·Ö»úÖÆ

WebpackËäÈ»¼«ÎªÇ¿´ó£¬µ«È´ÄÑÓÚѧϰ¡£ÎÒÃÇÒ²Ôø¾­ÔâÓöµ½CommonsChunkPluginÎÊÌ⣬ÇÒºÜÄÑŪÇåÆäÓëÎÒÃDz¿·ÖÑ­»·´úÂëÒÀÀµÐԵĶԽӷ½Ê½¡£¿¼Âǵ½ÕâÒ»µã£¬ÎÒÃÇ×îÖÕÖ»±£ÁôÁË3¸öJavaScript×ÊÔ´Îļþ£¬ÇÒ×ܼÆÂÔ´óÓÚ1 MB£¨gzip´«Êä¸ñʽÔòΪ420 KB£©¡£

ÔÚÕ¾µãÔËÐйý³ÌÖУ¬¼ÓÔØÊý¸öÉõÖÁµ¥Ò»´óÐÍJavaScriptÎļþ¶¼¿ÉÄܸøÒƶ¯Óû§µÄÍøÕ¾ä¯ÀÀÓë½»»¥´øÀ´¾Þ´óÐÔÄÜÆ¿¾±¡£³ýÁ˸÷´óÐͽű¾ÔÚ´«Êä¹ý³ÌÖÐÐèÒªÏûºÄ¸ü¶àÍøÂç×ÊÔ´¼°´«Êäʱ³¤Ö®Í⣬ä¯ÀÀÆ÷µÄ½âÎö¹¤×÷Á¿Ò²½«Òò´ËÓÐËùÌáÉý¡£

ÔÚ¾­¹ý¶à´ÎÕùÂÛÖ®ºó£¬ÎÒÃÇ×îÖÕµÃÒÔÀûÓ÷ÓÉ»úÖÆ½«³£¹æÇøÓò²ð·Ö³É¶à¸ö¶ÀÁ¢¿é£¨ÈçÏÂËùʾ£©¡£

const plugins = [
// extract vendor and webpack's module manifest
new webpack.optimize.CommonsChunkPlugin({
names: [ 'vendor', 'manifest' ],
minChunks: Infinity
}),
// extract common modules from all the chunks (requires no 'name' property)
new webpack.optimize.CommonsChunkPlugin({
async: true,
children: true,
minChunks: 4
})
];

×îºó£¬ÎÒÃÇÔÚÊÕ¼þÏäÖÐÊÕµ½ÁËÕâÑùÒ»·Ý´úÂëÉó²é½áÂÛ£º

Ìí¼ÓÁËϸÁ£¶È¡¢»ùÓÚ·ÓɵĴúÂë²ð·Ö»úÖÆ¡£Ó¦ÓÃÕûÌåµÄ³õʼ»¯ËÙ¶ÈÓëHomeTimelineäÖȾËٶȽÔÓÐËù¸ÄÉÆ£¬ÇÒĿǰµÄÓ¦Óñ»²ð·ÖΪ40¸ö¶ÀÁ¢¿é£¬²¢¸ù¾Ý»á»°³¤¶È½øÐÐʱ¼äÅä¶î¾ù̯¡£- Nicolas Gallagher

ÈçͼËùʾ£¬Ê±¼äÏßÓÉ´úÂë²ð·Öǰ״̬£¨Í¼1£©×ª»¯ÎªÖ®ºó״̬£¨Í¼2£©¡£

ͼ1

ͼ2

ÎÒÃǵijõʼÉèÖã¨Í¼1£©ÐèÒª5ÃëÖÖ²ÅÄÜÍê³ÉÖ÷À¦°ó°üµÄ¼ÓÔØ£¬µ«ÔÚÀûÓ÷ÓÉ»úÖÆÓë³£¹æÇø¿é¶Ô´úÂë½øÐвð·Öºó£¨Í¼2£©£¬¼ÓÔØÊ±¼ä½µµÍµ½ÁË3Ã루ģÄâ3GÍøÂç»·¾³Ï£©¡£

Õâһͻ³öÐÔÄÜÌáÉýÔÚ´ËǰµÄ¾ÍµÃµ½Á˹Ø×¢£¬µ«µ¥Æ¾ÕâÒ»Ïî±ä¸ü£¬¼´Áî¹È¸èLighthouse WebÓ¦ÓÃÉ󼯹¤¾ßµÄÔËÐÐËٶȳöÏÖ¾Þ´ó±ä»¯£º

ͼ3

ÎÒÃÇ»¹Í¨¹ýÔËÐйȸèLighthouse WebÓ¦ÓÃÉ󼯹¤¾ßÁ˽â´Ëǰ£¨Í¼3 Before£©Óë´Ëºó£¨Í¼3 After£©µÄÐÔÄܲîÒì¡£

2.±ÜÃâʹÓÿÉÄÜÔì³ÉÌøÖ¡µÄº¯Êý

ÔÚ¶ÔÎÒÃÇÎÞÏÞ¹ö¶¯Ê±¼äÏß½øÐжà´Îµü´úµÄ¹ý³ÌÖУ¬ÎÒÃdz¢ÊÔʹÓöàÖÖ²»Í¬·½·¨ÒÔ¼ÆËã¹ö¶¯Î»Öü°·½Ïò£¬Ö¼ÔÚÈ·¶¨ÊÇ·ñÓбØÒªÒªÇóAPIÏÔʾ¸ü¶àÍÆÎÄÄÚÈÝ¡£¾ÍÔÚ²»¾Ã֮ǰ£¬ÎÒÃÇ»¹ÔÚʹÓÃreact-waypoint£¬ÇÒ»ñµÃÁ˲»´íµÄЧ¹û¡£È»¶øÎªÁ˽«ÐÔÄÜˮƽÌáÉýÖÁеĸ߶ȣ¬Æä×÷ΪÎÒÃÇÓ¦ÓóÌÐòµÄÖ÷Òªµ×²ã×é¼þÖ®Ò»ÈÔÎÞ·¨ÔÚËÙ¶ÈÉÏÂú×ãÒªÇó¡£

WaypointsµÄ¹¤×÷·½Ê½Îª¼ÆËã´óÁ¿²»Í¬ÔªËصĸ߶ȡ¢¿í¶ÈÓëλÖ㬴ӶøÈ·¶¨Óû§µÄµ±Ç°¹ö¶¯Î»Öá¢Ã¿´Î²Ù×÷Ö®¼äµÄÏà¸ô¾àÀëÒÔ¼°¾ßÌåÖ¸ÏòÄĸö·½Ïò¡£ÕâЩÐÅÏ¢ËäȻȷʵÓÐÓ㬵«ÓÉÓÚÐèÒªÔÚÿһ´Î¹ö¶¯Ê¼þʱ½øÐд¦Àí£¬Òò´Ë»á´øÀ´ÏàÓ¦³É±¾¡ª¡ª¼´´ËÀà¼ÆËã»áµ¼ÖÂÌøÖ¡ÎÊÌ⣬ÇÒ·¢ÉúƵÂʼ«¸ß¡£

µ«ÔÚ½â¾öÎÊÌâ֮ǰ£¬ÎÒÃÇÊ×ÏÈÐèÒªÀí½â¿ª·¢Õß¹¤¾ßËù¸ø³öµÄ¡°ÌøÖ¡¡±½áÂÛ¾¿¾¹ÊÇʲôº¬Òå¡£

Ŀǰ´ó¶àÊýÉ豸»áÿÃë¶ÔÆÁÄ»ÏÔʾÄÚÈݽøÐÐ60´ÎˢС£Èç¹ûÆäÖÐÔËÐÐÓж¯»­»òÕß¹ý¶ÉЧ¹û£¬ÒÖ»òÓû§½øÐÐÒ³Ãæ¹ö¶¯²Ù×÷£¬Ôòä¯ÀÀÆ÷ÐèҪƥÅäÉ豸µÄË¢ÐÂÂʲ¢ÌṩһÕÅеÄͼÏñ¡ª¡ª»òÕß³ÆÎªÖ¡¡ª¡ªÒÔ×÷Ϊÿ´ÎÆÁĻˢеÄÏÔʾÄÚÈÝ¡£

ÆäÖÐÿһ֡µÄ³ÖÐøÊ±¼äԼΪÂÔ¸ßÓÚ16ºÁÃ루¼´1ÃëµÄÁùÊ®·ÖÖ®Ò»£¬Ô¼Îª16.66ºÁÃ룩¡£²»¹ýÔÚʵ¼Ê³¡¾°ÖУ¬ä¯ÀÀÆ÷ÈÔÓÐÆäËü¹ÜÀíÈÎÎñÐèÒª´¦Àí£¬Òò´ËÕû¸öË¢ÐÂÄÚÈݵÄÉú³Éʱ¼äÔ¼ÔÚ10ºÁÃë×óÓÒ¡£Èç¹ûÎÞ·¨Âú×ãÕâÒ»Ìõ¼þ£¬ÔòÖ¡ÏÔʾËÙÂʽ«ÓÐËùϽµ£¬µ¼ÖÂÆÁÄ»ÉϵÄÄÚÈݳöÏÖÌø¶¯¡£ÕâÖÖÏÖÏóͨ³£±»³ÆÎªÌøÖ¡£¬ÇÒ»á¸øÓû§µÄÌåÑéÔì³É¸ºÃæÓ°Ïì¡£¡ª?Paul Lewis ÖøÓÚ¡¶äÖȾÐÔÄÜ¡·

Ëæ×Åʱ¼äµÄÍÆÒÆ£¬ÎÒÃÇ¿ª·¢³öÒ»ÖÖеÄÎÞÏÞ¹ö¶¯×é¼þ£¬²¢½«ÆäÃüÃûΪVirtualScroller¡£ÀûÓÃÕâ¿îÐÂ×é¼þ£¬ÎÒÃÇÄܹ»È·ÇÐÁ˽âÌØ¶¨Ê±¶ÎµÄÌØ¶¨Ê±¼äÖáÖÐÄIJ¿·ÖÍÆÎÄÆ¬¶ÎÐèÒª½øÐÐäÖȾ£¬´Ó¶ø±ÜÃâΪÁ˳ÊÏÖÊÓ¾õЧ¹û¶ø½øÐÐÐèÒªÕ¼ÓôóÁ¿×ÊÔ´µÄ¼ÆËãÈÎÎñ¡£

ͼ4

ͼ5

ËäÈ»¿´ÆðÀ´ÎÊÌâ²¢²»ÑÏÖØ£¬µ«Ö®Ç°£¨Í¼4£©½øÐйö¶¯Ê±£¬ÎÒÃÇÓÉÓÚÐèÒª¼ÆËã¶à¸öÔªËØµÄ¸ß¶È¶øÒý·¢ÁËäÖÈ¾ÌøÖ¡ÎÊÌâ¡£Ö®ºó£¨Í¼5£©£¬ÎÒÃDz»½ö³¹µ×°ÚÍÑÁËÌøÖ¡£¬Òà¼õÉÙÁË¿¨¶Ù²¢ÌáÉýÁËʱ¼äÖá¹ö¶¯ËÙ¶È¡£

ͨ¹ý±ÜÃâµ÷ÓÃÄÇЩ¿ÉÄÜÒý·¢²»±ØÒªÌøÖ¡µÄº¯Êý£¬ÍÆÎĵÄʱ¼äÖá¹ö¶¯±äµÃ¸üΪÎ޷죬ÕâÒâζ×ÅÎÒÃÇÄܹ»Ìṩ¸üΪ·á¸»ÇÒ¼¸ºõÓëÔ­ÉúÓ¦ÓÃÎÞÒìµÄʹÓÃÌåÑé¡£¸üÖµµÃÒ»ÌáµÄÊÇ£¬ÕâÏî±ä¸ü»¹¸øÊ±¼äÖáµÄ¹ö¶¯Ë³»¬¶È´øÀ´ÌáÉý¡£ÕâÔÙ´ÎÖ¤Ã÷£¬Ã¿Ò»ÏîС¸Ä½ø¶¼½«»ýÀÛÆðÀ´²¢×îÖÕʵÏÖÀíÏëÐÔÄܱíÏÖ¡£

3.ʹÓøüСͼÏñ

ΪÁËÔÚTwitter LiteÉÏÂÊÏÈʹÓýϵʹ«Êä´ø¿í×ÊÔ´£¬ÎÒÃÇÅäºÏ¶à¸öÍŶӶÔCDNÉϵĿÉÓÃͼÏñ½øÐÐÁ˸üÐÂÓë³ß´çµ÷Õû¡£ÊÂʵ֤Ã÷£¬Í¨¹ý½µµÍͼÏñ³ß´ç£¬ÎÒÃǵÃÒÔÏÔÖø½µµÍËùÐèÒªäÖȾµÄʵ¼Ê¹¤×÷Á¿£¨°üÀ¨¹æÄ£ÓëÖÊÁ¿£©£¬²¢·¢Ïִ˾ٲ»½öÄܹ»½µµÍ´«Êä´ø¿íÕ¼ÓÃÂÊ£¬Í¬Ê±ÒàÄܹ»ÌáÉýä¯ÀÀÆ÷µÄÐÔÄܱíÏÖ¡ª¡ªÌرðÊÇÔÚ¶Ô°üº¬´óÁ¿Í¼ÏñµÄÍÆÎÄʱ¼äÖá½øÐйö¶¯²Ù×÷ʱ¡£

ΪÁ˺ËʵС³ß´çͼÏñ¸øÐÔÄÜ´øÀ´µÄÈ·ÇÐÌáÉý£¬ÎÒÃǶÔChrome¿ª·¢Õß¹¤¾ßÖеÄRasterʱ¼äÏß½øÐÐÁ˹۲졣ÔÚ¶ÔͼÏñ³ß´ç½øÐÐÊÝÉí֮ǰ£¬½âÂ뵥һͼÏñµÄʱ¼äÒ»°ãΪ300ºÁÃëÉõÖÁ¸ü³¤£¬¾ßÌåÈçÒÔÏÂʱ¼äÏ߼Ǽͼ×ó²àËùʾ¡£ÕâÒ»¹ý³Ì·¢ÉúÔÚͼÏñÄÚÈÝÏÂÔØÍê³ÉÖ®ºó£¬ÇÒÐèÒª¾­¹ý´¦Àí£¬Í¼Ïñ²ÅÄÜÔÚÒ³ÃæÖеõ½ÕýÈ·ÏÔʾ¡£

µ±¹ö¶¯Ò³Ã沢ϣÍû·ûºÏÿÃë60Ö¡äÖȾ±ê×¼ÒªÇóʱ£¬ÎÒÃÇÏ£Íû¾¡¿ÉÄܽ«Ã¿Ö¡ÏÔʾÄÚÈݵÄäÖȾʱ¼ä¿ØÖÆÔÚ16.667ºÁÃëÒÔÄÚ¡£Í¨¹ý¼ÆË㣬ÕâÒâζ×ÅÎÒÃÇÐèÒª½ü18Ö¡²ÅÄܽ«µ¥Ò»Í¼ÏñäÖȾÍê³É²¢ÏÔʾÔÚÊÓͼÄÚ£¬Ð§¹ûÏÔÈ»²»¹»ÀíÏë¡£ÁíÒ»ÏîÐèҪעÒâµÄʱ¼äÖ¸±êÔÚÓÚ£¬´ó¼Ò¿ÉÒÔ¿´µ½£¬Maineʱ¼äÏß»á³ÖÐøÊܵ½×è¶Ï£¬Ö±µ½¶ÔӦͼÏñÍê³É½âÂ루Èç¿Õ°×ÇøËùʾ£©¡£ÕâÒâζ×ÅÕâÕýÊÇÎÒÃÇÒªÕÒµÄÐÔÄÜÆ¿¾±£¡

ͼ6

ͼ7

½Ï´óͼÏñ£¨Í¼6£©½«ÔÚ18Ö¡ÖÜÆÚÄÚ×è°­Ö÷Ï̵߳ÄÔËÐУ¬¶ø½ÏСͼÏñ£¨Í¼7£©Ôò½öÐèÒª1Ö¡×óÓÒ¡£

ÏÖÔÚÎÒÃÇÒѾ­¶ÔͼÏñ³ß´ç½øÐÐÁËÏ÷¼õ£¨Í¼6£©£¬¶ø³ß´ç×î´óµÄͼÏñÈç½ñ½öÐèÒª1Ö¡ÖÜÆÚ¼´¿ÉÍê³É½âÂë¡£

¶þ¡¢ÓÅ»¯React

1.ʹÓÃshouldComponentUpdate·½·¨

¶ÔReactÓ¦ÓóÌÐò½øÐÐÐÔÄÜÓÅ»¯µÄÒ»ÖÖ³£¼û×÷·¨ÔÚÓÚʹÓÃshouldComponentUpdate·½·¨¡£ÎÒÃÇÒ»Ö±ÔÚ¾¡¿ÉÄÜʹÓÃÕâÒ»·½·¨£¬µ«ÓÐʱЧ¹û²¢²»¾¡ÈçÈËÒâ¡£

ͼ8

ÔÞµÚÒ»ÌõÍÆÎĻᵼÖÂÆä±¾ÉíÒÔ¼°ÆäϵÄÕû¸öConversation½øÐÐÖØÐÂäÖȾ£¡

ÏÂÃæÎÒÃÇÀ´¿´Ò»¸öʼÖÕ±£³Ö¸üеÄ×é¼þ¾ÈÃü£ºµ±ÔÚÖ÷ʱ¼äÏßÖеã»÷ÐÄÐÎͼ±êÒÔÔÞÒ»ÌõÍÆÎÄʱ£¬µ±Ç°ÆÁÄ»ÉϵÄÈ«²¿Conversation×é¼þ¶¼½«½øÐÐÖØÐÂäÖȾ¡£ÔÚ¶¯»­Ê¾Àýµ±ÖУ¬´ó¼Ò¿ÉÒÔ¿´µ½ÂÌÉ«µÄ¸ßÁÁ¿òÌ壬ÕâÊÇÒòΪÎÒÃǵIJÙ×÷µ¼Öµ±Ç°ÍÆÎÄ֮ϵÄÕû¸öConversation×é¼þ½Ô½øÐиüУ¬¶øä¯ÀÀÆ÷ÐèÒª¶ÔÆä½øÐÐÖØÐÂÌî³ä¡£

ÒÔÏÂΪ¶ÔÕâÒ»²Ù×÷½øÐиÅÀ¨µÄÁ½·ù»ðÑæÍ¼¡£ÔÚδʹÓÃshouldComponentUpdate·½·¨£¨Í¼9£©Ê±£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÕûÌåÊ÷×´½á¹¹½Ô½øÐÐÁ˸üÐÂÓëÖØÐÂäÖȾ£¬¶øÐ§¹û½öΪ¶ÔÆÁÄ»ÉϵÄÐÄÐÎͼ±ê½øÐÐ×ÅÉ«¡£¶øÔÚÌí¼ÓÁËshouldComponentUpdate·½·¨£¨Í¼10£©Ö®ºó£¬ÎÒÃÇÎÞÐè¸üÐÂÕû¸öÊ÷×´½á¹¹£¬´Ó¶øÍ¨¹ý±ÜÃâÔËÐв»±ØÒª½ø³Ì¶ø½ÚÔ¼ÁËÊ®·ÖÖ®Ò»Ãë´¦Àíʱ¼ä¡£

ͼ9

ͼ10

֮ǰ£¨Í¼9£©£¬ÔÚÔÞijÌõ·ÇÏà¹ØÍÆÎÄʱ£¬Õû¸öConversations½Ô½øÐиüм°ÖØÐÂäÖȾ¡£¶øÔÚÌí¼Ó¸ÃÂß¼­£¨Í¼10£©Ö®ºó£¬¿ÉÒÔ¿´µ½¸Ã×é¼þ¼°Æä¸÷×ÓÔªËØ²»ÔÙÀ˷Ѳ»±ØÒªµÄCPUÖÜÆÚ¡£µã»÷»òµã´¥½øÐзŴó¡£

2.½«²»±ØÒªÈÎÎñÍÆ³ÙÖÁcomponentDidMountÖ®ºó

ÕâÒ»±ä¸üËÆºõ·Ç³£¼òµ¥£¬µ«ÔÚ¿ª·¢Twitter LiteÕâÀà´óÐÍÓ¦ÓóÌÐòʱȴºÜÈÝÒ×±»ºöÂÔ¡£

ÎÒÃÇ·¢ÏÖ£¬ÎÒÃǵÄÔ­ÓдúÂëÖдæÔÚ´óÁ¿Á¢×ãcomponentWillMount ReactÉúÃüÖÜÆÚ·½·¨½øÐиß×ÊÔ´Õ¼ÓÃÁ¿¼ÆËã·ÖÎöµÄÇé¿ö¡£Ã¿Ò»´Î´ËÀà¼ÆËã¶¼»á¸øÆäËü×é¼þµÄäÖȾÔì³É·Á°­¡£ÕâÀï20ºÁÃ룬ÄÇÀï90ºÁÃ룬×îÖÕµÄÐÔÄÜÍÏÀÛ½«·Ç³£³ÁÖØ¡£×î³õ£¬ÎÒÃÇÔø³¢ÊÔ½«ÊµÏÖ½øÐÐäÖȾµÄÿÌõÍÆÎĽøÐмǼ£¬²¢½«½á¹ûдÈëÖÁcomponentWillMountÖеÄÊý¾Ý·ÖÎö·þÎñÖУ¬¶øºó²Å¶ÔÆä½øÐÐʵ¼ÊäÖȾ£¨ÈçÏÂͼ×ó²àʱ¼äÏßËùʾ£©¡£

ͼ11

ͼ12

ͨ¹ý½«·Ç±ØÒª´úÂë·¾¶ÓÉcomponentWillMountÍÆ³ÙÖÁcomponentDidMount£¬ÎÒÃǵÃÒÔ½ÚÔ¼ÁË´óÁ¿µ±Ç°ÆÁÄ»ÄÚµÄÍÆÎÄäÖȾʱ³¤¡£µã»÷»òµã´¥½øÐзŴó¡£

ͨ¹ý½«¼ÆËãÓëÍøÂçµ÷ÓÃ×ªÒÆÖÁReact×é¼þµÄcomponentDidMount·½·¨ÖУ¬ÎÒÃǵÃÒÔ½â³ý¶ÔÖ÷Ï̵߳ÄЧÂÊ·Á°­£¬Í¬Ê±¼õÉÙÁ˶Ը÷×é¼þ½øÐÐäÖȾʱµÄÒâÍâÌøÖ¡×´¿ö£¨Í¼12Ëùʾ£©¡£

3.±ÜÃâʹÓÃdangerouslySetInnerHTML

ÔÚTwitter Liteµ±ÖУ¬ÎÒÃÇÑ¡ÔñʹÓÃSVGͼ±ê£¬ÒòΪÆä¼«¾ß¿ÉÒÆÖ²ÐÔÇÒÊÇ×îΪÀíÏëµÄ¿ÉÀ©Õ¹Ñ¡Ïî¡£Òź¶µÄÊÇ£¬ÔÚ¾ÉÓÐReact°æ±¾µ±ÖУ¬´ó²¿·ÖSVGÊôÐÔÔÚÁ¢×ã×é¼þ½øÐÐÔªËØ´´½¨Ê±²¢²»ÊÜÖ§³Ö¡£Òò´Ë£¬ÔÚ×î³õ¿ªÊ¼±àдÕâ¿îÓ¦ÓóÌÐòʱ£¬ÎÒÃDZ»ÆÈͨ¹ýdangerouslySetInnerHTMLÒÔ½«SVGͼ±ê×÷ΪReact×é¼þ½øÐÐʹÓá£

¾ÙÀýÀ´Ëµ£¬ÎÒÃǵÄԭʼHeartIconÈçÏÂËùʾ:

const HeartIcon = (props) => React.createElement('svg', {
...props,
dangerouslySetInnerHTML: { __html: '<g><path d="M38.723 12c-7.187
0-11.16 7.306-11.723 8.131C26.437 19.306 22.504 12 15.277 12 8.791
12 3.533 18.163 3.533 24.647 3.533 39.964 21.891 55.907 27 56c5.109-.093
23.467-16.036 23.467-31.353C50.467 18.163 45.209 12 38.723 12z"></path></g>' },
viewBox: '0 0 54 72'
});

ÕâÀïÐèҪǿµ÷Ò»µã£¬ÎÒÃDz»½ö²»¹ÄÀøÊ¹ÓÃdangerouslySetInnerHTML£¬¸üÖØÒªµÄÊÇ£¬ÊÂʵ֤Ã÷ÆäÕýÊǵ¼ÖÂһϵÁйÒÔØÓëäÖȾ»ºÂýÎÊÌâµÄÔ´Í·¡£

ͼ13

ͼ14

֮ǰ£¨Í¼13£©£¬¿ÉÒÔ¿´µ½¹ÒÔØ4¸öSVGͼ±êÐèÒªÔ¼20ºÁÃ룬¶øÖ®ºó£¨Í¼14£©Ôò½öÐèÒª8ºÁÃë¡£µã»÷»òµã´¥½øÐзŴó¡£

ͨ¹ý¶ÔÒÔÉÏ»ðÑæÍ¼½øÐзÖÎö£¬ÎÒÃǵÄԭʼ´úÂ루ͼ13£©ÏÔʾÆäÔÚµÍÅäÖÃÉ豸ÉÏÐèÒª20ºÁÃë·½¿ÉÍê³ÉÍÆÎĵײ¿4¸öSVGͼ±êµÄ¹ÒÔØ²Ù×÷¡£ËäÈ»¾Í±¾Éí¶øÑÔʱºÄ²¢²»¿äÕÅ£¬µ«¿¼Âǵ½´óÁ¿ÍÆÎĹö¶¯²Ù×÷Çé¿ö£¬ÎÒÃÇÒâʶµ½Õâ»áÔì³É¾Þ´óµÄʱ¼äÀË·Ñ¡£

ÓÉÓÚReact v15¶Ô´ó²¿·ÖSVGÊôÐÔÌṩ֧³Ö£¬Òò´ËÎÒÃÇ¿ªÊ¼³¢ÊÔ²¢Ï£ÍûÁ˽ⲻÔÙʹÓÃdangerouslySetInnerHTML»á´øÀ´ÔõÑùµÄЧ¹û¡£Í¨¹ý¼ì²éÉý¼¶°æ±¾µÄ»ðÑæÍ¼£¨Í¼14£©£¬ÎÒÃǵÃÒÔ½«Ã¿×éͼ±êµÄ¹ÒÔØÓëäÖȾʱ¼äƽ¾ùËõ¶Ì60%£¡

ÏÖÔÚ£¬ÎÒÃǵÄSVGͼ±êÊôÓÚ¼òµ¥µÄÎÞ״̬×é¼þ£¬ÇÒ²»ÔÙʹÓá°dangerous¡±º¯Êý£¬ÇÒ¹ÒÔØËÙ¶ÈÆ½¾ùÌáÉý60%¡£¾ßÌåÈçÏ£º

const HeartIcon = (props = {}) => (
<svg {...props} viewBox='0 0 ${width} ${height}'>
<g><path d='M38.723 12c-7.187 0-11.16 7.306-11.723
8.131C26.437 19.306 22.504 12 15.277 12 8.791 12 3.533
18.163 3.533 24.647 3.533 39.964 21.891 55.907 27
56c5.109-.093 23.467-16.036 23.467-31.353C50.467 18.163
45.209 12 38.723 12z'></path></g>
</svg>
);

4.ÔÚ¹ÒÔØ¼°Ð¶ÔØ´óÁ¿×é¼þÊ±ÍÆ³ÙäÖȾ

ÔÚµÍÅäÖÃÉ豸µ±ÖУ¬ÎÒÃÇ×¢Òâµ½×Ô¼ºµÄÖ÷µ¼º½À¸¿ÉÄÜÐèÒªÏ൱³¤µÄʱ¼ä²ÅÄܹ»Íê³É¶Ô¶àÏîµã´¥²Ù×÷µÄÕýÈ·ÏìÓ¦£¬Õâ»áµ¼ÖÂÓû§ÎóÒÔΪµÚÒ»´Îµã´¥Î´ÄÜ×àЧ²¢½øÐз´¸´³¢ÊÔ¡£

ͨ¹ýͼ15¿ÉÒÔ¿´µ½£¬ÎÒÃǵÄHomeͼ±êºÄʱ½ü2Ãë²ÅÍê³É¸üв¢¶Ôµã´¥²Ù×÷×÷³öÏìÓ¦£º

ͼ15

Èç¹û²»¶ÔäÖȾ½øÐÐÍÆ³Ù£¬Ôòµ¼º½À¸ÐèÒª½Ï³¤ºÄʱ²ÅÄÜ¿ªÊ¼ÏìÓ¦¡£

Çë±ðÎó»á£¬Õâ¾ø²»ÊÇÓÉÓÚÔËÐÐGIFËùÔì³ÉµÄÖ¡ÂÊ»ºÂý¡£ÊÂʵÉÏ£¬ÆäËÙ¶ÈȷʵÁîÈËÎÞ·¨ÈÌÊÜ£¬µ«´Ë´ÎHomeÆÁÄ»ÖеÄÈ«²¿Êý¾Ý¶¼ÒѾ­¼ÓÔØÍê³É¡ª¡ªÄÇô£¬ÎªÊ²Ã´ÈÔÐèÒª³¤³¤Ê±¼ä²ÅÄܽ«È«²¿ÄÚÈÝÕýÈ·ÏÔʾ³öÀ´£¿

ÊÂʵ֤Ã÷£¬´óÐÍ×é¼þÊ÷×´½á¹¹£¨ÀýÈçÍÆÎÄʱ¼äÖᣩµÄ¹ÒÔØÓëÐ¶ÔØÔÚReactÖлáÏûºÄ´óÁ¿¼ÆËã×ÊÔ´¡£

×÷Ϊ×î¼òµ¥µÄÒªÇó£¬ÎÒÃÇÏ£Íû½â¾öÕâÒ»µ¼º½À¸ÎÞ·¨ÏìÓ¦Óû§ÊäÈë²Ù×÷µÄ×´¿ö¡£Òò´Ë£¬ÎÒÃÇ´´½¨ÁËÒ»¸öСÐÍHigherOrderCompoent×é¼þ£º

import hoistStatics from 'hoist-non-react-statics';
import React from 'react';

/**
* Allows two animation frames to complete to allow other components to update
* and re-render before mounting and rendering an expensive `WrappedComponent`.
*/
export default function deferComponentRender(WrappedComponent) {
class DeferredRenderWrapper extends React.Component {
constructor(props, context) {
super(props, context);
this.state = { shouldRender: false };
}

componentDidMount() {
window.requestAnimationFrame(() => {
window.requestAnimationFrame(() => this.setState({ shouldRender: true }));
});
}

render() {
return this.state.shouldRender ? <WrappedComponent {...this.props} /> : null;
}
}

return hoistStatics(DeferredRenderWrapper, WrappedComponent);
}

ÎÒÃǵÄHigherOrderComponentÓÉ Katie Sievert±àд¡£

ÔÚ±»Ó¦ÓÃÓÚÎÒÃǵÄHomeTimelineÖ®ºó£¬ÎÒÃÇ·¢ÏÖµ¼º½À¸Äܹ»ÊµÏÖ½ü¼´Ê±ÏìÓ¦£¬Õ⼫´óÌá¸ßÁËÓ¦ÓóÌÐòµÄÕûÌåʹÓøÐÊÜ¡£

const DeferredTimeline = deferComponentRender(HomeTimeline);

render(<DeferredTimeline />);

ͼ16

ÔÚÍÆ³ÙäÖȾ֮ºó£¬µ¼º½À¸Äܹ»ÊµÏÖÁ¢¼´ÏìÓ¦¡£

Èý¡¢ÓÅ»¯Redux

1.±ÜÃâÆµ·±½øÐÐ״̬´æ´¢

¾¡¹Ü×é¼þ¿ØÖÆÍùÍù±»×÷ΪÀíÏëµÄʵ¼ù·½°¸£¬µ«ÊÂʵ֤Ã÷¿ØÖÆÊäÈëÄÚÈݻᵼÖÂÿһ´Î°´¼ü½ÔÔì³É¸üÐÂÓëÖØÐÂäÖȾ¡£

ÕâÒ»µãÔÚÖ÷Ƶ¸ß´ï3 GHzµĄ̈ʽ¼ÆËã»úÉϲ¢²»ÊÇÎÊÌ⣬µ«¶ÔÓÚCPUÐÔÄܽÏΪÓÐÏÞµÄСÐÍÒÆ¶¯É豸¶øÑÔ£¬Óû§½«ÔÚÊäÈëʱÔâÓöÃ÷ÏÔµÄÑÓ³Ù¡ª¡ªÌرðÊÇÔÚ¶ÔÊä³öÄÚÈÝÖеĴóÁ¿×Ö·û½øÐÐɾ³ýʱ¡£

ΪÁ˱£Áôµ±Ç°ËùÊäÈëµÄÍÆÎÄÖµ²¢¼ÆËãÊ£Óà¿ÉÊäÈë×Ö·ûÊý£¬ÎÒÃÇʹÓÃÒ»ÏîÊÜ¿Ø×é¼þ²¢ÔÚÿ´Î°´¼üʱ½«ÊäÈëÄÚÈÝÖеĵ±Ç°Öµ´«µÝÖÁÎÒÃǵÄRedux״̬ÄÚ¡£

ͼ17Ϊһ¿îµäÐ͵ÄAndroid 5É豸£¬Ã¿´Î°´¼ü´øÀ´µÄ±ä¸ü¶¼»áµ¼ÖÂÔ¼200ºÁÃëµÄÑÓ³Ù¡£Èç¹ûÓû§ÊäÈëËٶȺܿ죬ÔòÓ¦ÓõÄʵ¼ÊÔËÐÐ״̬½«·Ç³£Ôã¸â¡£ÊÂʵÉÏ£¬Óû§¾­³£±¨¸æ³ÆÆä×Ö·û²åÈëµã»áµ½´¦ÂҴܲ¢µ¼ÖÂÊäÈëÄÚÈÝÏÝÈë»ìÂÒ¡£

ͼ17

ͼ18

ÔÚʹÓÃÓ벻ʹÓÃReduxÁ½ÖÖÇé¿öÏ£¬¶Ôÿ´Î°´¼üµÄ¸üÐÂËٶȽøÐжԱȡ£µã»÷»òµã´¥½øÐзŴó¡£

ͨ¹ý×èֹÿ´Î°´¼üºó½«²Ý¸åÍÆÎÄ״̬´«µÝÖÁÖ÷Redux״̬²¢½«Æä±£ÁôÔÚReact×é¼þµÄ±¾µØ×´Ì¬ÄÚ£¬ÎÒÃǵÃÒÔ½«ÑÓ³Ùˮƽ½µµÍ³¬¹ý50%£¨Í¼18£©¡£

2.½«ÅúÁ¿²Ù×÷ºÏ²¢Îªµ¥Ò»µ÷¶È

ÔÚTwitter Lieµ±ÖУ¬ÎÒÃÇÀûÓÃreduxÅäºÏreact-reduxÒÔ½«×é¼þÈ·±£¸÷×é¼þÄܹ»¶©ÔÄÊý¾Ý״̬±ä¸ü¡£ÎÒÃÇ»¹¶ÔÊý¾Ý½øÐÐÁËÓÅ»¯£¬¼´ÀûÓÃNormalizrÓëcombineReducers½«Æä²ð·ÖΪµ¥Ò»´óÐÍ´æ´¢ÄÚÈÝÖеĶà¸ö¶ÀÁ¢Çø¼ä¡£ÕâÒ»ÇÐ×îÖÕÓÐЧ±ÜÃâÁËÊý¾ÝÖØ¸´²¢È·±£ÎÒÃǵĴ洢Á¿±£³ÖÔڽϵÍˮƽ¡£È»¶ø£¬Ã¿Ò»´Î»ñÈ¡µ½ÐÂÊý¾Ý£¬ÎÒÃǶ¼ÐèÒªµ÷¶È¶àÏî²Ù×÷ÒÔ½«´ËÐÂÊý¾ÝÌí¼ÓÖÁÊʺϵĴ洢¿âÄÚ¡£

¿¼Âǵ½react-reduxµÄ¹¤×÷·½Ê½£¬ÕâÒâζ×ÅÿÏîµ÷¶È²Ù×÷¶¼½«µ¼ÖÂÎÒÃǵÄÁ¬½Ó×é¼þ£¨±»³ÆÎªContainers£¬¼´ÈÝÆ÷£©ÐèÒªÖØÐ¼ÆËã±ä¸ü²¢¿ÉÄÜÐèÒª½øÐÐÖØÐÂäÖȾ¡£

¾¡¹ÜÎÒÃÇʹÓÃÁËÒ»¿î¶¨ÖÆ»¯Öмä¼þ£¬µ«ÈÔ´æÔÚÆäËü´óÁ¿Öмä¼þ¿É¹©Ñ¡Ôñ¡£´ó¼Ò¿ÉÒÔ°´ÕÕÐèÇó´ÓÖÐÌôÑ¡»òÕß±àдÄú×Ô¼ºµÄ¶¨ÖÆÖмä¼þ¡£

ÅжÏÅúÁ¿²Ù×÷ÊÕÒæµÄ×î¼Ñ·½Ê½ÔÚÓÚʹÓÃChrome React PerfÀ©Õ¹¡£ÔÚ³õʼ¼ÓÔØÊ±£¬ÎÒÃÇÔÚºǫ́ÖжÔδ¶ÁÈ¡DM½øÐÐÔ¤»º´æ¼°¼ÆËã¡£Ôڴ˹ý³ÌÖУ¬ÎÒÃÇ»áÏòÆäÖÐÌí¼Ó´óÁ¿¹¦ÄÜʵÌ壨°üÀ¨»á»°¡¢Óû§¡¢ÏûÏ¢ÌõÄ¿µÈ£©¡£ÔÚδ½øÐÐÅúÁ¿µ÷¶Èǰ£¨Í¼19£©£¬´ó¼Ò¿ÉÒÔ¿´µ½Ã¿Ò»×é¼þµÄäÖȾ´ÎÊý£¨Ô¼16´Î£©Ô¼ÎªÊ¹ÓÃÅúÁ¿µ÷¶Èºó£¨Í¼20£¬Ô¼8´Î£©µÄ2±¶¡£

ͼ19

ͼ20

ÀûÓÃChrome React PerfÀ©Õ¹¶ÔÅúÁ¿µ÷¶Èǰ£¨Í¼19£©ÓëÅúÁ¿µ÷¶Èºó£¨Í¼20£©µÄReduxäÖȾ´ÎÊý½øÐбȽϡ£µã»÷»òµã´¥½øÐзŴó¡£

ËÄ¡¢Service Workers

¾¡¹ÜĿǰService WorkersÉÐδµÃµ½È«²¿ä¯ÀÀÆ÷µÄÖ§³Ö£¬µ«ÆäÒѾ­³ÉΪTwitter LiteÖм«¾ß¼ÛÖµµÄ×é³É²¿·Ö¡£ÔÚʹÓÃService WorkersµÄÇé¿öÏ£¬ÎÒÃÇÄܹ»ÀûÓÃÆäÍÆËÍ֪ͨ²¢Ô¤»º´æÓ¦ÓóÌÐò×ʲú¡£Òź¶µÄÊÇ£¬ÓÉÓÚÆäÉÐÊôÓÚÒ»ÖÖÐÂÐ˼¼Êõ£¬Òò´ËÎÒÃÇ»¹ÐèÒª½øÐÐÉîÈëÑо¿ÒÔÁ˽âÆäÐÔÄÜÌØÐÔ¡£

1.Ô¤»º´æ×ÊÔ´

Óë´ó¶àÊý²úÆ·Ò»Ñù£¬Twitter LiteµÄ¿ª·¢¹¤×÷»¹Ô¶Î´Íê³É¡£ÎÒÃÇÕýÔÚ»ý¼«¶ÔÆä½øÐÐÍØÕ¹¡¢Ìí¼Óй¦ÄÜ¡¢ÐÞ¸´bug²¢ÌáÉýÆäÔËÐÐËÙ¶È¡£ÕâÒâζ×ÅÎÒÃÇÐèҪƵ·±²¿ÊðеÄJavaScript×ʲú°æ±¾¡£

Òź¶µÄÊÇ£¬Õâ¿ÉÄÜ»á¸ø¸ÃÓ¦ÓóÌÐòµÄÓû§´øÀ´À§ÈÅ£¬ÆÈʹÆäÖØÐÂÏÂÔØ´óÁ¿½Å±¾ÎļþÒÔ²é¿´ÍÆÎÄÄÚÈÝ¡£

ÔÚÖ§³ÖService WorkersµÄä¯ÀÀÆ÷µ±ÖУ¬ÎÒÃǵÃÒÔÈ·±£¸÷¹¤×÷³ÌÐòÔÚºǫ́ÖÐÒÔ×Ô¶¯»¯·½Ê½¸üС¢ÏÂÔØ²¢»º´æ¸÷±ä¸üÎļþ£¬´Ó¶øÒÔ²»Ó°ÏìÓû§µÄ·½Ê½Íê³ÉÉý¼¶¡£

ÄÇôÕâÒ»ÇÐÄܹ»¸øÓû§´øÀ´ÔõÑùµÄÊÕÒæ£¿¾ßÌåÀ´½²£¬ÆäÄܹ»ÒÔ¼¸ºõ¼´Ê±·½Ê½Íê³ÉºóÐøÓ¦Óð汾¼ÓÔØ¡£

δÆôÓÃServiceWorkerÔ¤»º´æ£¨Í¼21£©ÓëÆôÓÃÔ¤»º´æ£¨Í¼22£©Çé¿öϵÄÍøÂç×ʲú¼ÓÔØÊ±¼ä¡£µã»÷»òµã´¥½øÐзŴó¡£

ͼ21

ͼ22

Èç´ó¼ÒËù¼û£¨Í¼21£©£¬ÔÚδÆôÓÃServiceWorkerÔ¤»º´æ»úÖÆµÄÇé¿öÏ£¬µ±Ç°ÊÓͼÖеÄÿһÏî×ʲú¶¼ÐèÒª´ÓÍøÂç´¦¼ÓÔØ²¢·µ»ØÖÁÓ¦ÓóÌÐò´¦¡£ÔÚÁ¼ºÃµÄ3GÍøÂç»·¾³Ï£¬ÕâÒ»¼ÓÔØ¹ý³ÌÈÔÐèÒªÔ¼6Ãë·½¿É½áÊø¡£È»¶øÔÚÆôÓÃServiceWorkerµÄÔ¤»º´æ»úÖÆºó£¨Í¼22£©£¬Í¬ÑùµÄ3GÍøÂç¿ÉÔÚ1.5ÃëÒÔÄÚÍê³ÉÒ³Ãæ¼ÓÔØ¡ª¡ªÐÔÄÜÌáÉý¸ß´ï75%£¡

2¡£ÍƳÙServiceWorker×¢²á

ÔÚ´ó¶àÊýÓ¦ÓóÌÐòµ±ÖУ¬ÎÒÃÇÄܹ»°²È«µØ½«ServiceWorkerÁ¢¼´×¢²áÖÁ¼ÓÔØÒ³Ãæµ±ÖУº

<script>
window.navigator.serviceWorker.register('/sw.js');
</script>

È»¶ø¿¼Âǵ½ÎÒÃÇÐèÒªÏòä¯ÀÀÆ÷·¢ËÍ´óÁ¿Êý¾ÝÒÔäÖȾ³öÍêÕûµÄÒ³ÃæÄÚÈÝ£¬Òò´ËÔÚTwitter LiteÖÐÕâÒ»ÇÐÍùÍùÎÞ·¨ÊµÏÖ¡£ÎÒÃÇ¿ÉÄÜÎÞ·¨¿ìËÙ·¢Ëͳä×ãµÄÊý¾Ý£¬»òÕßÄúËùµÇ½µÄÒ³Ãæ²¢²»Ö§³Ö¶ÔÀ´×Ô·þÎñÆ÷µÄÊý¾Ý½øÐÐÔ¤Ìî³ä¡£ÓÉÓÚÕâÒ»µãÍâ¼ÓÆäËüһЩÏÞÖÆ£¬ÎÒÃÇÐèÒªÔÚ³õÊ¼Ò³Ãæ¼ÓÔØºóÁ¢¼´Éú³É²¿·ÖAPIÇëÇó¡£

Ò»°ãÀ´½²£¬ÕâÖÖ×÷·¨²¢²»»á´øÀ´¸ºÃæÓ°Ï졣Ȼ¶øÈç¹ûÄ¿±êä¯ÀÀÆ÷ÉÐδ°²×°µ±Ç°°æ±¾µÄServiceWorker£¬ÎÒÃÇÔòÐèÒªÒªÇóÆä°²×°¡ª¡ªÕâ»á´øÀ´ÓÃÓÚ¶Ô¶àÏîJS¡¢CSSÒÔ¼°Í¼Ïñ×ʲú½øÐÐÔ¤»º´æµÄÔ¼50ÏîÇëÇó¡£

µ±ÎÒÃǼòµ¥¶ÔServiceWoker½øÐÐÁ¢¼´×¢²áʱ£¬¿ÉÒÔ¿´µ½ä¯ÀÀÆ÷ÄÚ»áÁ¢¼´½øÐÐÍøÂçÁ¬½Ó£¬ÇÒÖ±½Óµ½´ïÎÒÃǵIJ¢·¢ÇëÇóÊýÁ¿ÉÏÏÞ¡£

ͼ23

ͼ24

Çë×¢Ò⣬ÔÚÁ¢¼´¶ÔService Worker½øÐÐ×¢²áʱ£¬Æä»á×è°­È«²¿ÆäËüÍøÂçÇëÇó£¨Í¼23£©¡£ÍƳÙService Worker×¢²á£¨Í¼24£©ÔÊÐíÎÒÃǶÔÒ³Ãæ¼ÓÔØÄÚÈݽøÐгõʼ»¯£¬´Ó¶øÔÚ²¢·¢ÇëÇóÉÏÏÞÖ®ÄÚÍê³É±ØÒªµÄÍøÂçÇëÇó¡£µã»÷»òµã´¥½øÐзŴó¡£

ͨ¹ý½«ServiceWorker×¢²áÍÆ³ÙÖÁÆäËüAPIÇëÇó¡¢CSSÓëͼÏñ×ʲú¼ÓÔØÍê³ÉÖ®ºó£¬ÎÒÃÇÄܹ»±£Ö¤Ò³ÃæÍê³ÉäÖȾ²¢¾ß±¸ÏìÓ¦ÄÜÁ¦£¬¾ßÌåÈç½ØÍ¼Ëùʾ£¨Í¼24£©¡£

Îå¡¢±¾ÎÄС½á

×ÜÌå¶øÑÔ£¬±¾ÎÄÖ»ÁгöÁËÎÒÃÇÔÚTwitter Liteµ±ÖÐËùʵÏֵIJ¿·Ö¸Ä½ø¡£Î´À´ÎÒÃÇ»¹½«ÔÚTwitter LiteÖÐ×÷³ö¸ü¶à³¢ÊÔ£¬²¢¼ÌÐø·ÖÏíÎÒÃÇÔÚÆÚ¼ä·¢ÏÖµÄÎÊÌâÒÔ¼°¿Ë·þÀ§ÄѵľßÌå·½·¨¡£ÓûÁ˽â¸ü¶àÓëÎÒÃǵ±Ç°¿ª·¢½ø¶ÈÓëReact¼°PWA·ÖÎö½áÂÛµÄÐÅÏ¢£¬Çë¹Ø×¢ÎÒ£¨https://mobile.twitter.com/paularmstrong£©¼° Twitter Lite£¨https://mobile.twitter.com/paularmstrong/lists/twitter-lite/members£©¿ª·¢ÍŶӡ£

   
1828 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

¹È¸è½ÌÄãÈçºÎ¹¹½¨Ò»¸öÓÅÐãµÄÒÆ¶¯ÍøÕ¾
ÈçºÎ¸ßЧµØ¹ÜÀíÍøÕ¾¾²Ì¬×ÊÔ´
¸ßÐÔÄÜÍøÕ¾½¨ÉèµÄ×î¼Ñʵ¼ù
Ïл°ÍøÕ¾×ó²àµ¼º½µÄʵÏÖ
 
Ïà¹ØÎĵµ

ÍøÕ¾½¨Éè·½°¸Á÷³Ì
ÍøÕ¾½¨Éècss½Ì³Ì
ÆóÒµÍøÕ¾½¨ÉèÓëÍÆ¹ã
ÍøÕ¾½¨Éè·½°¸Êé
Ïà¹Ø¿Î³Ì

Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë