Ua wehe ʻo Facebook i ka mīkini Hermes JavaScript

ʻEnekini JavaScript māmā ma Facebook Hamakua, i hoʻopaʻa ʻia no ka holo ʻana i nā noi e pili ana i ka framework Hoʻopaʻi i nā'ōiwi ma ka Android anuu. Kākoʻo Hermes kūkulu ʻia i loko ma React Native e hoʻomaka ana me ka hoʻokuʻu ʻana i kēia lā 0.60.2. Hoʻolālā ʻia ka papahana e hoʻoponopono i nā pilikia me nā manawa hoʻomaka lōʻihi no nā noi JavaScript maoli a me ka hoʻohana waiwai nui. Code kākau ʻia e ma C++ a puʻunaue ʻia ma lalo o ka laikini MIT.

Ma waena o nā pono o ka hoʻohana ʻana iā Hermes, aia kahi hōʻemi i ka manawa hoʻomaka o ka noi, ka emi ʻana o ka hoʻohana ʻana i ka hoʻomanaʻo a me ka hōʻemi ʻana i ka nui o ka noi. I ka hoʻohana ʻana iā V8, ʻo nā ʻanuʻu ʻoi aku ka nui o ka manawa ʻo nā pae o ka parsing i ke kumu kumu a hoʻohui ʻia ma ka lele. Lawe ʻo Hermes i kēia mau ʻanuʻu i ke kahua kūkulu a ʻae i nā noi e hāʻawi ʻia ma ke ʻano o ka bytecode paʻa a maikaʻi.

No ka hoʻokō pololei ʻana i ka noi, hoʻohana ʻia kahi mīkini virtual i hoʻomohala ʻia i loko o ka papahana me ka ʻohi ʻōpala SemiSpace, e hāʻawi ana i nā poloka wale nō e like me ka mea e pono ai (On-demand), kākoʻo i ka neʻe ʻana a me ka defragmentation o nā poloka, e hoʻihoʻi i ka hoʻomanaʻo manuahi i ka ʻōnaehana hana, me ka ʻole o ka manawa. ka nānā ʻana i nā mea i loko o ka puʻu holoʻokoʻa.

Hoʻokaʻawale ʻia ka hoʻoponopono JavaScript i kekahi mau pae. ʻO ka mea mua, ua paʻi ʻia nā kikokikona kumu a ua hana ʻia kahi hōʻike waena o ke code (Hermes IR), ma muli o ka hōʻike S.S.A. (Haʻina hoʻokahi Static). Ma hope aʻe, ua hana ʻia ka hōʻike waena ma kahi mea hoʻoponopono, e pili ana i nā ʻenehana loiloi static i mua e hoʻololi i ke code waena mua i kahi hōʻike waena ʻoi aku ka maikaʻi me ka mālama ʻana i nā semantics kumu o ka papahana. I ka pae hope loa, hana ʻia ka bytecode no ka mīkini virtual i hoʻopaʻa ʻia.

I loko o ka ʻenekini kākoʻo ʻia e ʻāpana o ka ECMAScript 2015 JavaScript maʻamau (ʻo ka pahuhopu nui ke kākoʻo piha iā ia) a hāʻawi i ka hoʻohālikelike me ka hapa nui o nā noi React Native. Ua hoʻoholo ʻo Hermes ʻaʻole e kākoʻo i ka hoʻokō kūloko o eval(), me nā ʻōlelo, noʻonoʻo (Reflect and Proxy), Intl API a me kekahi mau hae ma RegExp. I mea e hiki ai iā Hermes i kahi noi React Native, e hoʻohui wale i ke koho "enableHermes: ʻoiaʻiʻo" i ka papahana. Hiki ke kūkulu ʻia ʻo Hermes ma ke ʻano CLI, e ʻae iā ʻoe e hoʻokō i nā faila JavaScript arbitrary mai ka laina kauoha. Loaʻa kahi mode compilation palaualelo no ka debugging, kahi e hiki ai iā ʻoe ke hōʻuluʻulu ʻole i ka JavaScript i kēlā me kēia manawa i ka wā o ka hoʻomohala ʻana, akā e hana i ka bytecode ma ka lele ma luna o ka hāmeʻa.

I ka manawa like, ʻaʻole hoʻolālā ʻo Facebook e hoʻololi iā Hermes no Node.js a me nā hoʻonā ʻē aʻe, e kālele ana i nā polokalamu kelepona wale nō (ʻo ka hui ʻana o AOT ma kahi o JIT ka mea maikaʻi loa i ka pōʻaiapili o nā ʻōnaehana kelepona, ka mea i kaupalena ʻia ka RAM a me ka lohi Flash). ʻO ka hoʻāʻo hana mua i mālama ʻia e nā limahana Microsoft hōʻike ʻiai ka wā e hoʻohana ai iā Hermes, loaʻa ka noi Microsoft Office no ka Android no ka hoʻohana ʻana i 1.1 kekona. ma hope o ka hoʻomaka ʻana a hoʻopau i ka 21.5MB o RAM, ʻoiai i ka wā e hoʻohana ai i ka mīkini V8 he 1.4 kekona e hoʻomaka ai a ʻo ka hoʻohana ʻana i ka hoʻomanaʻo he 30MB.

Pākuʻi: Facebook hoolaha nā hopena hoʻāʻo ponoʻī. I ka hoʻohana ʻana iā Hermes me ka noi MatterMost, ua emi ka manawa e hoʻomaka ai i ka hana (TTI, Time To Interact) mai 4.30 a 2.01 kekona, ua hoʻemi ʻia ka nui o ka pūʻulu APK mai 41 a 22 MB, a me ka hoʻohana ʻana i ka hoʻomanaʻo mai 185 a 136. MB.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka