Apa yang baru di mesin JavaScript V8 Google Versi 7

Beta V8 Versi 7.4 sekarang tersedia, dengan potensi untuk memperluas jejak mesin ke platform seperti Apple iOS. V8 adalah JavaScript open source Google dan mesin WebAssembly untuk browser Chrome. Ini adalah pokok di browser Chrome dan runtime JavaScript Node.js.

Tempat mengunduh Google V8

Anda dapat mengunduh versi produksi Google V8 dari repo Chromium V8.

Versi masa depan: Apa yang baru di V8 Versi 7.4

Dengan versi produksi yang jatuh tempo pada April 2019, Google V8 beta 7.4 memiliki fitur-fitur baru berikut:

  • JIT-less V8, di mana eksekusi JavaScript didukung tanpa mengalokasikan memori yang dapat dieksekusi pada waktu proses. Ini dapat memungkinkan perluasan V8 ke platform seperti Apple iOS, TV pintar, dan konsol game. Konfigurasi default V8 mengandalkan kemampuan untuk mengalokasikan dan mengubah memori yang dapat dieksekusi pada waktu proses. Namun ada situasi di mana dapat diinginkan untuk menjalankan mesin tanpa mengalokasikan memori yang dapat dieksekusi, seperti platform yang melarang akses tulis ke memori yang tidak dapat dijalankan untuk aplikasi nonprivil, termasuk iOS. Selain itu, pelarangan penulisan ke memori yang dapat dieksekusi mengurangi permukaan serangan aplikasi untuk eksploitasi. Dengan mode tanpa JIT, V8 beralih ke mode hanya-penerjemah untuk JavaScript; WebAssembly saat ini tidak mendukung mode ini. Mode tanpa JIT memang disertai dengan penalti performa.
  • WebAssembly Threads / Atomics sekarang diaktifkan di OS non-Android. Langkah ini membuka kunci penggunaan banyak inti melalui WebAssembly, memungkinkan penggunaan baru yang banyak komputasi di web.
  • Untuk meningkatkan kinerja, Versi 7.4 melewatkan adaptasi argumen dalam beberapa kasus, mengurangi overhead panggilan hingga 60 persen.
  • Kinerja telah ditingkatkan untuk memanggil pengakses asli, yaitu pengakses DOM.
  • Kinerja preparser ditingkatkan dengan menghapus deduplikasi yang melibatkan nama properti. Selain itu, masalah kinerja telah diperbaiki yang melibatkan dekode UTF-8 kustom yang digunakan oleh aliran sumber.
  • Untuk mengurangi overhead memori, dukungan telah diterapkan untuk pembilasan bytecode yang dikompilasi dari fungsi selama pengumpulan sampah jika belum dijalankan baru-baru ini.
  • Untuk mendukung bidang kelas privat, Pengembang dapat menandai bidang sebagai privat dengan mengawali dengan #awalan.

Tempat mengunduh V8 7.4 beta

Anda dapat mengunduh V8 beta dari repo Chromium Git Google.

Versi sekarang: Apa yang baru di V8 Versi 7.3

Fitur baru di V8 7.3 meliputi:

  • The --async-stack-tracesflag diaktifkan secara default.
  • Pelacakan tumpukan asinkron tanpa biaya membuatnya lebih mudah untuk mendiagnosis masalah dalam produksi dengan kode asinkron; yang stackproperti biasanya dikirim ke file log dan jasa sekarang menyediakan wawasan yang lebih dalam masalah.
  • A lebih cepat await, dengan --harmony-await-optimizationbendera diaktifkan secara default. Ini adalah prasyarat untuk --async-stack-traces.
  • Startup yang lebih cepat untuk WebAssembly melalui pengoptimalan. Untuk sebagian besar beban kerja, kompilasi ditingkatkan sebesar 15 persen menjadi 25 persen.
  • Fitur JavaScript seperti fromEntries(), API untuk melakukan kebalikan dari Object.entries, dan  String.prototype.Matchall, API untuk membuatnya lebih mudah untuk menerapkan ekspresi reguler global atau melekat ke string dan mengulang melalui semua kecocokan.

Versi sekarang: Yang baru di Google V8 Versi 7.2

