¡¾µ¼Óï¡¿Qunar
React Native£¨ÏÂÎļò³Æ QRN£©ÊÇÈ¥ÄĶùÍø£¨Qunar£©»ùÓÚ React Native£¨ÏÂÎļò³Æ
RN£©¶¨ÖƵÄÒ»Ì׿ò¼Ü£¬Èà RN ÓÃÆðÀ´¸ü·½±ã¿ì½Ý£¬2016 Äê 3 ÔÂÉÏÏߺóÒÑÔÚ¹«Ë¾ÄÚ²¿´ó¹æÄ£Ó¦Óá£Í¸¹ý
QRN µÄ´ó¹æÄ£Êµ¼ùÎÒÃÇ¿ÉÒÔ¿´µ½ÈçºÎ¸üºÃµØÈ¥Ê¹Óà RN¡£
ǰÑÔ
ÒÆ¶¯ App ¿çƽ̨¿ª·¢¼¼ÊõÒòΪ¿ÉÒԵͳɱ¾¡¢¸ßЧÂʵØÍê³É App ¿ª·¢£¬Ò»Ö±ÒÔÀ´¶¼ÊÇÒÆ¶¯¿ª·¢µÄÈȵ㡣Ŀǰ³£¼ûµÄ¿çƽ̨¿ª·¢¼¼Êõ°üÀ¨
React Native¡¢Weex ºÍ»ùÓÚ HTML5 µÄ Hybrid ¿ò¼Ü¡£Qunar »ùÓÚ React
Native ¶¨ÖÆÁËÒ»Ì×¿çÆ½Ì¨ÒÆ¶¯¿ª·¢¿ò¼Ü¡ª¡ªQunar React Native£¨QRN£©£¬QRN ÓëÒÑÓÐÁ½ÄêÀúÊ·µÄ
HY£¨»ùÓÚ H5 µÄ Hybrid ·½°¸£©Ò»Í¬¹¹³ÉÁ˵±Ç° Qunar µÄ¿çƽ̨¿ª·¢¿ò¼Ü£¬ÕâÁ½¸ö¿ò¼Ü¶¼ÊÇÓÉ
Qunar ÒÆ¶¯¼Ü¹¹×é YMFE ÍÆ³ö¡£
QRN ½â¾öÁËʹÓà RN ÖеÄÖî¶àÎÊÌ⣬ʵÏÖÁ˸üÉÙµÄÆ½Ì¨²îÒì¡¢¸ü¸ßµÄ¿ª·¢Ð§ÂÊ¡¢¸üºÃµÄÓû§ÌåÑ飬Ҳ·Ç³£ÊʺÏÏñ
Qunar ÄÚ²¿ÕâÖÖ¶à¸öÒµÎñ¸ôÀëµÄ¿ª·¢Ìåϵ¡£½áºÏ³ÉÊìµÄÀëÏß×ÊÔ´°ü¿ò¼Ü£¬QRN Ò³Ãæ¿ÉÒÔͨ¹ýÈÈ·¢¿ìËÙµØÍê³ÉÏßÉÏ
Bug µÄÐÞ¸´ÉõÖÁ·¢²¼ÐÂÒ³Ãæ¡£Ä¿Ç° Qunar ÄÚ²¿ÒѾÓдóÁ¿µÄÒµÎñÉÏÏß»ùÓÚ QRN µÄÒ³Ãæ£¬ÕâÆäÖÐÒ²°üÀ¨ÁËÐí¶àºËÐĵÄÒµÎñÁ÷³ÌºÍÈÕ¾ùǧÍò
PV µÄÒ³Ãæ¡£
ÆðÔ´
Qunar ´Ó 2009 ÄêÂÊÏÈ¿ªÊ¼ÎÞÏßÒµÎñÖÁ½ñ£¬Òƶ¯¿Í»§¶ËÒ»Ö±³Ðµ£×Å´óÁ¿µÄÒµÎñÐèÇó¡£2014¡¢2015
ÄêÕýÊÇ Qunar ÔÚÒÆ¶¯¶Ë·¢Á¦¡¢ÒµÎñÔö³¤Ð×Ã͵ĹؼüʱÆÚ£¬È¥ÄĶùÂÃÐÐ App µÄÒ³ÃæÒ²ÓëÈÕ¾ãÔö£¬2015
Äêµ× iOS ¶Ë App ´óСһ¶È³¬¹ý 110MB¡£ÓÉÓÚ App Store µÄÏÞÖÆ£¬³¬¹ý 100MB
µÄ App Ö»ÄÜÔÚ Wi-Fi ϲÅÄÜÏÂÔØ£¬Õâ¾Íµ¼ÖÂÁËÓû§ÆÚÍû¶¨»úƱ¡¢¾Æµêʱ²»ÄÜʹÓà 3G/4G ÍøÂçËæÊ±ÏÂÔØÈ¥ÄĶùÂÃÐпͻ§¶Ë£¬Òò´Ëµ±Ê±Ò»¸öÆÈÇеÄÐèÇó¾ÍÊǼõÉÙ
App µÄ´óС¡£
Ëõ¼õ App °ü´óСµÄ³£¼û˼·ÊÇÈ¥³ýÈßÓàµÄÒµÎñ¡¢ÓÅ»¯Í¼Æ¬×ÊÔ´µÈ£¬µ«ÊÇÕâÑùÒÀÈ»ºÜÄѽ« App µÄ´óС¼õÉÙµ½
100MB ÒÔÏ¡£¶ø´Ó¸ù±¾ÉϼõÉÙ App ´óС¾ÍÐèÒª¼õÉÙ Native µÄÒ³Ãæ£¬É¾¼õÒµÎñÏÔÈ»²»ÊÇÒ»¸ö¿ÉÐеķ½°¸£¬Õâ¾ÍÒªÇóÎÒÃǽ«Ò³Ãæ×ö³É¿ÉÒÔ¶¯Ì¬»¯ÅäÖá£
ÔÚ QRN ֮ǰ£¬Qunar ÄÚ²¿Ò»Ö±´æÔÚÓÐÎÒÃÇÍŶÓÍÆ³öµÄÒ»Ì׿ÉÒÔÖ§³Ö¶¯Ì¬»¯ÅäÖÃµÄ¿çÆ½Ì¨ App ¿ª·¢¿ò¼Ü¡ª¡ªHY¡£HY
ÊÇ»ùÓÚ HTML5 µÄ Hybrid ¿ª·¢¿ò¼Ü£¬ÔÚ Qunar App ÖÐÒѾÓдóÁ¿µÄÒµÎñʹÓø÷½°¸¿ª·¢¡£µ«ÊÇ
HTML5 µÄ½â¾ö·½°¸´æÔÚÌåÑéºÍÐÔÄÜÁ½·½ÃæµÄÎÊÌ⣬±íÏÖΪ»ùÓÚ HY ¿ª·¢µÄÒ³ÃæºÜÄÑ´ïµ½Ò»¸öÔÉúµÄÓû§ÌåÑ飬ÔڵͶË
Android »úÉÏÌåÑé²î£¬ÕâÔÚһЩ¸´Ôӵ͝»³¡¾°ÖÐÓÈΪÃ÷ÏÔ¡£ÕâЩÎÊÌâÆäʵÊÇ HTML5 ·½°¸µÄ»ùÒòËù¾ö¶¨£¬Òò´ËΪÁ˼õÉÙ
App µÄ´óСÎÒÃÇÆÈÇÐÐèÒªÒ»¸öеÄÖ§³Ö¶¯Ì¬»¯ÅäÖÃµÄ¿çÆ½Ì¨ App ¿ª·¢¿ò¼Ü¡£
¾¹ýһϵÁеĵ÷ÑкÍÌÖÂÛºó£¬ÎÒÃǾö¶¨³¢ÊÔʹÓà Facebook ¿ªÔ´µÄ React Native ×÷ΪÐÂµÄ¿çÆ½Ì¨ÒÆ¶¯¿ª·¢¿ò¼Ü£¬ÕâÊÇÒòΪ
RN ¾ßÓÐÒÔÏÂÌØÐÔ£º
1.Ö§³Ö¶¯Ì¬»¯£ºRN µÄÒ³ÃæÂ߼ʹÓà JavaScript£¨ÏÂÎļò³Æ JS£©À´¿ØÖÆ£¬Òò´ËÎÒÃÇ¿ÉÒÔ×öµ½¶¯Ì¬·¢²¼¡£
2. ¿çƽ̨ÐÔ£ºRN ±¾ÉíÊÇÖ§³Ö iOS ºÍ Android Á½¸öƽ̨µÄ¿ª·¢¡£Í¬Ê±ÓÉÓÚÆäÒ³Ãæ¿ª·¢·½Ê½ÊÇÍêÈ«
Web »¯µÄ JS ºÍ React£¬Õâ¾ÍÈà RN µÄ Web ¶ËʵÏÖ³ÉΪ¿ÉÄÜ£¨React Web ¾ÍÊÇ
QRN µÄ Web ¶ËʵÏÖ£©£¬Òò´Ë RN ÍêÈ«¿ÉÒÔ×öµ½Ò»Ì×´úÂëÈý¶ËÔËÐС£
3. Native µÄÓû§ÌåÑ飺RN Ò³ÃæÊ¹ÓõÄÊÇ Native µÄÔÉú×é¼þ£¬¾ßÓиüÇ¿µÄ¿É¶¨ÖÆÐÔ£¬ÍêÈ«¿ÉÒÔ×öµ½Ò»¸ö
Native µÄÓû§ÌåÑé¡£
ΪÁËÑéÖ¤ RN µÄ¼¼Êõϸ½Ú£¬2015 Äê 12 ÔÂÎÒÃÇÔÚ Qunar µÄÒ»¸öÈÈÃŶÀÁ¢¿Í»§¶Ë¡°È¥ÄĶù˯¡±ÉÏÏßÁË»ùÓÚ
RN ¿ª·¢µÄ¾ÆµêÓû§µãÆÀÒ³£¬ÆäÖаüÀ¨Ïà²áµÄѡȡ½çÃæ¶¼ÊÇÓà RN À´Íê³É£¨Èçͼ 1 Ëùʾ£©£¬¸ÃÏîĿͬʱÉÏÏßÁË
iOS ºÍ Android£¬Ò³ÃæµÄÕûÌåЧ¹û³¬¹ýÔ¤ÆÚ£¬ÕâÒ²ÈÃÎÒÃǼáÐÅ React Native ÊÇÍêÈ«¿ÉÒÔ×÷Ϊһ¸öÐÂµÄ¿çÆ½Ì¨¿ª·¢¿ò¼Ü¡£

