ºìÁªLinuxÃÅ»§
Linux°ïÖú

Android¿ª·¢ÕßÓ¦¸ÃʹÓÃFlatBuffersÌæ´úJSON?

·¢²¼Ê±¼ä:2016-07-11 09:17:06À´Ô´:ºìÁª×÷Õß:Sednol
À´Ô´£ºinfoQ

Äã¿ÉÄÜ»áÎÊ£¬¼ÈÈ»ÎÒÃÇÒѾ­Óкܱê×¼µÄJSONÒÔ¼°×ª»»¿â±ÈÈçGSONºÍJackson£¬ÎªÊ²Ã´»¹ÒªÊ¹ÓÃÐµĹ¤¾ßÄØ£¿

²»·ÁÏÈÊÔÒ»ÏÂFlatBuffers£¬È»ºóÄã¾Í»á·¢ÏÖËü±ÈJSON¿ìµÃ¶à¡£

FlatBuffersÊÇʲô£¿

FlatBuffersÊÇÒ»¸ö¸ßЧµÄ¿çƽ̨ÐòÁл¯Àà¿â£¬¿ÉÒÔÔÚC++¡¢C#¡¢C¡¢Go¡¢Java¡¢JavaScript¡¢PHPºÍPythonÖÐʹÓá£ÊÇGoogle¿ª·¢µÄ£¬ÊÇΪÁËÓ¦ÓÃÔÚÓÎÏ·¿ª·¢£¬ÒÔ¼°ÆäËû×¢ÖØÐÔÄܵÄÓ¦ÓÃÉÏ¡£

ΪʲôҪʹÓÃFlatBuffers£¿

²»ÐèÒª½âÎö/²ð°ü¾Í¿ÉÒÔ·ÃÎÊÐòÁл¯Êý¾Ý -- FlatBuffersÓëÆäËû¿â²»Í¬Ö®´¦¾ÍÔÚÓÚËüʹÓöþ½øÖÆ»º³åÎļþÀ´±íʾ²ã´ÎÊý¾Ý£¬ÕâÑùËüÃǾͿÉÒÔ±»Ö±½Ó·ÃÎʶø²»Ðè½âÎöÓë²ð°ü£¬Í¬Ê±»¹Ö§³ÖÊý¾Ý½á¹¹½ø»¯£¨Ç°½ø¡¢ºóÍ˼æÈÝÐÔ£©¡£

ÄÚ´æ¸ßЧËٶȿì -- ·ÃÎÊÊý¾ÝʱֻÐèÒª·ÃÎÊÄÚ´æÖеĻº³åÇø¡£Ëü²»ÐèÒª¶àÓàµÄÄÚ´æ·ÖÅ䣨ÖÁÉÙÔÚC++ÊÇÕâÑù£¬ÆäËûÓïÑÔÖпÉÄÜ»áÓб䶯£©¡£FlatBuffers»¹ÊʺÏÅäºÏ mmap»òÊý¾ÝÁ÷ʹÓã¬Ö»ÐèÒª»º³åÇøµÄÒ»²¿·Ö´æ´¢ÔÚÄÚ´æÖС£·ÃÎÊʱËٶȽӽüÔ­½á¹¹·ÃÎÊ£¬Ö»ÓÐÒ»µãÑÓ³Ù£¨Ò»ÖÖÐ麯Êý±ívtable£©£¬ÊÇΪÁËÔÊÐí¸ñʽÉý¼¶ÒÔ ¼°¿ÉÑ¡×ֶΡ£FlatBuffersÊʺÏÄÇЩ»¨·ÑÁË´óÁ¿Ê±¼äºÍ¿Õ¼ä£¨ÄÚ´æ·ÖÅ䣩À´·ÃÎʺ͹¹½¨ÐòÁл¯Êý¾ÝµÄÏîÄ¿£¬±ÈÈçÓÎÏ·ÒÔ¼°ÆäËû¶Ô±íÏÖÃô¸ÐµÄÓ¦Ó᣿ÉÒԲΠ¿¼ÕâÀïµÄ»ù×¼¡£

Áé»î -- ÓÉÓÚÓпÉÑ¡×ֶΣ¬Äã²»µ«ÓкÜÇ¿µÄÉý¼¶ºÍ»ØÍ˼æÈÝÐÔ£¨¶ÔÓÚÀúÊ·ÓƾõÄÓÎÏ·ÓÈÆäÖØÒª£¬²»ÓÃΪÁËÿ¸ö°æ±¾Éý¼¶ËùÓÐÊý¾Ý£©£¬ÔÚÑ¡ÔñÒª´æ´¢ÄÄЩÊý¾ÝÒÔ¼°Éè¼ÆÊý¾Ý½á¹¹Ê±Ò²ºÜ×ÔÓÉ¡£

ÇáÁ¿µÄcode footprint -- FlatBuffersÖ»ÐèÒªºÜÉÙÁ¿µÄÉú³É´úÂ룬ÒÔ¼°Ò»¸ö±íʾ×îСÒÀÀµµÄºÜСµÄÍ·Îļþ£¬ºÜÈÝÒ×¼¯³É¡£Ï¸½ÚÉÏ¿ÉÒÔ¿´ÉÏÃæµÄ»ù×¼Ò³¡£

