Jurutera dari Cloudflare, Mozilla, Facebook dan Bloomberg
Untuk ujian
BinaryAST sudah tersedia di
Apabila memproses JavaScript, sejumlah besar masa dibelanjakan dalam fasa pemuatan dan penghuraian kod. Memandangkan volum JavaScript yang dimuat turun di banyak tapak popular adalah hampir 10 MB (contohnya, untuk LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), pemprosesan awal JavaScript memperkenalkan kelewatan yang ketara. Peringkat penghuraian pada bahagian penyemak imbas juga diperlahankan kerana ketidakupayaan untuk membina AST sepenuhnya dengan cepat semasa kod dimuatkan (pelayar perlu menunggu blok kod untuk menyelesaikan pemuatan, seperti penghujung fungsi, untuk mendapatkan maklumat yang tiada untuk menghuraikan elemen semasa).
Mereka cuba menyelesaikan sebahagian masalah dengan mengedarkan kod dalam bentuk yang diminimumkan dan dimampatkan, serta dengan menyimpan kod bait yang dihasilkan oleh penyemak imbas. Di tapak moden, kod dikemas kini agak kerap, jadi caching hanya menyelesaikan sebahagian masalah. WebAssembly boleh menjadi penyelesaian, tetapi ia memerlukan penaipan eksplisit dalam kod dan tidak sesuai untuk mempercepatkan pemprosesan kod JavaScript sedia ada.
Pilihan lain ialah untuk menghantar kod bait tersusun sedia dan bukannya skrip JavaScript, tetapi pembangun enjin penyemak imbas menentangnya kerana kod bait pihak ketiga sukar untuk disahkan, pemprosesan langsungnya boleh membawa kepada stratifikasi Web, risiko keselamatan tambahan timbul dan pembangunan format bytecode universal diperlukan.
BinaryAST membolehkan anda menyesuaikan diri dengan model pembangunan dan penghantaran kod semasa anda tanpa membuat bytecode baharu atau menukar bahasa JavaScript. Saiz data dalam format BinaryAST adalah setanding dengan kod JavaScript diperkecil yang dimampatkan, dan kelajuan pemprosesan dengan menghapuskan fasa penghuraian teks sumber meningkat dengan ketara. Selain itu, format membenarkan kompilasi kepada bytecode apabila BinaryAST dimuatkan, tanpa menunggu semua data selesai. Di samping itu, penghuraian pada bahagian pelayan membolehkan anda mengecualikan fungsi yang tidak digunakan dan kod yang tidak diperlukan daripada perwakilan BinaryAST yang dikembalikan, yang, apabila menghuraikan pada bahagian pelayar, membuang masa untuk menghurai dan menghantar trafik yang tidak diperlukan.
Ciri BinaryAST juga ialah keupayaan untuk memulihkan JavaScript yang boleh dibaca yang tidak betul-betul sama dengan versi asal, tetapi semantik setara dan termasuk nama pembolehubah dan fungsi yang sama (BinaryAST menyimpan nama, tetapi tidak menyimpan maklumat tentang kedudukan dalam kod, pemformatan dan ulasan). Sisi lain syiling ialah kemunculan vektor serangan baharu, tetapi menurut pembangun, ia jauh lebih kecil dan lebih terkawal berbanding apabila menggunakan alternatif, seperti pengedaran kod bait.
Ujian kod facebook.com menunjukkan bahawa penghuraian JavaScript menggunakan 10-15% sumber CPU dan penghuraian mengambil lebih banyak masa daripada menjana kod bait dan penjanaan kod awal untuk JIT. Dalam enjin SpiderMonkey, masa untuk membina AST sepenuhnya mengambil masa 500-800 ms, dan penggunaan BinaryAST telah mengurangkan angka ini sebanyak 70-90%.
Secara umum, untuk kebanyakan bunga api web, apabila menggunakan BinaryAST, masa penghuraian JavaScript dikurangkan sebanyak 3-10% dalam mod tanpa pengoptimuman dan sebanyak 90-97% apabila mod mengabaikan fungsi yang tidak digunakan didayakan.
Apabila menjalankan set ujian JavaScript 1.2 MB, menggunakan BinaryAST membenarkan masa permulaan untuk mempercepatkan daripada 338 kepada 314 ms pada sistem desktop (Intel i7) dan dari 2019 hingga 1455 ms pada peranti mudah alih (HTC One M8).
Sumber: opennet.ru