ͼ 1 ¡°È¥ÄĶù˯¡±¿Í»§¶Ë¾ÆµêÓû§µãÆÀÒ³Ãæ
ÔÚÉÏÏßÈ¥ÄĶù˯µÄ¾ÆµêµãÆÀÒ³µÄ¹ý³ÌÖУ¬ÎÒÃÇÒ²·¢ÏÖÁ˺ܶà RN ´æÔÚµÄÎÊÌ⣬±ÈÈ粿·Ö RN ×é¼þÒòΪʹÓõÄÊÇ
Native µÄ×é¼þËùÒÔ»¹´æÔÚÆ½Ì¨²îÒì¡¢´ò¿ª RN Ò³ÃæÊ±ÐèÒªÒ»¸ö½Ï³¤µÄ¼ÓÔØÊ±¼äµÈ¡£ÎªÁ˽â¾öÕâЩÎÊÌ⣬ÎÒÃÇ»¨ÁË
3 ¸öÔµÄʱ¼ä»ùÓÚ RN ¶¨ÖÆÁËÒ»Ì׸ü¿ì¡¢¸üºÃ¡¢¸üͳһµÄ¿çƽ̨¿ª·¢¿ò¼Ü QRN¡£
´ó¹æÄ£Ó¦ÓÃÏÖ×´
2016 Äê 3 ÔÂÎÒÃÇÉÏÏßÁ˵ÚÒ»¸ö»ùÓÚ QRN µÄÒ³Ãæ£ºÈ¥ÄĶùÂÃÐÐ iOS ¿Í»§¶ËµÄ¾ÆµêÊ×Ò³¡£ÔÚÖ®ºóµÄ¼¸¸öÔÂÖÐÎÒÃÇÉÏÏßÁË´óÁ¿»ùÓÚ
QRN ¿ª·¢µÄÏîÄ¿£¬µ½ 2016 Äê 10 ÔÂÔÚÈ¥ÄĶùÂÃÐпͻ§¶ËÖÐÒÑÓг¬¹ý 20 ¸ö QRN ÏîÄ¿£¬ÆäÖÐÓÐ
14 ¸öÊÇͬʱÉÏÏßÁË iOS ºÍ Android¡£Æ½¾ùÿ¸öÏîÄ¿ÓÐ 8 ¸öÒÔÉϵÄÒ³Ãæ£¬ÔÚ´ËÖ®ÖУ¬¾ÆµêÒ»¸ö
QRN ÏîÄ¿¾ÍÓжà´ï 20 ¸öÒ³Ãæ¡£
ÔÚÈ¥ÄĶùÂÃÐпͻ§¶ËÖÐÊ×Ò³µÄ¾Æµê£¨½ö iOS£©¡¢¿ÍÕ»ÃûËÞ¡¢½ðÈÚÀí²ÆµÄÒ»¼¶Èë¿Ú¾ùΪ QRN Ò³Ãæ¡£²»½öÈç´Ë£¬¶ÔÓÚºËÐÄÒµÎñÁ÷³Ì£¬ÀýÈç¶©µ¥ÁбíÒ³¡¢¶©µ¥ÏêÇéÒ³¡¢Óû§µÇÂ¼Ò³ÃæÒ²¶¼Ì滻ΪÁË
QRN Ò³Ãæ£¨¼ûͼ 2£©£¬ÕâÆäÖаüº¬Á˺ܶàÈÕ¾ùǧÍò PV µÄÒ³Ãæ¡£

