×Ô´ÓReact
Native³öÊÀ£¬ËäÈ»¹Ù·½Ò»Ö±¾¡¿ÉÄܵÄÓÅ»¯ÆäÐÔÄÜ£¬ÎªÁËÄÜÈÃÆäæÇÃÀÔÉúAppµÄËÙ¶È£¬µ«ÊÇÏÖʵ¸Ð¾õÓе㲻¾¡ÈËÒâ¡£½ÓÏÂÀ´½éÉÜÏÂʵ¼ùÖÐÓöµ½µÄһЩÐÔÄÜÎÊÌâÒÔ¼°ÓÅ»¯·½°¸¡£ÒÔ϶ÔÐÔÄܲÎÊýµÄÒÀ¾ÝÊÇÀ´×ÔÓÚReact
Native×Ô´øµÄFPS Monitor.
1. NavigatorÒ³ÃæÇл»¶¯»ÓÅ»¯
³¡¾°: ÔÚNavigator»¹Ã»³öÀ´Ê±£¬µ¼º½Æ÷ÊÇÓÉNavigatorIOSÀ´ÊµÏֵ쬵±Ê±¾õµÃÒ³ÃæÇл»¶¯»ºÜÁ÷³©£¬µ«ÊÇÒ»µ©ÓÃNavigatorºó£¬·¢ÏÖ¶¨ÒåµÄÇл»¶¯»»áʹJSÏ̳߳öÏÖÑÏÖØµÄµôÖ¡(¿¨¶ÙÏÖÏó)¡£
ÔÒò: NavigatorIOSµÄÇл»¶¯»ÊÇÅÜÔÚUIÖ÷Ïß³ÌÉÏ£¬¶ø²»ÊÇJSÏß³ÌÉϵģ¬ËùÒÔ²»ÊÜJSÏß³ÌÉϵĵôÖ¡Ó°Ïì¡£µ±È»¹Ù·½»¹ÊÇÍÆ¼öʹÓÃNavigator,ÆäÔÒòÈçÏ£º
NavigatorÀ©Õ¹ÐÔµÄAPIÉè¼ÆÊ¹µÃËüÍêÈ«¿ÉÒÔͨ¹ýjs¶¨ÖÆ£¬¶øNavigatorIOSÔòÎÞjs²ãÃæµÄ¶¨ÖÆ£»
NavigatorʹÓÃJavaScript±àд£¬iOSºÍAndroid¶¼¿ÉÒÔʹÓ㬶øNavigatorIOSÖ»ÄÜÔÚIOSÉÏ£»
NavigatorÓÅ»¯ºóµÄ¶¯»Ð§¹û»¹Ëã²»´í£¬¶øÇÒ¹Ù·½»¹ÔÚ²»¶Ï¸Ä½øÖУ¬µ±È»Õâ¸ö¶¯»±È²»ÉÏNavigatorIOSÄÇô˳»¬¡£µ«NavigatorIOS²¢²»ÔÚFaceBookµÄÓ¦ÓÃÖÐʹÓã¬Ò²²»ÊÇÆäÖ÷µ¼¿ª·¢£¬¶øÊÇ¿ªÔ´ÉçÇøÖ÷µ¼¿ª·¢¡£ËùÒÔ¿ÉÄܿӶàÓÖûÈ˸ø³öÌî¿ÓµÄ½â¾ö·½·¨¡£
ËùÒÔÎÒÃÇÑ¡Ôñµ¼º½µÄʱºò¾¡Á¿Ñ¡ÔñNavigator°É¡£
ÓÅ»¯Çл»¶¯»¿¨¶ÙµÄÎÊÌâ
1.ʹÓÃAPI InteractionManager£¬ËüµÄ×÷ÓþÍÊÇ¿ÉÒÔʹ±¾À´JSµÄһЩ²Ù×÷ÔÚ¶¯»Íê³ÉÖ®ºóÖ´ÐУ¬ÕâÑù¾Í¿ÉÈ·±£¶¯»µÄÁ÷³ÌÐÔ¡£µ±È»ÕâÊÇÔÚÑÓ³ÙÖ´ÐÐΪ´ú¼ÛÉÏÀ´»ñµÃÖ¡ÊýµÄÌá¸ß¡£

