Penulis Node.js Memperkenalkan Platform JavaScript Aman Deno 1.0

Setelah dua tahun pembangunan disajikan rilis besar pertama Deno 1.0 Memperbarui, sebuah platform untuk eksekusi aplikasi yang berdiri sendiri dalam JavaScript dan TypeScript, yang dapat digunakan untuk membuat penangan yang berjalan di server. Platform ini dikembangkan oleh Ryan Dahl (Ryan Dahl), pencipta Node.js. Seperti Node.js, Deno menggunakan mesin JavaScript V8, yang juga digunakan di browser berbasis Chromium. Pada saat yang sama, Deno bukanlah cabang dari Node.js, tetapi merupakan proyek baru yang dibuat dari awal. Kode proyek didistribusikan oleh di bawah lisensi MIT. Majelis siap untuk Linux, Windows dan macOS.

Nomor versi yang signifikan dikaitkan dengan stabilisasi API di namespace Deno, yang bertanggung jawab atas interaksi aplikasi dengan OS. Antarmuka perangkat lunak yang ada sejauh ini tidak stabil, disembunyikan secara default dan hanya tersedia saat dijalankan dalam mode “--tidak stabil”. Saat versi baru terbentuk, API tersebut secara bertahap akan menjadi stabil. API di namespace global, yang mencakup fungsi umum seperti setTimeout() dan ambil(), sedekat mungkin dengan API browser web konvensional dan dikembangkan sesuai dengan standar Web untuk browser. API yang disediakan oleh Rust, yang digunakan langsung dalam kode platform, serta antarmuka untuk mengembangkan plugin untuk runtime Deno, belum distabilkan dan terus dikembangkan.

Motif utama untuk membuat platform JavaScript baru adalah keinginan untuk menghilangkan kesalahan konseptual, diterima dalam arsitektur Node.js, dan menyediakan lingkungan yang lebih aman bagi pengguna. Untuk meningkatkan keamanan, mesin V8 ditulis dalam Rust, yang menghindari banyak kerentanan yang timbul dari manipulasi memori tingkat rendah, seperti akses setelah bebas, dereferensi penunjuk nol, dan buffer overruns. Platform ini digunakan untuk memproses permintaan dalam mode non-pemblokiran Tokyo, juga ditulis dalam Rust. Tokio memungkinkan Anda membuat aplikasi berkinerja tinggi berdasarkan arsitektur berbasis peristiwa, mendukung multi-threading dan memproses permintaan jaringan dalam mode asinkron.

Utama fitur Deno:

  • Konfigurasi default berorientasi keamanan. Akses file, jaringan, dan akses ke variabel lingkungan dinonaktifkan secara default dan harus diaktifkan secara eksplisit. Aplikasi secara default berjalan di lingkungan sandbox yang terisolasi dan tidak dapat mengakses kemampuan sistem tanpa memberikan izin eksplisit;
  • Dukungan bawaan untuk TypeScript di luar JavaScript. Kompiler TypeScript standar digunakan untuk memeriksa jenis dan menghasilkan JavaScript, yang menghasilkan kinerja yang lebih baik dibandingkan dengan penguraian JavaScript di V8. Di masa depan, kami berencana untuk mempersiapkan penerapan sistem pemeriksaan tipe TypeScript kami sendiri, yang akan meningkatkan kinerja pemrosesan TypeScript secara signifikan;
  • Runtime hadir dalam bentuk satu file executable mandiri (“deno”). Untuk menjalankan aplikasi menggunakan Deno saja sudah cukup unduh untuk platformnya terdapat satu file yang dapat dieksekusi, berukuran sekitar 20 MB, yang tidak memiliki ketergantungan eksternal dan tidak memerlukan instalasi khusus pada sistem. Apalagi deno bukanlah aplikasi monolitik, melainkan kumpulan paket peti di Rust (deno_core, berkarat_v8), yang dapat digunakan secara terpisah;
  • Saat memulai program, serta untuk memuat modul, Anda dapat menggunakan pengalamatan URL. Misalnya untuk menjalankan program Welcome.js, Anda bisa menggunakan perintah “deno https://deno.land/std/examples/welcome.js”. Kode dari sumber daya eksternal diunduh dan disimpan dalam cache di sistem lokal, namun tidak pernah diperbarui secara otomatis (pembaruan mengharuskan aplikasi dijalankan secara eksplisit dengan tanda “--reload”);
  • Pemrosesan permintaan jaringan yang efisien melalui HTTP dalam aplikasi; platform ini dirancang untuk membuat aplikasi jaringan berkinerja tinggi;
  • Kemampuan untuk membuat aplikasi web universal yang dapat dijalankan baik di Deno maupun di browser web biasa;
  • tersedianya kumpulan modul standar, yang penggunaannya tidak memerlukan pengikatan pada dependensi eksternal. Modul dari koleksi standar telah menjalani audit tambahan dan pengujian kompatibilitas;
  • Selain runtime, platform Deno juga bertindak sebagai pengelola paket dan memungkinkan Anda mengakses modul melalui URL di dalam kode. Misalnya untuk memuat modul, Anda dapat menentukan dalam kode “import * as log from “https://deno.land/std/log/mod.ts”. File yang diunduh dari server eksternal melalui URL di-cache. Pengikatan ke versi modul ditentukan dengan menentukan nomor versi di dalam URL, misalnya, “https://unpkg.com/[email dilindungi]/dist/liltest.js";
  • Strukturnya mencakup sistem pemeriksaan ketergantungan terintegrasi (perintah “deno info”) dan utilitas untuk pemformatan kode (deno fmt);
  • Semua skrip aplikasi dapat digabungkan menjadi satu file JavaScript.

Perbedaan dari Node.js:

  • Deno tidak menggunakan manajer paket npm
    dan tidak terikat dengan repositori, modul dialamatkan melalui URL atau jalur file, dan modul itu sendiri dapat ditempatkan di situs web mana pun;
  • Deno tidak menggunakan "package.json" untuk mendefinisikan modul;
  • Perbedaan API, semua tindakan asinkron di Deno mengembalikan janji;
  • Deno memerlukan definisi eksplisit dari semua izin yang diperlukan untuk file, jaringan, dan variabel lingkungan;
  • Semua kesalahan yang tidak diberikan oleh penangan menyebabkan penghentian aplikasi;
  • Deno menggunakan sistem modul ECMAScript dan tidak mendukung require();
  • Server HTTP bawaan Deno ditulis dalam TypeScript dan berjalan di atas soket TCP asli, sedangkan server HTTP Node.js ditulis dalam C dan menyediakan pengikatan untuk JavaScript. Pengembang Deno berfokus pada pengoptimalan seluruh lapisan soket TCP dan menyediakan antarmuka yang lebih umum. Deno HTTP Server memberikan throughput yang lebih rendah tetapi menjamin latensi rendah yang dapat diprediksi. Misalnya saja dalam pengujian, aplikasi sederhana berbasis server HTTP Deno mampu memproses 25 ribu permintaan per detik dengan latensi maksimum 1.3 milidetik. Di Node.js, aplikasi serupa memproses 34 ribu permintaan per detik, tetapi latensi berkisar antara 2 dan 300 milidetik.
  • Deno tidak kompatibel dengan paket untuk Node.js (NPM), tetapi sedang dikembangkan secara terpisah antar lapisan untuk kompatibilitas dengan pustaka Node.js standar, seiring berkembangnya, semakin banyak aplikasi yang ditulis untuk Node.js yang dapat dijalankan di Deno.
  • Sumber: opennet.ru

Tambah komentar