Ç¿ÀàÐÍ -- ±àÒëʱ±¨´í£¬¶ø²»ÐèÒª×Ô¼ºÐ´Öظ´µÄÈÝÒ׳ö´íµÄÔËÐÐʱ¼ì²é¡£Ëü¿ÉÒÔ×Ô¶¯Éú³ÉÓÐÓõĴúÂë¡£

ʹÓ÷½±ã -- Éú³ÉµÄC++´úÂëÔÊÐí¾«¼ò·ÃÎÊÓë¹¹½¨´úÂë¡£»¹ÓпÉÑ¡µÄÓÃÓÚʵÏÖͼ±í½âÎö¡¢ÀàËÆJSONµÄÔËÐÐʱ×Ö·û´®Õ¹Ê¾µÈ¹¦Äܵķ½·¨¡££¨ºóÕß±ÈJSON½âÎö¿â¸ü¿ì£¬ÄÚ´æЧÂʸü¸ß£©

´úÂë¿çƽ̨ÇÒûÓÐÒÀÀµ -- C++´úÂë¿ÉÒÔÔËÐÐÔÚÈκνü´úµÄgcc/clangºÍVS2010ÉÏ¡£Í¬Ê±»¹ÓÐÓÃÓÚ²âÊԺͷ¶ÀýµÄ¹¹½¨Îļþ£¨AndroidÖÐ.mkÎļþ£¬ÆäËûƽ̨ÊÇcmakeÎļþ£©¡£

¶¼ÓÐ˭ʹÓÃFlatBuffers?

BobbleApp£¬Ó¡¶ÈµÚÒ»ÌùͼApp¡£ÎÒÃÇÔÚBobbleAppÖÐʹÓÃFlatBuffersºóAppµÄÐÔÄÜÃ÷ÏÔÔöÇ¿¡£

Cocos2d-x£¬µÚÒ»¿ªÔ´Òƶ¯ÓÎÏ·ÒýÇ棬ʹÓÃFlatBuffersÀ´ÐòÁл¯ËùÓеÄÓÎÏ·Êý¾Ý¡£

FacebookʹÓÃFlatBuffersÔÚAndroid AppÖнøÐпͻ§¶Ë·þÎñ¶ËµÄ¹µÍ¨¡£ËûÃÇдÁËһƪÎÄÕÂÀ´ÃèÊöFlatBuffersÊÇÈçºÎ¼ÓËÙ¼ÓÔØÄÚÈݵġ£

GoogleµÄFun Propulsion LabsÔÚËûÃÇËùÓеĿâºÍÓÎÏ·ÖдóÁ¿Ê¹ÓÃFlatBuffers¡£

AppÐÔÄÜÓжà´óÌá¸ß£¿

½âÎöËÙ¶È ½âÎöÒ»¸ö20KBµÄJSONÁ÷£¨Õâ²î²»¶àÊÇBobbleAppµÄ·µ»Ø´óС£©ÐèÒª35ms£¬³¬¹ýÁËUIˢмä¸ôÒ²¾ÍÊÇ16.6ms¡£Èç¹û½âÎöJSONµÄ»°£¬ÎÒÃǾÍÔÚ»¬¶¯Ê±¾Í»áÒòΪҪ´Ó´ÅÅ̼ÓÔØ»º´æ¶øµ¼ÖµôÖ¡£¨ÊÓ¾õÉϵĿ¨¶Ù£©¡£

½âÎöÆ÷³õʼ»¯ Ò»¸öJSON½âÎöÆ÷ÐèÒªÏȹ¹½¨×Ö¶ÎÓ³ÉäÔÙ½øÐнâÎö£¬Õâ»á»¨100msµ½200ms£¬ºÜÃ÷ÏÔµÄÍÏ»ºAppÆô¶¯Ê±¼ä¡£

À¬»ø»ØÊÕ ÔÚ½âÎöJSONʱ´´½¨Á˺ܶàС¶ÔÏó£¬ÔÚÎÒÃǵÄÊÔÑéÖУ¬½âÎö20kbµÄJSONÁ÷ʱ£¬Òª·ÖÅä´óÔ¼100kbµÄ˲ʱ´æ´¢£¬¶ÔJavaÄÚ´æ»ØÊÕÔì³ÉºÜ´óѹÁ¦¡£

ÎÒ³¢ÊÔʹÓÃFlatBuffersºÍJSON½âÎö4mbµÄJSONÎļþ¡£

FlatBuffers»¨ÁË1-5ms£¬JSON»¨ÁË´óÔ¼2000ms¡£ÔÚʹÓÃFlatBuffersÆÚ¼äAndroid AppÖÐûÓÐGC£¬¶øÔÚʹÓÃJSONʱ·¢ÉúÁ˺ܶà´ÎGC¡£ÔÚʹÓÃJSONʱUIÍêÈ«¿¨×¡£¬ËùÒÔÕæʵʹÓÃʱֻÄÜÔÚºǫ́Ï߳̽øÐнâÎö¡£

ÈçºÎʹÓÃFlatBufferÄØ£¿

ÎÒÔÚÎÒµÄGitHubÖÐдÁËÒ»¸öʾÀý£¬ÀïÃæÊÖ°ÑÊÖ½ÌÄãÈçºÎʹÓÃFlatBuffer¡£

Ô­ÎÄÁ´½Ó:https://medium.freecodecamp.com/why-consider-flatbuffer-over-json-2e4aa8d4ed07
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