2.ʹÓÃLayoutAnimation API(Ò»´ÎÐÔ¶¯»)£¬ÔÚ¶Ô¶¯»ÖÐ;ÎÞÈ¡ÏûÒªÇó»òÕ߯äËûÖÐ;»Øµ÷ÒªÇóµÄ(±ÈÈç¾Ö²¿×é¼þÌØ¶¨ÏÔʾÒþ²Ø¶¯»µÈ)£¬Ôò¿ÉÒÔʹÓÃÕâ¸ö·½°¸¡£ÎÒÃÇ¿ÉÒÔÔÚµ÷ÓÃsetState֮ǰ£¬µ÷ÓÃLayoutAnimation·½·¨¡£´úÂëÈçÏ£º

2. Êý¾ÝÀàÐ͵ÄÓÅ»¯
³¡¾°£º»ù±¾ÉÏÿ¸öÒ³Ãæ¶¼ÐèÒª¼ÓÔØºÍäÖȾÊý¾Ý£¬Èç¹ûÒ³ÃæÁбíÊý¾Ý½á¹¹¸´ÔÓ,ÓÐʱˢÐÂÊý¾ÝʱstateÖеÄδ±ØÓÐÐ޸쬵«ÊÇÓöµ½ÕâÑùµÄÓï¾äthis.setState({data:samedata})
,½çÃæÈ´±»ÖØÐÂrender.
ÔÒò£ºÕâÊÇreact-nativeµÄÉúÃüÖÜÆÚ£¬µ±Äãµ÷ÓÃsetStateʱ£¬×ÜÊǻᴥ·¢renderµÄ·½·¨¡£
ÓÅ»¯Êý¾ÝÎÊÌ⣺¿ÉÒÔʹÓÃshouldComponentUpdateÉúÃüÖÜÆÚ·½·¨£¬´Ë·½·¨×÷ÓÃÊÇÔÚprops»òÕßstate¸Ä±äÇÒ½ÓÊÕµ½ÐµÄֵʱ£¬ÔòÔÚÒªrender·½·¨Ö®Ç°µ÷Óᣴ˷½·¨ÔÚ³õʼ»¯äÖȾµÄʱºò²»»áµ÷Óã¬ÔÚʹÓÃforceUpdate·½·¨µÄʱºòÒ²²»»á¡£ËùÒÔÔÚÕâ¸ö·½·¨ÖÐÎÒÃÇ¿ÉÒÔÔö¼ÓЩÅжϹæÔòÀ´±ÜÃâµ±state»òÕßpropsûÓиıäʱËùÔì³ÉµÄÖØÐÂrender.

µ«½ö½ö×öÕâ²ãÅжÏÊDz»¹»µÄ£¬Èç¹ûÊÇÒ»¸öÁбíµÄ¶ÔÏó£¬ÀýÈçÏÂÃæµÄÀý×Ó£º

ÕâÀTʹʹÓÃÁËshouldComponentUpdateÖеÄÅжϣ¬µ«È´Ò»Ö±·µ»Øtrue£¬µ¼Ö»¹»áÖ´ÐÐrender¡£ËùÒÔ±ØÐë¶Ô¶ÔÏóËùÓеļüÖµ½øÐнøÐбȽϲÅÄÜÈ·ÈÏÊÇ·ñÏàµÈ¡£ÕâÀïÍÆ¼öʹÓÃfacebook×Ô¼ÒµÄimmutablejs¡£Ò»¸ö²»¿É±äÊý¾ÝÀàÐ͵Ŀ⡣ʹÓúó¿ÉÒÔÖ±½ÓʹÓÃһϵÄд·¨´ïµ½ÎÒÃÇ֮ǰµÄÄ¿µÄ(¼´Ê¹ÊǶÔÏ󶼿ÉÒÔÍêÃÀµÄ×ö±È½Ï)¡£Ð޸ĺó´úÂëÈçÏ£º