Versi 7.2 V8 Januari 2019 meningkatkan penguraian JavaScript, format biner WebAssembly, dan memori.

Untuk meningkatkan kecepatan penguraian, V8 Versi 7.2 menyertakan apa yang disebut Google sebagai pengurai JavaScript tercepat yang pernah ada di mesin, menghasilkan pemuatan halaman yang lebih cepat dan halaman yang lebih responsif. Sejak V8 Versi 7.0, kecepatan penguraian desktop telah meningkat sekitar 30 persen, kata Google.

Untuk memori, built-in tertanam yang menghemat memori dengan berbagi kode yang dihasilkan di beberapa isolat sekarang didukung dan diaktifkan secara default pada arsitektur IA32.

Untuk WebAssembly, V8 7.2 memiliki penyempurnaan pembuatan kode, termasuk pengaktifan pemisahan node di penjadwal kompiler yang mengoptimalkan dan rotasi loop di bagian belakang. Selain itu, cache pembungkus telah ditingkatkan dan pembungkus khusus diperkenalkan untuk mengurangi overhead saat memanggil fungsi matematika JavaScript yang diimpor.

Perubahan desain pada pengalokasi register meningkatkan kinerja untuk pola kode yang akan muncul di rilis selanjutnya. Juga, penangan perangkap dalam Versi 7.2 meningkatkan throughput kode WebAssembly. Mereka diimplementasikan pada Windows, MacOS, dan Linux. Di Chromium, mereka diaktifkan di Linux, diikuti dengan MacO dan Windows saat stabilitas dikonfirmasi. Rencana juga memanggil mereka untuk tersedia di Android.

Fitur baru lainnya di V8 7.2 meliputi:

  • Kinerja elemen penyebaran telah ditingkatkan saat ini terjadi di depan literal array.
  •  Penerapan async/ yang lebih cepat awaitdiaktifkan secara default. Perubahan tersebut dapat digabungkan ke dalam spesifikasi ECMAScript resmi.
  • Pelacakan tumpukan asinkron zero-coast memperkaya stackproperti dengan bingkai panggilan asinkron. Kemampuan ini tersedia di belakang --async-stack-tracesbendera baris perintah.
  • Dukungan untuk bidang kelas publik, yang memperluas sintaks JavaScript untuk penyederhanaan.
  • The ListFormatProposal, untuk lokalisasi format daftar.
  • stringify sekarang mengeluarkan urutan escape untuk pengganti tunggal, membuat keluaran Unicode valid.

Versi sebelumnya: Yang baru di Google V8 Versi 7.1

Versi 7.1 dari V8 November 2018 menampilkan peningkatan dalam memori dan kinerja bersama dengan peningkatan untuk JavaScript dan format biner WebAssembly. Untuk memori, bytecode untuk interpreter sekarang disematkan ke dalam biner, menghemat rata-rata sekitar 200 KB per isolat. Untuk meningkatkan kinerja, analisis melarikan diri di kompiler TurboFan ditingkatkan untuk menangani konteks fungsi lokal untuk fungsi urutan yang lebih tinggi, ketika variabel dari konteks sekitarnya melarikan diri ke penutupan lokal. Dengan analisis escape, penggantian skalar dilakukan untuk objek lokal ke unit pengoptimalan.

Fitur baru lainnya di V8 Versi 7.1:

  • Untuk JavaScript, RelativeTimeformatAPI yang ditampilkan dalam peningkatan memungkinkan pemformatan yang dilokalkan dalam waktu relatif, seperti "kemarin," tanpa mengorbankan kinerja. Selain itu, versi 7.1 mendukung GlobalThisproposal, menyediakan mekanisme universal untuk mengakses objek global bahkan dalam fungsi atau modul yang ketat, apa pun platformnya.
  • Untuk format bytecode WebAssembly, postMessagedidukung untuk modul. Perilaku ini mencakup pekerja web dan tidak diperluas ke skenario lintas proses.

Versi sebelumnya: Yang baru di Google V8 Versi 7.0

