Hoʻokumu ʻo Cloudflare, Mozilla a me Facebook i ka BinaryAST e wikiwiki i ka hoʻouka ʻana iā JavaScript

ʻEnekinia mai Cloudflare, Mozilla, Facebook a me Bloomberg manaʻoʻia ano hou binaryAST e wikiwiki i ka lawe ʻana a me ka hana ʻana i ka code JavaScript i ka wā e wehe ai i nā pūnaewele i ka polokalamu kele pūnaewele. Hoʻoneʻe ʻo BinaryAST i ka pae parsing i ka ʻaoʻao kikowaena a hoʻolako i kahi kumulāʻau syntax abstract i hana mua ʻia (AST). I ka loaʻa ʻana o kahi BinaryAST, hiki i ka polokalamu kele ke hele koke i ka pae hoʻohui, me ke kaʻe ʻana i ka parsing i ka code source JavaScript.

No ka hoʻāʻo ʻana hoomakaukauia hoʻokō kuhikuhi i hāʻawi ʻia ma lalo o ka laikini MIT. Hoʻohana ʻia nā ʻāpana Node.js no ka parsing, a kākau ʻia ke code no ka optimization a me ka hanauna AST ma Rust. Kākoʻo ʻaoʻao pūnaewele puni honua
Loaʻa ka BinaryAST ma kūkulu pō Firefox. Hiki ke hoʻohana ʻia ka encoder ma BinaryAST ma ka pae paahana pae hope a no ka hōʻailona hōʻailona o nā pūnaewele waho ma ka ʻaoʻao o kahi proxy a i ʻole ka hoʻouna ʻana i ka ʻike. I kēia manawa, ua hoʻomaka mua ke kaʻina hana o ka standardization o BinaryAST e ka hui hana ECMA TC39, a laila hiki i ka hōpili ke noho pū me nā ʻano hoʻopaʻa maʻiʻo i loaʻa, e like me gzip a me brotli.

Hoʻokumu ʻo Cloudflare, Mozilla a me Facebook i ka BinaryAST e wikiwiki i ka hoʻouka ʻana iā JavaScript

Hoʻokumu ʻo Cloudflare, Mozilla a me Facebook i ka BinaryAST e wikiwiki i ka hoʻouka ʻana iā JavaScript

I ka wā e hoʻoponopono ai i ka JavaScript, nui ka manawa i hoʻopau ʻia i ka hoʻouka ʻana a me ka hoʻopaʻa ʻana o ke code. Ke noʻonoʻo nei ʻo ka nui o ka JavaScript i hoʻoiho ʻia ma nā pūnaewele kaulana he kokoke i 10 MB (no ka laʻana, no LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), ʻo ka hana mua o JavaScript e hoʻolauna i kahi lohi nui. Hoʻolohi ʻia ka pae parsing ma ka ʻaoʻao polokalamu ma muli o ka hiki ʻole ke kūkulu piha i ka AST ma ka lele ʻana i ka hoʻouka ʻia ʻana o ke code (pono ka polokalamu ke kali i nā poloka code e hoʻopau i ka hoʻouka ʻana, e like me ka hopena o nā hana, e loaʻa ai. nalo ka ʻike e hoʻokaʻawale i nā mea o kēia manawa).

Ke ho'āʻo nei lākou e hoʻoponopono hapa i ka pilikia ma ka puʻunaue ʻana i ke code ma kahi ʻano liʻiliʻi a hoʻopaʻa ʻia, a me ka hoʻopaʻa ʻana i ka bytecode i hana ʻia e ka polokalamu kele pūnaewele. Ma nā pūnaewele hou, hoʻonui pinepine ʻia ke code, no laila ʻo ka caching wale nō e hoʻonā i ka pilikia. Hiki i ka WebAssembly ke hoʻonā, akā pono ia e paʻi pololei i ke code a ʻaʻole kūpono ia no ka wikiwiki ʻana i ka hana ʻana o ka code JavaScript.