immutablejsÆäËûµÄ¾ßÌåÓ÷¨Çë¼û:http://facebook.github.io/immutable-js/
3. Êý¾Ý¼ÓÔØµÄÓÅ»¯
³¡¾°£ºÔÚÊׯÁÒ³Ãæ¼ÓÔØÊ±£¬¼ÓÔØÇ°6·ÖÖÓµÄÊý¾Ý·Ö6Ò³ÏÔʾ£¬²¢Ðè±£³Öµ±Ç°Ñ¡ÔñÒ³µÄʱ¼äµÄǰ6·ÖÖÓ£¬Èç¹û°´Õմ˳¡¾°¿ª·¢ËùÓöµ½ÎÊÌâÊÇ£ºÊ×Ò³¼ÓÔØÊ±¼äÌ«³¤£¬¼ÓÔØÐÂÊý¾ÝÊ±Ò³ÃæÏÔʾ¼ÓÔØÓû§ÌåÑ鲻˳³©¡£
ÔÒò£ºÊ×Ò³ÇëÇóÊý¾ÝÁ¿¹ý´ó,µ¼ÖÂÊׯÁÒ³Ãæ¼ÓÔØºÜÂý;ºǫ́Êý¾Ý¸üÐÂʱµ¼ÖÂÓû§ÌåÑ鲻˳³©¡£
ÓÅ»¯ÎÊÌ⣺¼õÉÙÊׯÁ¼ÓÔØµÄÊý¾Ý£¬ÊµÏÖÊý¾ÝÀÁ¼ÓÔØ£¬ÆäÏȼÓÔØ3Ò³µÄÊý¾ÝÁ¿£¬È»ºóÔÚ»¬¶¯µÄʱºòºǫ́ȥȡºóÃæµÄÊý¾Ý(ÀýÈç°ó¶¨µ½Slider×é¼þµÄonMomentumScrollEndʼþÖÐ,ÿ´ÎÈ¡3ÌõÊý¾Ý),×îºóÿ´Î±£³Ö6·ÖÖÓµÄÊý¾ÝÔÚ×é¼þÖУ¬ÆäËûÊý¾ÝÔò¿É·Åµ½localstorageÖÐ×÷Ϊ»º´æ¡£ÕâÑù¾Í¿ÉÒÔ¼õÉÙÊׯÁ¼ÓÔØÊ¼þºÍÌá¸ßÓû§ÌåÑé¡£¼ÓÔØÊý¾ÝµÄ¹ö¶¯ÁбíʾÀý´úÂëÈçÏ£º
³õʼ»¯(¶¨ÒåÊý¾Ýdata)£º

¹ö¶¯ÁбíµÄʼþ£º·ÖΪ×ó»¬Ã¿´Îµ½3µÄ±¶ÊýÒ³ÃæÈ¡µ±Ç°È¡¹ýµÄÊý¾ÝµÄǰ3·ÖÖÓµÄÀúÊ·Êý¾Ý£»ÓÒ»¬Ôòȡ֮ºóµÄʱ¼ä¡£

4. ×é¼þÏìÓ¦ËٶȵÄÓÅ»¯
³¡¾°£ºÒ»¸öÒ³Ãæ°üº¬¶à¸öÀà±ðµÄÁÐ±í£¬ÓÉÓÚÁÐ±í¶¼±È½Ï³¤£¬ËùÒÔÐèÒªÔö¼ÓÕÛµþ¹¦Äܲ¢Ôö¼ÓÕÛµþ¶¯»£¬ÕÛµþ°´Å¥Ê¹ÓõÄÊÇTouchableHighlight×é¼þ¡£ÎÊÌâÊǵ±ÎÒµã»÷ÕÛµþ»òÕßÕ¹¿ª°´Å¥Ê±³öÏÖÑÓ³ÙÏìÓ¦ºÍ¶¯»µôÖ¡µÄÎÊÌâ¡£
ÔÒò£ºÔÚTouchableHighlight×é¼þµÄonPress·½·¨ÖÐÖ´ÐÐÁËsetStateµÄ²Ù×÷£¬ÓÉÓÚÁбíµÄ¶ÔÏóÏà¶ÔÀ´Ëµ±È½Ï¸´ÔÓÐèÒª´óÁ¿¼ÆËãµÄ¹¤×÷£¬ËùÒÔµ¼ÖÂÁËÑÓ³ÙÏìÓ¦ºÍJSÏ̵߳ĵôÖ¡¡£
ÓÅ»¯ÎÊÌ⣺ʹÓÃrequestAnimationFrame(fn)ÔÚÏÂÒ»Ö¡¾ÍÁ¢¼´Ö´Ðлص÷£¬ÕâÑù¾Í¿ÉÒÔÒì²½À´Ìá¸ß×é¼þµÄÏìÓ¦ËÙ¶È¡£¶øÕÛµþ¶¯»Ôò¿ÉÒÔʹÓÃLayoutAnimationÒ»´ÎÐÔ¶¯»À´Íê³É£¬±£Ö¤ÆäÁ÷³©ÐÔ¡£¶ø¶ÔÓÚijЩ״̬¸üУ¬setNativeProps·½·¨¿ÉÒÔÈÃÎÒÃÇÖ±½ÓÐÞ¸ÄÔÉúÊÓͼ×é¼þµÄÊôÐÔ£¬¶ø²»ÓÃͨ¹ýsetStateÀ´ÖØÐÂäÖȾ½á¹¹£¬ÕâÑùÄÜʹÕû¸ö×é¼þÏìÓ¦Ëٶȱä¿ì¡£