V8 Versi 7.0 Oktober 2018 menampilkan utas WebAssembly, yang menyediakan komputasi paralel yang primitif. Untuk menggunakan utas di browser Chrome, yang menggunakan V8, pengembang dapat mengaktifkannya melalui chrome://flags/#enable-webassembly-threadsatau mendaftar untuk Uji Coba Asal, untuk bereksperimen dengan fitur web baru. WebAssembly, alias Wasm, memungkinkan kompilasi kode yang ditulis dalam berbagai bahasa untuk dijalankan di web.

Fitur baru lainnya di V8 7.0 meliputi:

  • Untuk JavaScript, descriptionproperti ditambahkan ke prototype, memberikan cara yang lebih ergonomis untuk mengakses deskripsi. Juga, Array.prototype.sortmenjadi stabil di Versi 7.0.
  • Ekstensi bawaan tertanam, yang menghemat memori dengan berbagi kode yang dihasilkan di beberapa isolasi. V8 Versi 6.9 mendukung built-in pada arsitektur X64 sementara Versi 7.0 mengembangkannya ke platform yang tersisa kecuali IA-32.

Versi sebelumnya: Yang baru di Google V8 Versi 6.9

V8 Versi 6.9 September 2018 berfokus pada peningkatan memori dan kinerja untuk mesin JavaScript Google.

Untuk penghematan memori, Versi 6.9 menawarkan built-in tertanam untuk komputer berbasis x64. Ini adalah fungsi yang dibagikan oleh semua isolat dan disematkan ke biner itu sendiri alih-alih disalin ke heap JavaScript, sehingga hanya ada satu kali di memori terlepas dari berapa banyak isolat yang berjalan. Desainer V8 telah melihat rata-rata pengurangan 9 persen dari ukuran tumpukan di 10.000 situs web teratas pada komputer x64. Dukungan untuk platform lain akan menyusul dalam rilis selanjutnya.

Untuk kinerja, V8 Versi 6.9 mengurangi waktu jeda pengumpulan sampah Mark-Compact dengan meningkatkan WeakMappemrosesan. Penandaan serentak dan inkremental sekarang dapat diproses WeakMaps. Sebelumnya, pekerjaan ini dilakukan di jeda atom terakhir dari pengumpulan sampah Mark-Compact. Pengumpulan sampah sekarang juga melakukan lebih banyak pekerjaan secara paralel untuk menurunkan waktu jeda.

Untuk performa, DataViewmetode telah diterapkan ulang di V8 Torque, menghemat biaya panggilan ke C ++ dibandingkan dengan implementasi runtime sebelumnya. Selain itu, panggilan ke DataViewmetode sekarang disisipkan saat mengompilasi JavaScript ke dalam compiler pengoptimalan TurboFan. Ini memberikan kinerja puncak yang lebih baik untuk kode panas.

V8 Versi 6.9 juga menyertakan Liftoff, kompiler dasar untuk format kode portabel WebAssembly. Ini diaktifkan secara default dan dimaksudkan untuk mengurangi waktu startup untuk aplikasi berbasis WebAssembly dengan membuat kode secepat mungkin. Kualitas kode itu sendiri adalah prioritas kedua untuk Liftoff, dengan kode pada akhirnya akan dikompilasi ulang oleh kompiler TurboFan V8.

Liftoff dikembangkan untuk mengatasi masalah di mana bagian belakang proses kompilasi untuk TurboFan menghabiskan banyak waktu dan memori, mengurangi kinerja kode WebAssembly. Liftoff menghindari overhead waktu dan memori dari representasi perantara, menghasilkan kode mesin dalam satu lintasan melalui bytecode dari fungsi WebAssembly. Liftoff dan Turbofan memberi V8 dua tingkatan kompilasi, dengan Liftoff sebagai kompiler dasar untuk pengaktifan cepat dan TurboFan memberikan pengoptimalan untuk kinerja.

Google juga berencana untuk lebih meningkatkan waktu startup, memotong konsumsi memori, dan memberikan manfaat Liftoff kepada lebih banyak pengguna. Paket ini melibatkan port ke prosesor ARM, untuk digunakan pada perangkat seluler. Liftoff saat ini hanya berfungsi pada platform Intel 32- dan 64-bit. Perbaikan lain yang sedang dipertimbangkan termasuk:

  • Menerapkan peningkatan dinamis untuk perangkat seluler, untuk mengakomodasi volume memori yang lebih rendah pada perangkat ini. Eksperimen sedang dilanjutkan dengan kombinasi kompilasi lambat dengan Liftoff dan peningkatan dinamis fungsi panas di TurboFan.
  • Meningkatkan performa pembuatan kode Liftoff dan juga meningkatkan kode yang dihasilkan.