ͼ 2 QRN Ò³ÃæÌæ»»
QRN µÄ¼Ü¹¹Ìصã
QRN ÔÚÈ¥ÄĶùÄÚ²¿´ó¹æÄ£µÄÓ¦ÓÃÓëÆä¼Ü¹¹Ãܲ»¿É·Ö£¬ÔÚÉè¼Æ QRN ¿ò¼ÜʱÎÒÃÇÖ÷Òª¿¼ÂÇÁËÏÂÃæÈýµã£º
1.ÒµÎñʹÓõıãÀûÐÔ£º²¿·Ö RN ×é¼þ£¬±ÈÈç Switch¡¢Picker µÈ²¢Ã»ÓÐ×öµ½ iOS¡¢Android
Á½¶ËµÄ UI ·ç¸ñͳһ£¬¶øÔÚ Qunar ÒÆ¶¯¿ª·¢ÖÐÒªÇóÁ½¸öƽ̨¾ßÓÐÒ»Ö嵀 UI ·ç¸ñ£¬Òò´ËΪÁ˱£Ö¤ÒµÎñʹÓõıãÀûÐÔ£¬ÎÒÃÇÐèÒª½øÒ»²½Ä¨Æ½Æ½Ì¨²îÒì¡£
2. ÓëÏÖÓÐÒ³ÃæµÄ¹²´æ£ºÔÚ Qunar ÒÆ¶¯¶ËÖв»½ö½ö´æÔÚ Native Ò³Ãæ£¬»¹´æÔÚ×Å´óÁ¿ HY Ò³Ãæ£¬ÔõôºÍÕâЩÏÖÓÐÒ³Ãæ½øÐй²´æÒ²ÊÇÎÒÃÇÉè¼Æ
QRN ËùÐ迼ÂǵÄÎÊÌâ¡£
3.Ö§³ÖÈÈ·¢¸üУºRN ÊÇÒ»¸öÖ§³Ö¶¯Ì¬»¯µÄÒÆ¶¯ App ¿ª·¢¿ò¼Ü£¬Òò´ËÎÒÃÇÐèÒª¿¼ÂÇÉè¼ÆÒ»¸öÍêÉÆµÄÈÈ·¢¸üлúÖÆÀ´ÊµÏÖ
QRN Ò³ÃæµÄ bugfix ÉõÖÁÌṩÉÏÏßÐÂÒ³Ãæ¡£
ÄÇô£¬ÎÒÃÇÊÇÔõô×öµÄÄØ£¿
½øÒ»²½Ä¨Æ½Æ½Ì¨²îÒì
RN µÄ Switch ʹÓõÄÊÇ iOS ºÍ Android ¸÷×ÔÆ½Ì¨µÄ UI ·ç¸ñ£¨Èçͼ 3 Ëùʾ£©£¬ÕâÔÚʹÓÃʱ¼«Îª²»±ã¡£

ͼ 3 React Native µÄ Switch Á½¶Ë UI ·ç¸ñ¶Ô±È
ÔÚ QRN ÖÐÎÒÃÇÌṩÁË iOS ºÍ Android ͳһµÄ UI ·ç¸ñ£¬·½±ãÒµÎñʹÓã¨Èçͼ 4 Ëùʾ£©£¬¶ÔÓÚÆäËû²»Í³Ò»µÄ»ù´¡
UI ×é¼þ£¬ÎÒÃǶ¼ÔÚ Android ÉÏ»ùÓÚ iOS ·ç¸ñÖØÐÂʵÏÖ£¬±£Ö¤ÁËÁ½¸öƽ̨µÄ UI ͳһ¡£