»¹ÓÐÒªÌáÐѵÄÊǾ¡Á¿ÓÅ»¯×é¼þµÄView½á¹¹£¬µ±ViewµÄ²ã¼¶ºÜÉîʱäÖȾµÄËÙ¶ÈÒ²»á±äÂý
5. ×ÊÔ´ÓÅ»¯
³¡¾°£ºÕâÀï˵µÄ×ÊÔ´°üÀ¨React Native´ò³öÀ´µÄBundle£¬Í¼Æ¬µÈ¾²Ì¬×ÊÔ´¡£RNµÄÒ»¹ÉÄÔ¶ùµÄ´ò°ü·½Ê½£¬ÎÞÒÉÒ»ÏÂ×ÓÔö´óÁËBundle°ü´óС¡£»¹ÓÐÒ»¸öÒ³Ãæ¶à¶àÉÙÉÙ»á°üº¬Ò»Ð©Í¼Æ¬£¬ÌرðÊÇÔÚһЩÉÌÒµAPPÖУ¬Í¼Æ¬ÊǶÔÄÚÈÝÒ»ÖÖ²¹³ä£¬ÄÜÈÃÌá¸ßÓû§ÌåÑ顣ΪÁËÄܸü¿ìµÄ¼ÓÔØÍ¼Æ¬£¬¿ÉÒÔ°ÑͼƬ´òÈë°üÖУ¬µ±È»Õâ¸ö´ú¼ÛÊǾ޴óµÄ¡£¶ÔAPPÀ´Ëµ£¬¿ØÖưüµÄSize²»¹Ü´ÓÉÌÒµ·½Ã滹ÊÇ¿ª·¢ÐÔÄÜ·½Ãæ¶¼ÊÇÒ»¸öºÜÖØÒªµÄ²ÎÊý¡£
ÓÅ»¯ÎÊÌ⣺
¶ÔÓÚBundle¹ý´ó£¬ÎÒÃÇ¿ÉÒÔͨ¹ýһЩ˼·À´ÓÅ»¯Ëü£¬Ê×ÏÈÊÇ¶ÔÆä³¢ÊÔ½øÐвð°ü£¬È»ºó¶Ô²ð°ü½øÐÐÔ¼Êø£¬Ê¹¹«¹²»ù´¡ÄDz¿·Ö²ð³ÉÒ»Àà°ü£¬Ê¹Æä¿ÉÒÔ°´Ðè¼ÓÔØ±¾µØÎļþ£¬¶øÏñÒµÎñÂß¼µÈÔò²ð³ÉÁíÒ»Àà°ü£¬Ê¹Æä¿ÉÒÔ°´Ðè¼ÓÔØÏßÉÏÎļþ¡£
ͼƬÎÒÃÇ¿ÉÒÔ¶ÔÆäת³Éwebp¸ñʽ¡£webp´ó¼ÒÓ¦¸Ã¶¼ºÜÊìϤÁË,Ëü¼ÈÖ§³ÖÓÐËðѹËõÓÖÖ§³ÖÎÞËðѹËõµÄͼƬÎļþ¸ñʽ¡£¸ù¾Ý¹Ù·½½éÉÜÆäÎÞËðѹËõºóµÄWebP±ÈPNGÎļþÉÙÁË45£¥µÄÎļþ´óС£¬¼´Ê¹PNGÎļþ¾¹ýѹËõ¹¤¾ßѹËõÖ®ºó£¬WebP»¹¿ÉÒÔ¼õÉÙ28£¥µÄÎļþ´óС£¬Õâ¿ÉÒÔ´ó´óÌá¸ßÒÆ¶¯¶ËµÄͼƬ¼ÓÔØËÙ¶È¡£¾Ý¹ÙÍø½éÉÜÔÚIOSƽ̨ÖÐ,ÿ´Îµ÷ÕûImage×é¼þµÄ´óС£¬¶¼ÐèÒªÖØÐ²üôºÍËõ·ÅÔʼͼƬ£¬ÖØÐÂäÖȾ½çÃæ¡£Õâ¸ö²Ù×÷¿ªÏú»á·Ç³£´ó£¬ÓÈÆäÊÇ´óµÄͼƬ¡£±ÈÆðÖ±½ÓÐ޸ijߴ磬¸üºÃµÄ·½°¸ÊÇʹÓÃtransform:[{scale}]µÄÑùʽÊôÐÔÀ´¸Ä±ä³ß´ç¡£±ÈÈçµ±Äãµã»÷Ò»¸öͼƬ£¬Òª½«Ëü·Å´óµ½È«ÆÁµÄʱºò£¬¾Í¿ÉÒÔʹÓÃÕâ¸öÊôÐÔ¡£
6. Ò³Ãæ¼ÓÔØÓëÏÔʾÓÅ»¯
³¡¾°£ºÄ³Ð©Ò³ÃæÐèÒª·ÃÎÊÒ»¸ö»ò¶à¸öÒµÎñÊý¾Ý·þÎñ£¬ËäȻȡÊý¾ÝÊÇÒì²½£¬µ«ÊÇÒ³Ãæ×ÜÊÇ»áÓÐÒ»¶Î½Ï³¤µÄloadingµÄʱ¼ä¡£
ÓÅ»¯ÎÊÌ⣺¶ÔÓÚÊׯÁËùÐèµÄÊý¾Ý·þÎñµÄ·ÃÎÊ£¬Ê¹ÆäÔÚÒ³Ãæ¼ÓÔØ½×¶Î¾¡ÔçµÄ·¢ÆðÊý¾ÝÇëÇó£¬ÕâÑùÓÐÖúÓÚ¼õÉٵȴýÊý¾ÝµÄʱ¼ä¡£¶ø¶Ô³¤Ê±¼äµÄLoading¿ÉÄܻήµÍÓû§ÌåÑéµÄÎÊÌ⣬ÎÒÃÇ¿ÉÒÔʹÓÃFakeÒ³À´Ìá¸ßÓû§ÌåÑé¡£ÏÈÏÔʾһ¸öFakeÒ³£¬µÈÊý¾ÝÇëÇóºó²¢Ö´ÐÐÁËÏàÓ¦µÄÒµÎñÂß¼ºó£¬ÔÙÌæ»»³ÉÕæÕýµÄÒ³Ãæ¡£
ÒÔÉÏÊÇÎÒÃÇÔÚʵ¼ùÖеÄһЩÓÅ»¯Ðĵã¬ÓÅ»¯Ö®Â·ÂþÂþ£¬ÎὫÉÏ϶øÇóË÷¡£ÌرðÊÇÔÚReact Native»¹Ôڳɳ¤ÆÚÕâ¸ö½×¶Î£¬ÓÅ»¯±äµÃÓÈÎªÖØÒª¡£ÆÚÍûReact
NativeδÀ´ÔÚÐÔÄÜÉÏÓиüºÃµÄÍ»ÆÆ¡£
|