Firefox 70 akan hadir dengan juru bahasa Javascript yang ditingkatkan

Firefox 70

Sudah menjadi rahasia umum bahwa aplikasi web modern menjalankan lebih banyak kode JavaScript dari beberapa tahun yang lalu. Meskipun penyusun dengan cepat mengikuti tren dan membuat JavaScript menjadi efisien, bagi Mozilla, solusi harus diterapkan untuk menangani beban kerja ini dengan lebih baik.

Untuk melakukan ini, Mozilla telah mengembangkan dan menambahkan penerjemah bytecode baru JavaScript ke mesin render JavaScript-nya yang terpasang pada Firefox 70. Dengan Firefox 70 tersedia Oktober mendatang, Mozilla mengumumkan manajemen kode JavaScript yang lebih baik dengan menggunakan penerjemah kode baru yang ditambahkan ke mesin JavaScript-nya.

Untuk mencapai tujuan ini, Mozilla menjelaskan itu Di mesin JavaScript modern, setiap fungsi awalnya dijalankan dalam penerjemah kode.

Fungsi yang disebut lot dikompilasi menjadi kode mesin asli. Ini disebut kompilasi atau kompilasi JIT dengan cepat. Mengenai Firefox juga menyertakan penerjemah kode JavaScript yang ditulis dalam C ++ dan berbagai tingkat kompilasi JIT.

Pertama, kami memiliki kompiler JIT dasar yang mengkompilasi setiap pernyataan bytecode langsung ke dalam bagian kecil kode mesin menggunakan cache inline untuk kinerja dan pengumpulan informasi untuk kompiler JIT yang disebut IonMonkey atau Ion.

Pada gilirannya, kompiler IonMonkey menggunakan pengoptimalan lanjutan untuk menghasilkan kode cepat untuk opsi kritis.

Perlu dicatat bahwa ketika fungsi yang sudah dikompilasi dipanggil dengan tipe argumen baru, kode dalam fungsi tersebut dapat "tidak dioptimalkan" dan dihapus. Dalam hal ini, eksekusi berlanjut dalam kode dasar hingga Ion berikutnya terbentuk.

Meskipun proses menafsirkan kode JavaScript sejauh ini telah berhasil dengan baik, tim di Firefox menjelaskan bahwa ia mengalami beberapa masalah dengan yang pertama bagian terdiri dari penerjemah C ++ dan kompiler JIT dasar.

Firefox 70

Faktanya, beberapa aplikasi web modern seperti Google Docs atau Gmail menjalankan begitu banyak JavaScript sehingga kompiler dasar dan bahkan kompiler JIT mereka bisa menghabiskan waktu lama untuk mencoba mengumpulkan ribuan fungsi.

Selain itu, penerjemah C ++ sangat lambat dan tidak mengumpulkan informasi jenis, sehingga menunda kompilasi dasar. Salah satu solusinya adalah menariknya dari utas, tetapi itu akan menjadi risiko kinerja.

Untuk mengatasi masalah ini, orang-orang di Mozilla berkomentar bahwa:

Interpreter dasar berada di antara interpreter C ++ dan kompiler JIT dasar dan berisi elemen dari kedua level.

Menjalankan semua pernyataan bytecode dengan loop interpreter tetap (seperti interpreter C ++), dan menggunakan teknik cache inline untuk meningkatkan performa dan mengumpulkan informasi jenis (seperti yang dilakukan JIT dasar).

Menghasilkan penerjemah bukanlah ide baru. Tetapi tim Firefox menunjukkan di sini bahwa mereka telah menemukan cara baru untuk melakukan ini dengan menggunakan kembali sebagian besar kode kompiler JIT dasar. Kompiler JIT dasar adalah model JIT, yang berarti bahwa setiap instruksi kode perantara dikompilasi menjadi urutan instruksi mesin yang secara substansial tetap yang kemudian disarankan dalam loop interpretasi.

Juga, sejak itu Pengembang Firefox menginginkan penerjemah dasar menggunakan cache online yang sama persis dan informasi yang sama seperti JIT, struktur data baru yang disebut JitScript telah ditambahkan.

JitScript berisi semua informasi tipe dan struktur data inline caching yang digunakan oleh interpreter dasar dan compiler JIT.

Dengan implementasi baru ini, data compiler dasar untuk suatu fungsi kini hanya ada dalam kode mesin. Dari sana, semua informasi cache dan data profil telah dipindahkan ke JitScript.

Di sisi lain, karena interpreter dasar dan kompiler JIT identik, banyak kode yang dihasilkan juga dapat dibagikan.

Untuk melakukan ini, kelas dasar yang disebut BaselineCodeGen dibuat dengan 2 kelas turunan lainnya. Kompiler dasar menggunakan BalineCompiler kelas pertama untuk mengkompilasi bytecode skrip ke dalam kode mesin.

Kelas BaselineInterpreterGenerator kedua digunakan untuk menghasilkan kode untuk juru bahasa dasar. Dan dengan kelas BaselineInterpreterGenerator, tim Firefox berhasil membangun interpreter dasar.

sumber: https://hacks.mozilla.org/


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.