ͼ 4 QRN ÖÐͳһµÄ Switch UI ·ç¸ñ
ͬʱ£¬ÎÒÃÇҲʹÓà JS ʵÏÖÁËһЩ³£¼ûµÄÍⲿ UI ×é¼þ£¬ÀýÈçͼ 5 ÖÐÖ§³Ö²à»¬²Ù×÷µÄ ListView
ºÍÈÕÀúµÈ×é¼þ¡£Ê¹Óà JS ʵÏÖµÄ×é¼þ¾ßÓкÜÇ¿µÄ¿çƽ̨ÐÔ£¬Èç¹ûÕâЩ UI ×é¼þ³öÏÖ Bug£¬ÎÒÃÇÒ²¿ÉÒÔͨ¹ýÈÈ·¢¸üпìËÙÐÞ¸´£¬Æä³É±¾Ô¶µÍÓÚÐÞ¸´Ò»¸ö
Native µÄ×é¼þ£¨´Óhttp://ued.qunar.com/qrn/extraUI.html ¿É²é¿´¸ü¶àµÄ
QRN Íⲿ JS UI ×é¼þ£©¡£

ͼ 5 Ö§³Ö²à»¬²Ù×÷µÄ ListView ºÍÈÕÀú×é¼þÑÝʾ
³ýÁË UI ÉϵIJ»Í¬£¬iOS ºÍ Android ƽ̨µÄ²îÒ컹ÌåÏÖÔÚÆäËûµØ·½£¬ÆäÖÐÒ»¸ö²»Í¬µã¾ÍÊÇ App
״̬À¸¡£ÔÚ iOS ÉÏ´Ó iOS 7 ¿ªÊ¼¾ÍÖ§³Ö³Á½þʽ״̬À¸£¬ÇҸ߶ȾùΪ 20£¬µ«ÊÇ Android ÉÏÓÉÓÚϵͳ°æ±¾ºÍ»úÐ͵IJ»Í¬£¬ÊÇ·ñÖ§³Ö³Á½þʽ״̬À¸¡¢×´Ì¬À¸¸ß¶ÈÕâЩÊôÐÔÔÚд
RN Ò³ÃæÊ±¶¼ÐèÒª¹Ø×¢£¬µ« RN ²¢Ã»ÓÐÌṩһ¸öͳһµÄ API È¥»ñÈ¡¡£¶ÔÓÚÕâЩ²îÒ죬ÔÚ QRN ÖÐÎÒÃǶ¼ÌṩÁËͳһµÄ
API ·½±ãÒµÎñÔÚд QRN Ò³ÃæÊ±¿ÉÒÔÖ±½Ó»ñÈ¡£¬´Ó¶øÎÞÐèÇø·Öƽ̨¡£
ͨ¹ýÕâЩ·½Ê½ÎÒÃÇÕæÕý×öµ½ÁË¿çÆ½Ì¨ÐÔ£¬È¥ÄĶùÂÃÐпͻ§¶ËÊ×Ò³µÄ¿ÍÕ»ÃûËÞÒ³ÃæÍ¬Ê±ÉÏÏßÁË iOS ºÍ Android£¬Æä
JavaScript ´úÂëÖ»ÓÐ 6 ´¦ Platform ½øÐÐÆ½Ì¨µÄÅжϣ¬¶øÆäÔ´ÓÚÐèÒªºÍ iOS¡¢Android
ÏÖÓÐµÄ Native Ò³Ãæ½øÐн»»¥£¬±¾ÉíÁ½¸öƽ̨µÄ Native Ò³Ãæ½øÐÐÊý¾Ý´«µÝµÄ Scheme »á´æÔÚ²îÒ죬ËùÒÔÐèÒª½øÐÐÆ½Ì¨µÄÅжϡ£¿ÉÒÔ˵ʹÓÃ
QRN ½øÐÐÒ³ÃæµÄ¿ª·¢ÍêÈ«¿ÉÒÔ×öµ½²»ÐèҪƽ̨´úÂëµÄÅжϣ¬Ò»Ì×´úÂëͬʱÔËÐÐÔÚÁ½¸öƽ̨ÉÏ¡£
JS Bundle µÄ²ð·Ö
RN ÖÐ×îÖÕ pack ³öÀ´µÄ JS Bundle Îļþ²»½ö½ö°üº¬ÁËÒµÎñµÄÒ³Ãæ JS Âß¼£¬»¹°üº¬ÁË
RN ×é¼þºÍÆä¿ò¼ÜµÄ JS¡£ÔÚ QRN ÖУ¬ÎÒÃÇ°Ñ JS Bundle Îļþ²ð·Ö³ÉÁË QRN µÄ¿ò¼Ü JS
ºÍÒµÎñ JS£¨Èçͼ 6 Ëùʾ£©£¬ÔÚ²ð·ÖºóËùÓеÄÒµÎñ¹²ÓÃÒ»·Ý QRN ¿ò¼Ü JS£¬ÕâÑùÿ¸öÒµÎñÖ»ÐèÌṩ×Ô¼ºµÄÒµÎñ
JS£¬Í¨¹ýËüÃǵIJð·Ö£¬ÓÐЧµØ¼õÉÙÁË JSBundle µÄ´óС£¬Í¬Ê±Ò²·½±ãÁ˺óÐøµÄÔ¤¼ÓÔØºÍ»º´æ¡£

