Apa yang Baru di Node 12

Node 12 baru - baru ini dirilis, diberi nama kode Erbium , yang dukungan jangka panjangnya (LTS) akan berlangsung dari Oktober 2019 hingga April 2022.


Versi baru memiliki banyak barang dan perbaikan untuk runtime. Selain itu, mengingat bahwa di bawah kap V8, node juga akan menerima semua peningkatan mesin.




Dukungan import/export


Node memasuki fase 3 dalam perjalanan ke Modul ECMAScript . Awalnya, fitur ini hanya tersedia dengan --experimental-modules . Pada saat Node beralih ke LTS, direncanakan untuk menghapus kebutuhan untuk menggunakan flag ini.


Sintaks menggunakan import/export menjadi lebih disukai ketika bekerja dengan modul untuk pengembang js sejak standardisasi di ES6, dan tim di belakang Node bekerja dengan rajin pada dukungan asli. Fitur ini tersedia secara eksperimental dengan Node 8.0 dari fase 0. Rilis saat ini adalah langkah besar ke arah itu. Sebagian besar browser populer sudah mendukung fitur ini dengan <script type="module"> .


Dari fase 3, akan ada dukungan untuk tiga opsi import dari model ES:


 //    import module from 'module' //   import { namedExport } from 'module' //     import * as module from 'module' 

Modul vanilla hanya dapat diekspor dengan cara default:


 import module from 'cjs-library' 

Anda dapat menggunakan import() untuk memuat di runtime. import() mengembalikan Promise dan bekerja dengan model ES dan perpustakaan CommonJS.


V8


Node 12 pada awalnya akan berjalan pada V8 7.4 dan pada akhirnya akan ditingkatkan menjadi 7.6. Tim V8 setuju untuk menyediakan ABI (Application Binary Interface). Peningkatan penting dalam V8 7.4 adalah peningkatan kinerja untuk eksekusi JavaScript yang lebih cepat, manajemen memori yang lebih baik, dan dukungan sintaksis ECMAScript yang ditingkatkan.



Jejak tumpukan async


Mari kita lihat kode ini:


 async function testAsyncStacktrace() { await killme(); return 42; } async function killme() { await Promise.resolve(); throw new Error('#Feelsbadman'); } testAsyncStacktrace().catch(error => console.log(error.stack)); 

Pada versi yang lebih lama, Anda akan mendapatkan sesuatu seperti ini:


 Error: #Feelsbadman at killme (test.js:8:11) at process._tickCallback (internal/process/next_tick.js:68:7) at Function.Module.runMain (internal/modules/cjs/loader.js:721:11) at startup (internal/bootstrap/node.js:228:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:576:3) 

Seperti yang Anda lihat, pesan itu tidak menyebutkan testAsyncStacktrace . Dan sekarang --async-stack-traces diaktifkan secara default, dan log akan terlihat seperti ini:


 Error: #Feelsbadman at killme (test.js:8:11) at async testAsyncStacktrace (test.js:2:5) 

Panggilan dipercepat ketika jumlah argumen tidak cocok


Dalam JavaScript, dapat diterima untuk memanggil fungsi dengan argumen yang lebih sedikit / lebih (mis., Lewati lebih sedikit atau lebih parameter formal yang dideklarasikan). Dalam kasus pertama itu adalah di bawah aplikasi , dan di kedua itu di atas aplikasi . Dalam hal jumlah argumen yang tidak mencukupi, parameter akan tidak undefined , sedangkan dalam kasus sejumlah besar parameter mereka diabaikan begitu saja.


Namun, fungsi JavaScript masih bisa mendapatkan parameter aktual menggunakan arguments , objek parameter rest , atau bahkan menggunakan Function.prototype.arguments yang tidak standar dalam fungsi mode ceroboh . Akibatnya, mesin JavaScript harus menyediakan cara untuk mendapatkan parameter yang sebenarnya. Dalam V8, ini dilakukan dengan menggunakan teknik adaptasi argumen . Sayangnya, metode tersebut mempengaruhi kinerja.


Dalam beberapa skenario, V8 benar-benar melewatkan adaptasi argumen , mengurangi overhead panggilan hingga 60%.



Detail dapat ditemukan dalam dokumen .


Parsing yang Dipercepat


Di Chrome, skrip yang cukup besar diuraikan streaming dalam utas pekerja selama pemuatannya. V8 7.4 memperbaiki masalah dengan kinerja decoding UTF-8, yang menyebabkan peningkatan 8%.



Setiap penurunan dalam diagram mewakili salah satu peningkatan kinerja dalam penganalisis aliran.


Lebih baik await


Bersama dengan --async-stack-traces , flag --harmony-await-optimization sekarang diaktifkan secara default. Detail di sini .


Bidang kelas pribadi


Kemampuan untuk menggunakan bidang pribadi di V8 telah dimigrasi ke node. Kolom seperti itu tidak tersedia di luar kelas. Untuk membuat ini, Anda harus menentukan # sebelum variabel.


 class HelloThere { #hidden = 'Hidden'; get hidden() { return this.#hidden; } set hidden(txt) { this.#hidden = txt; } hi() { console.log(`Hello, ${this.#hidden}`); } } 

Ketika Anda mencoba mengakses #hidden dari luar, Anda mendapatkan kesalahan sintaksis.


 const hello = new HelloThere(); hello.#hidden = 'Visible'; // -> SyntaxError console.log(hello.#hidden); // -> SyntaxError 

Mulai cepat


Node 12 akan menggunakan cache untuk pustaka built-in sebelum membangun dan menanamkan sebagai binari. Karena penggunaan cache ini di utas utama, waktu mulai akan berkurang 30%.


TLS dan Keamanan


Noda sekarang mendukung TLS 1.3, yang menawarkan peningkatan keamanan dan mengurangi latensi. TLS 1.3 telah banyak mengubah protokol dan secara aktif mengintegrasikan ke dalam jaringan. Pengenalan TLS 1.3 akan meningkatkan kerahasiaan data pengguna, serta mempercepat pemrosesan permintaan dengan mengurangi waktu jabat tangan di HTTPS. Selain itu, TLS 1.0 dan 1.1 dinonaktifkan secara default, dan metode yang sudah usang dihapus dari crypto .


Ukuran pinggul dinamis


Sebelumnya, ukuran tumpukan V8 default 700MB (sistem 32-bit) atau 1400MB (sistem 64-bit) digunakan. Sekarang node akan menentukan ukuran tumpukan berdasarkan memori yang tersedia untuk mengoptimalkan sumber daya yang digunakan mesin.


Kemampuan untuk membuang pinggul


Node 12 menyediakan kemampuan untuk menimbun tumpukan, membuatnya lebih mudah untuk mendeteksi masalah memori. Detail dapat ditemukan di sini dan di sini .


Laporan diagnostik eksperimental


Noda menawarkan alat yang lebih kuat untuk mendiagnosis masalah (kinerja, penggunaan CPU, memori, kerusakan, dll.) Di dalam aplikasi, menyediakan fitur eksperimental untuk laporan.


Perbaikan saat bekerja dengan modul asli


Node 12 melanjutkan tren penyederhanaan pekerjaan dengan N-API . Versi ini telah meningkatkan dukungan, khususnya ketika bekerja dengan utas pekerja.


Kesimpulan


Node 12 memiliki banyak perbaikan. CHANGELOG lengkap dapat dilihat di Github dan di situs itu sendiri.

Source: https://habr.com/ru/post/id450292/


All Articles