ʻO kahi koho ʻē aʻe, ʻo ia ka hāʻawi ʻana i ka bytecode i hoʻopili ʻia i mākaukau ma mua o nā palapala JavaScript, akā kūʻē nā mea hoʻomohala ʻenekini pūnaewele no ka mea paʻakikī ke hōʻoia ʻana i ka bytecode ʻaoʻao ʻekolu, hiki i kāna hana pololei ke alakaʻi i ka Web stratification, nā pilikia palekana hou aʻe, a me ka hoʻomohala ʻana o koi ʻia kahi ʻano bytecode āpau.

ʻAe ʻo BinaryAST iā ʻoe e hoʻopili i kāu hoʻomohala code a me ka hoʻohālike hoʻopuka me ka ʻole o ka hana ʻana i ka bytecode hou a i ʻole ka hoʻololi ʻana i ka ʻōlelo JavaScript. Hoʻohālikelike ʻia ka nui o ka ʻikepili i ka format BinaryAST me ka code JavaScript liʻiliʻi i hoʻopaʻa ʻia, a ʻo ka wikiwiki o ka hoʻoiho ʻana ma ka hoʻopau ʻana i ka pae parsing kikokikona kumu e hoʻonui nui ʻia. Eia hou, hiki i ka format ke hoʻohui i ka bytecode e like me ka hoʻouka ʻana o BinaryAST, me ke kali ʻole i ka pau ʻana o ka ʻikepili. Eia kekahi, ʻo ka parsing ma ka ʻaoʻao kikowaena e ʻae iā ʻoe e kāpae i nā hana i hoʻohana ʻole ʻia a me nā code pono ʻole mai ka hōʻike BinaryAST i hoʻihoʻi ʻia, i ka wā e paʻi ai ma ka ʻaoʻao polokalamu, hoʻopau i ka manawa i ka parsing a me ka hoʻouna ʻana i nā kaʻa pono ʻole.

ʻO kahi hiʻohiʻona kūikawā o BinaryAST ʻo ia hoʻi ka hiki ke hoʻihoʻi i ka JavaScript hiki ke heluhelu ʻia ʻaʻole i like like me ka mana mua, akā ua like ka semantically a me nā inoa like o nā mea hoʻololi a me nā hana (BinaryAST mālama i nā inoa, akā ʻaʻole mālama i ka ʻike e pili ana i nā kūlana i loko. ke code, ka hōpili a me nā ʻōlelo). ʻO ka ʻaoʻao ʻē aʻe o ke kālā ka puka ʻana mai o nā vectors hoʻouka hou, akā e like me nā mea hoʻomohala, ʻoi aku ka liʻiliʻi a ʻoi aku ka maʻalahi o ka hoʻohana ʻana i nā mea ʻē aʻe, e like me ka hāʻawi ʻana i ka bytecode.

Ua hōʻike ʻia nā hoʻāʻo o ka code facebook.com e hoʻopau ka JavaScript i ka 10-15% o nā kumuwaiwai CPU a ʻoi aku ka nui o ka manawa ma mua o ka hoʻokumu ʻana i ka bytecode a me ka hoʻokumu code mua no JIT. Ma ka mīkini SpiderMonkey, ʻo ka manawa e kūkulu pono ai i kahi AST e lawe i 500-800 ms, a ʻo ka hoʻohana ʻana iā BinaryAST ua hōʻemi i kēia helu e 70-90%.
Ma keʻano laulā, no ka hapa nui o nā pahu ahi, i ka wā e hoʻohana ai iā BinaryAST, ua hoʻemi ʻia ka manawa parsing JavaScript e 3-10% ma ke ʻano me ka ʻole o ka optimization a me ka 90-97% i ka wā e hiki ai ke ʻano o ka nānā ʻole ʻana i nā hana i hoʻohana ʻole ʻia.
I ka holo ʻana i kahi hoʻāʻo JavaScript 1.2 MB, me ka hoʻohana ʻana iā BinaryAST ua ʻae ka manawa hoʻomaka e wikiwiki mai 338 a 314 ms ma kahi ʻōnaehana papa (Intel i7) a mai 2019 a 1455 ms ma kahi polokalamu kelepona (HTC One M8).

Source: opennet.ru

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