ͼ 6 ²ð·Ö JS Bundle
QRN µÄÔ¤¼ÓÔØºÍ»º´æ
RN Öд´½¨ RCTRootView£¨RN Ò³ÃæäÖȾµÄ View£©Ö®ºó»áÓÐÒ»¸ö°×ÆÁµÄʱ¼äµÈ´ý RN
»·¾³µÄ³õʼ»¯ºÍ¼ÓÔØ JS Bundle Îļþ£¬Õâ¸öʱ¼ä»á½Ó½ü 1s¡£ÔÚ QRN ÖУ¬ÎÒÃÇÌṩһ¸öÒì²½»ñÈ¡
RCTRootView µÄ·½·¨£¬»ñÈ¡µÄ RCTRootView ÒѾÍê³ÉÁË RN »·¾³µÄ³õʼ»¯£¬²¢ÒѼÓÔØÍê
QRN µÄ¿ò¼Ü JS ºÍÒµÎñ JS£¬Õâʱ¿ÉÒÔÖ±½Ó¿ªÊ¼äÖȾ¡£
ΪÁ˼õÉÙ QRN ÖлñÈ¡ View µÄʱ¼ä£¬ÎÒÃǽøÐÐÁË RN »·¾³µÄÔ¤¼ÓÔØºÍ»º´æ¡£ËùνԤ¼ÓÔØ¾ÍÊÇÌáǰ³õʼ»¯ºÃÒ»¸öÒѾ¼ÓÔØ
QRN ¿ò¼Ü JS µÄ RN »·¾³£¬ÕâÑù¾ÍÖ»ÐèҪȥ¼ÓÔØÒµÎñ JS£¬¿ÉÒÔËõ¶Ì×îÉÙ 200ms µÄµÈ´ýʱ¼ä¡£»º´æÖ¸µÄÊÇÎÒÃǻỺ´æÒ»¸öÒµÎñÒѾ¼ÓÔØºÃµÄ
RN »·¾³£¬µ±Ï´νøÈëÕâ¸öÒµÎñʱ¾Í¿ÉÒÔÖ±½Ó¿ªÊ¼Ò³ÃæµÄäÖȾ¡£
ÔÚ QRN ÖÐÎÒÃǸøÃ¿¸öÒµÎñÌṩÁËÒ»¸ö¶ÀÁ¢µÄ RN »·¾³£¬±£Ö¤ÁËÒµÎñµÄ¶ÀÁ¢ÐÔ£¬µ±Ò»¸öÒµÎñµÄ JS ´úÂë³öÏÖÎÊÌâʱ²¢²»»áÓ°ÏìÆäËûÒµÎñ¡£ÕâÖÖ
QRN ÒµÎñÍêÈ«½âñîµÄ·½Ê½·Ç³£ÊʺÏÀàËÆÓÚ Qunar ÕâÖÖÒµÎñ¸ôÀëµÄÇé¿ö¡£
³ÉÊìµÄÀëÏß×ÊÔ´°ü¿ò¼Ü
ÔÚ QRN ÖУ¬ÒµÎñ JS ÊÇÏßÉÏ×ÊÔ´£¬ÎªÁ˼õÉÙÓû§ÏÂÔØÊ±¼ä£¬ÎÒÃǸø QRN Ìí¼ÓÁËÀëÏß×ÊÔ´°üµÄÖ§³Ö£¬Èç¹ûÆäÖÐÓжÔÓ¦ÍøÂçÇëÇóµÄÍøÂç×ÊÔ´£¬ÄÇôÇëÇó»áÖ±½Ó·µ»Ø±¾µØÀëÏß×ÊÔ´°üÖеÄÎļþ£¬Õâ¸öʱ¼äºÍ¶ÁÈ¡±¾µØÎļþÒ»Ñù£¬Òò´ËÓÐЧ¼õÉÙÁËÍøÂçÇëÇóÒµÎñ
JS µÄʱ¼ä¡£Í¬Ê±¶ÔÓÚÒµÎñʹÓõÄͼƬµÈ×ÊÔ´£¬ÎÒÃÇÒ²»á·ÅÔÚÀëÏß×ÊÔ´°üÖмӿì×ÊÔ´´ò¿ªËÙ¶È¡£ÀëÏß×ÊÔ´°üµÄʹÓò»½ö½ö¼õÉÙÁËÏÂÔØÒµÎñ
JS µÄʱ¼ä£¬¶øÇÒÈà QRN Ò³Ãæ¿ÉÒÔÔÚÀëÏßÇé¿öÏ´ò¿ª£¬¸üÏñÒ»¸ö Native µÄÒ³Ãæ¡£
ĿǰËùÓеĶ¯Ì¬»¯Òƶ¯¿ª·¢¿ò¼Ü¶¼ÐèÒªÀëÏß×ÊÔ´°üµÄÖ§³ÖÀ´¼õÉÙ×ÊÔ´¼ÓÔØÊ±¼ä£¬Ã¿¸ö¹«Ë¾Ó¦¸Ã¶¼»áÓÐ×Ô¼ºµÄÒ»Ì×ʵÏÖ»úÖÆ£¬QRN
ʹÓõÄÀëÏß×ÊÔ´°üÒѾÔÚ HY ÖÐÓ¦ÓöàÄ꣬Æä»ùÓÚ BSDiff µÄ²î·Ö¸üлúÖÆºÍÖÇÄÜ»¯µÄ¸üвßÂÔ¿ÉÒÔÔÚ±£Ö¤½ÚÊ¡Óû§Á÷Á¿µÄͬʱӵÓм«¸ßµÄ×ÊÔ´°ü¸üÐÂÂÊ¡£Ò»¸ö
1.2MB µÄ×ÊÔ´°ü£¬Æä¸üÐÂʱ½ö½öÐèÒªÏÂÔØ²»µ½ 1KB µÄ²¹¶¡¡£¸ÃÀëÏß×ÊÔ´°ü¿ò¼ÜÊʺϼÓËÙÒÆ¶¯¿ª·¢Öеĸ÷ÖÖÍøÂç×ÊÔ´ÇëÇó£¬ÒýÈë¿ò¼Ü²»ÐèÒª¶ÔÒÑÓеÄÍøÂçÇëÇó´úÂë×öÈκÎÐ޸ģ¬Õû¸ö×ÊÔ´°ü¿ò¼Ü¶ÔÓÚ×ÊÔ´ÇëÇó·½ÊÇÎÞ¸ÐÖªµÄ¡£
×Ô¶¨Òå IconFont£¨Í¼±ê×ÖÌ壩µÄÖ§³Ö
ÔÚ QRN ÖÐÎÒÃÇÌí¼ÓÁË×Ô¶¨Òå IconFont µÄÖ§³Ö£¬¿ÉÒÔʹÓà IconFont À´×÷Ϊͼ±ê¡£ÒµÎñÖ»ÐèÒªÔÚ
JS ´úÂëÖÐÅäÖÃÐèÒª¼ÓÔØµÄ IconFont ¾Í¿ÉÒÔ×Ô¶¯Íê³É×ÖÌåµÄÌí¼Ó£¬Õû¸ö¹ý³ÌÎÞÐè±àдÈκΠNative
´úÂë¡£ÓëʹÓÃͼƬ×öͼ±êÏà±È£¬IconFont ×÷ΪʸÁ¿Í¼¸üÇåÎú¡¢¸üÇáÁ¿Ò²¸üÁé»î¡£
ͼ 7 ËùʾµÄÈ¥ÄĶùÂÃÐпÍÕ»ÃûËÞÒ³ÃæÖеÄסËÞÀàÐÍͼ±ê¾ÍÊÇ»ùÓÚ IconFont ʵÏÖ£¬Í¨¹ýÉèÖÃ×ÖÌåÑÕÉ«¡¢ÒõÓ°µÈÊôÐԾͿÉÒÔ¿ØÖÆÍ¼±êµÄЧ¹û£¬Èç¹ûʹÓÃͼƬµÄ»°¾ÍµÃΪÿ¸ö²»Í¬µÄ´óСºÍЧ¹û×¼±¸²»Í¬µÄÎļþ¡£