Versi sebelumnya: Yang baru di V8 Versi 6.8

Google V8 Versi 6.8, dirilis pada Juli 2018, berfokus pada kinerja dan penggunaan memori.

Performa telah ditingkatkan dengan peningkatan yang merusak susunan. Kompiler pengoptimalan belum menghasilkan kode ideal untuk penghancuran array, sehingga pembuat V8 memblokir analisis pelarian untuk menghilangkan alokasi sementara, yang membuat penghancuran array dengan array sementara secepat urutan penugasan.

Implementasi baru Object.assign meningkatkan performa, melalui implementasi jalur cepat untuk JavaScript.

Performa untuk TypedArrays telah ditingkatkan saat penyortiran dilakukan menggunakan fungsi perbandingan.

Fitur baru lainnya di V8 Versi 6.8 meliputi:

  • Untuk meningkatkan kecepatan eksekusi dengan format kode portabel WebAssembly, pengembang dapat menggunakan pemeriksaan batas berbasis perangkap, pengoptimalan manajemen memori, pada platform Linux x64.
  • Konsumsi memori SFI ( SharedFunctionInfo) telah dikurangi, melalui kompresi dan penghapusan bidang yang tidak perlu.
  • Selain itu, untuk meningkatkan kemampuan memori, ketergantungan pada SFI telah diputus sehingga SFI tidak perlu tetap hidup, yang menyebabkan risiko kebocoran memori.

Versi sebelumnya: Apa yang baru di V8 Versi 6.7

Mesin JavaScript V8 Google mendapatkan peningkatan untuk fitur bahasa dan keamanan dengan cabang Versi 6.7, yang sekarang dalam rilis produksi.

Mesin V8 6.7 memiliki BigIntdukungan yang diaktifkan secara default. Diharapkan dalam versi ECMAScript yang akan datang,  BigIntsberfungsi sebagai numerik primitif dalam JavaScript untuk mewakili bilangan bulat dengan presisi arbitrer. Dengan BigInt, dimungkinkan untuk melakukan aritmatika integer tanpa meluap. BigIntdapat berfungsi sebagai dasar BigDecimalimplementasi akhirnya , berguna untuk merepresentasikan jumlah uang dengan ketepatan desimal.

Juga ditampilkan di V8 6.7 adalah lebih banyak mitigasi untuk kerentanan saluran samping, dimaksudkan untuk mencegah kebocoran informasi ke kode yang tidak tepercaya untuk JavaScript dan WebAssembly.

Versi sebelumnya: Apa yang baru di V8 Versi 6.6

Versi 6.6 dari mesin JavaScript V8 Google berfokus pada fitur bahasa JavaScript dan kemampuan cache kode.

Untuk JavaScript, Function.prototype.toString()kembalikan potongan persis teks kode sumber, termasuk spasi dan komentar. V8 Versi 6.6 juga mengimplementasikan String.prototype.trimStart() and String.prototype.trimEnd(). Kemampuan ini telah tersedia melalui nonstandar trimLeft()dan trimRight()metode, yang tetap sebagai alias dari metode baru untuk mengaktifkan kompatibilitas ke belakang.

Selain itu, simbol pemisah baris dan paragraf dapat digunakan dalam literal string, sehingga cocok dengan JSON. Sebelumnya, ini telah diperlakukan sebagai terminator baris dalam string literal dan penggunaannya mengakibatkan pengecualian SyntaxError.

The Array.prototype.values Metode memberikan array antarmuka iterasi sama dengan ECMAScript 2015 Map dan Setkoleksi. Ini dapat berinteraksi lebih dengan keys,values atau entriesdengan memanggil metode yang sama-nama. Perubahan ini mungkin tidak kompatibel dengan kode JavaScript yang ada; pengembang yang menemukan perilaku aneh atau rusak di situs web dapat mencoba menonaktifkan fitur ini melalui chrome://flags/#enable-array-prototype-values.