ͼ 7 »ùÓÚ IconFont ʵÏÖµÄסËÞÀàÐÍͼ±ê
ÎÞÂñµãͳ¼Æ·½°¸Ö§³Ö
QRN ÖÐÔö¼ÓÁË¶Ô Qunar ÎÞÂñµãͳ¼Æ·½°¸ QAV µÄÖ§³Ö£¬Í¨¹ýÐÞ¸Ä RN ¿ò¼Ü£¬ÎÒÃÇ×öµ½ÁË JS
´úÂëÎÞÐèÈκÎÐ޸ľͿÉÒÔͳ¼ÆÓû§µÄµã»÷¡¢Ìø×ªÊý¾Ý£¬½áºÏ QAV ÌṩµÄÓû§Ï¸²é¡¢Ò³ÃæÁ÷Á¿·ÖÎöµÈ¶àά¶ÈµÄÓû§·ÖÎöÇþµÀ£¬ÈÃ
App ¿ª·¢Õß¿ÉÒÔ¶´²ìÓû§µÄÐÐΪ¡£¶øÒýÈëÕâÌ×ÎÞÂñµã·½°¸·Ç³£¼òµ¥£¬Ö»Ð轫 RN Ìæ»»Îª QRN ¼´¿É£¬²»ÓöÔÒÑÓеÄ
RN JS ´úÂë×öÈκεÄÐ޸ġ£
È«Ð嵀 ScrollView ºÍ ListView
ScrollView ºÍ ListView ÊÇÒµÎñ×ʹÓõÄÁ½¸ö×é¼þ£¬µ«ÊÇ RN µÄ ScrollView
ºÍ ListView µÄÐÔÄܺÍÄÚ´æÕ¼Óôﲻµ½ÎÒÃÇµÄÆÚÍû¡£Ä¿Ç°ÍøÉÏÓкܶ࿪ԴµÄÓÅ»¯·½°¸£¬ÔÚ QRN ÖÐÎÒÃÇÒ²Éè¼ÆÁËÒ»Ì×ȫеÄ
ScrollView ºÍ ListView£¬¿ÉÒÔ´øÀ´¸ü¸ßµÄÁé»îÐԺ͸üСµÄÄÚ´æÕ¼Óá£
QRN µÄ ScrollView Óë RN ScrollView ×î´óµÄ²»Í¬ÔÚÓÚǰÕߵĹö¶¯ÊÖÊÆÊÇÓÉ JS
¿ØÖÆ£¬¶øºóÕßʹÓõÄÊÇ Native µÄ ScrollView£¬ÔÚ Native ´¦ÀíÁ˹ö¶¯ÊÖÊÆºó֪ͨ JS
ScrollView ¹ö¶¯µ½ÄĸöλÖã¬Ïêϸ¶Ô±È¿É¼ûͼ 8¡£

ͼ 8 QRN ScrollView Óë RN ScrollView ´¦Àí¶Ô±È
ÒòΪ RN ÖгýÁË ScrollView ºÍ ListView ÒÔÍ⣬ÆäËû×é¼þµÄÓû§ÊÖÊÆ¾ùÓÉ JS ´¦Àí£¬Èç¹ûʹÓÃ
QRN ScrollView Ôò¿ÉÒÔ±£Ö¤ RN Ò³ÃæËùÓеÄ×é¼þ¶¼Ê¹ÓÃÁËͳһµÄÊÖÊÆ´¦Àí»úÖÆ£¬´Ó¶ø´øÀ´¼«´óµÄÁé»îÐÔ£¬ÈÃ
ScrollView ǶÌ× ScrollView µÄЧ¹û¸ü¼Ó×ÔÈ»¡£
QRN µÄ ListView »ùÓÚ React µÄÐéÄâ DOM Diff Ë㷨ʵÏÖÁËÕæÕýÒâÒåÉ쵀 Cell
¸´Óã¬Í¼ 9 ÏÔʾÁËÔÚ iPhone 7 ÉÏͬÑù 2000 ÐÐÊý¾Ý»¬¶¯µ½µ×ʱµÄÄÚ´æÕ¼ÓÃÇé¿ö£¬¿ÉÒÔ¿´µ½ QRN
µÄ ListView ÄÚ´æÕ¼ÓÃһֱά³ÖÔÚ 70MB ÒÔÄÚ£¬¶ø RN µÄ ListView ÔÚ»¬¶¯¹ý³ÌÖÐÄÚ´æ×î¸ß´ï
1.3GB£¬×îÖÕÎȶ¨µÄÄÚ´æÕ¼ÓÃÒ²½Ó½ü 600MB£¬ÏÔÈ»¶ÔÓڴ󲿷ֵĻúÐÍ£¬RN ListView ÕâÑùµÄÄÚ´æÕ¼ÓûᵼÖÂ
App ÉÁÍË¡£

ͼ 9 ÄÚ´æÕ¼Ó÷åÖµ¶Ô±È
QRN µÄ ListView Óë RN ListView Ó÷¨ÍêȫһÖ£¬Ò»¸öÏÖÓÐµÄ RN ÏîĿֻÐèÒª½«
import{ListView}from'react-native'ÐÞ¸ÄΪ import{ListView}fromqunar-react-native
¼´¿ÉʹÓà QRN µÄ ListView¡£
ÓÉÓÚ QRN µÄ ScrollView »áÔÚ JS Öд¦Àí¹ö¶¯ÊÖÊÆ£¬QRN µÄ ListView Ò²»áÔÚ
JS Öд¦Àí cell µÄ¸´Óã¬Òò´ËÒ»µ© JS Ï̸߳ºµ£¹ýÖØ¾Í»áµ¼ÖÂÒ³ÃæµÄ¿¨¶Ù£¬ÕâÒ²ÊÇĿǰ QRN ScrollView
ºÍ ListView ´æÔڵIJ»×㣬ºÃÔÚÆäÖд󲿷ֶ¼¿ÉÒÔͨ¹ýÓÅ»¯ JS ´úÂë½â¾ö¡£
Óöµ½µÄÎÊÌâ
ÔÚ´ó¹æÄ£Ó¦Óà QRN µÄ¹ý³ÌÖУ¬ÎÒÃÇÒ²Óöµ½Á˺ܶàÎÊÌ⣬Ö÷Òª±íÏÖΪ£º
node_modules ÒÀÀµÎÊÌâ
npm ²¢Ã»Óкܺõؽâ¾öÄ£¿éÒÀÀµ³åÍ»µÄÎÊÌ⣨¹ØÓÚ npm ´¦ÀíÄ£¿éÒÀÀµ³åÍ»µÄ·½Ê½¿ÉÔĶÁ£º
http://www.alloyteam.com/2016/03/master-npm/
µ«ÊÇÔÚ RN ÖÐÕâ¸öÇé¿ö»á±äµÃ¸ü¼Ó¸´ÔÓ£¬RN pack °üµÄÂß¼»áĬÈÏʹÓõÚÒ»¼¶Ä¿Â¼ÏµÄÄ£¿é£¬Ò²¾ÍÊÇ˵Èç¹ûÒ»¸öÄ£¿é
A£¬ÔÚµÚÒ»¼¶Ä¿Â¼Ï°²×°Á˰汾 A@1£¬µ«ÊÇÁíÍâÒ»¸öÄ£¿é B ÒÀÀµÁËÄ£¿é A@2£¬ÄÇôÔÚÄ£¿é B µÄ node_modules
Ï»ᰲװģ¿é A@2£¬µ«ÊÇ RN pack ³öÀ´µÄ JS Bundle ÖÐÖ»»á´æÔÚ A@1¡£
ÒòΪ QRN ÖнøÐÐÁË¿ò¼Ü JS ºÍÒµÎñ JS µÄ²ð·Ö£¬¶øÍ¬Ò»¸öÄ£¿éÖ»»áÔÚ¿ò¼Ü JS ºÍÒµÎñ JS ÖдæÔÚÒ»·Ý£¬Õâ¾Íµ¼ÖÂÁËÎÒÃÇÐèÒª±£Ö¤²»Í¬µÄÒµÎñ
pack JS Bundle ʱһ¼¶Ä¿Â¼Ï QRN ÒÀÀµµÄÄ£¿é¶¼ÊÇÖ¸¶¨°æ±¾¡£Ä¿Ç°£¬ÎÒÃÇ×Ô¶¨ÒåÁËÒ»Ì×¹¤¾ßÀ´½â¾öÕâ¸öÎÊÌâ¡£
React Native ¿ª·¢
RN µÄ¿ª·¢Ê¹ÓÃÁË´óÁ¿µÄǰ¶Ë¹¤¾ß£¬Èç JSX¡¢Redux µÈ¡£Òò´Ë£¬Ò»¸öǰ¶Ë¿ª·¢ÕßÀ´¿ª·¢ RN ʱ»á¸üÈÝÒ×ÉÏÊÖ£»µ«ÊÇ
RN µÄ¿ª·¢ÓÖÐèÒªÁ˽â Native µÄ²¼¾Ö£¬Õâµã Native ¿ª·¢Õß»á¸ü¼ÓÊìϤ¡£
ĿǰÔÚ Qunar ÄÚ²¿£¬Í¬Ê±ÓÐǰ¶ËÍÅ¶ÓºÍ Native ¿ª·¢ÍŶÓÔÚ½øÐÐ QRN Ò³ÃæµÄ¿ª·¢¡£ÔÚÎÒÃÇ¿´À´£¬RN
µÄ¿ª·¢ÊÇÒ»¸öȫеĿª·¢·½Ê½£¬Æä¼È²»ÊÇ´«Í³µÄǰ¶Ë¿ª·¢£¬Ò²²»Äܼòµ¥µØµ±×÷ iOS¡¢Android ¿ª·¢¡£Ïà±ÈÓÚǰ¶Ë¼¸Ê®ÄêµÄ¿ª·¢ÀúÊ·£¬RN
´Ó¹«²¼µ½ÏÖÔÚ»¹²»×ã 2 Ä꣬¹ØÓÚ RN »¹È±·¦×ã¹»¶àµÄÓÅ»¯¼¼ÇÉÓë×ÊÁÏ£¬ØÑ·¦µÄ¸ß¼¶ RN ¿ª·¢Õ߯äʵҲ×è°ÁË
RN µÄÍÆ¹ãÓëÓ¦Ó㬺ÃÔÚÕâ¸öÎÊÌâÏàÐÅ»áËæ×ÅÔ½À´Ô½¶àµÄÈËѧϰ RN ¿ª·¢µÃµ½¸ÄÉÆ¡£
Ò»Ö±±ä»¯µÄ¹Ù·½°æ±¾
RN Ŀǰ»¹´¦Óڱ仯ÖУ¬Ã¿Á½ÖÜ»áÓÐÒ»¸öа汾£¬´Ó 2017 Ä꿪ʼ£¬RN µÄ·¢²¼ÖÜÆÚ±äΪÿ¸öÔÂÒ»´Î£¬Öð½¥Ç÷ÓÚÎȶ¨¡£°æ±¾µÄƵ·±¸üÐÂÌØ±ðÊDz¼¾Ö
CSS Layout µÄ¸Ä¶¯£¬»áµ¼ÖÂÏÖÓÐµÄ Flex ²¼¾Ö³öÏÖÎÊÌâ¡£ÏëÏóһϣ¬Ò»¸ö Web Ò³ÃæÔÚÒ»Äê¼äÒªÒÀ´Î¼æÈÝ
IE6 ÖÁ IE10£¬ÕâÏÔÈ»ÊÇÐèÒª¿ª·¢Õß»¨·Ñ´óÁ¿¾«Á¦À´´¦Àí°æ±¾Éý¼¶Ëù´øÀ´µÄ¼æÈÝÎÊÌâ¡£
QRN ÔÚ 2016 Äê 10 ÔÂ×öÁËÒ»´Î¹Ù·½°æ±¾µÄͬ²½£¬½«»ùÓÚµÄ RN °æ±¾´Ó 0.20.0 Éý¼¶µ½ÁË
0.33.0£¬Éý¼¶Ö®ºóÐèÒªÒµÎñ½øÐÐËùÓÐÒ³ÃæµÄ»Ø¹é£¬Ö÷ÒªÊÇÒªÒµÎñ½â¾ö Flex ²¼¾ÖµÄ±ä»¯¿ÉÄܵ¼ÖÂÒ³ÃæÏÔʾ´íÎóµÄÎÊÌâ¡£Éý¼¶µÄÖ÷ҪĿµÄÊÇΪÁ˽â¾ö
0.20.0 ÖÐ RN ´æÔÚµÄ Bug£¬Õâ¸ö¹ý³ÌÖз¢ÏÖÉý¼¶ Base µÄ RN °æ±¾»á¸øÒµÎñÔì³É¸ºµ££¬ºóÐø
QRN »áÆÀ¹Àͬ²½ RN а汾µÄÊÕÒæºÍ·çÏÕÀ´¾ö¶¨ÊÇ·ñÉý¼¶ Base µÄ RN °æ±¾¡£
дÔÚ×îºó
Qunar Ò»Ö±ÒÔÀ´¾ÍÊÇÒÔ¼¼ÊõÇý¶¯µÄ¹«Ë¾£¬¸ÒÓÚ³¢ÊÔ¸÷ÖÖеļ¼Êõ£¬ÔÚ RN ¿ªÔ´ºóÎÒÃÇÍŶӾÍÒ»Ö±ÔÚ̽ÌÖ
App ÖÐÒýÈë RN µÄ¿ÉÐÐÐÔ¡£Ä¿Ç° QRN ÒѾÔÚ Qunar ÄÚ²¿´ó¹æÄ£Ó¦Óã¬ÕâÒ²ÑéÖ¤ÁËÎÒÃÇ¶Ô RN
µÄ¿´·¨£ºRN ÍêÈ«¿ÉÒÔʤÈκËÐÄÒµÎñÒ³Ãæ£¬ËäÈ»ºÍ Native µÄÒ³Ãæ»¹´æÔÚ²î¾à£¬µ«ÊÇÓÉÓÚÆäºÜÇ¿µÄ¿É¶¨ÖÆÐÔ£¬Òò´ËDZÁ¦ºÜ´ó¡£Ëæ×ÅÔ½À´Ô½¶à¸üÊìÁ·µÄ
RN ¿ª·¢Õß³öÏÖ£¬RN ±Ø½«ÔÚÒµ½ç³ÉΪһ¸ö·Ç³£ºËÐĵÄÒÆ¶¯¿çƽ̨¿ª·¢·½°¸¡£ºóÐøÎÒÃǽ«°Ñ QRN ×ö³ÉÒ»¸ö
SDK£¬¿ª·Å¸ø´ó¼ÒʹÓã¬Èà RN µÄ¿ª·¢±äµÃ¸ü¼Ó¿ì½Ý¡¢¼òµ¥£¬Î´À´Ò²Ôڼƻ®¿ªÔ´ QRN¡£ |