Apa itu Deno dan apakah itu akan menggantikan Node.js?



Selamat siang. Saya mempersembahkan untuk Anda terjemahan artikel โ€œDeno vs. Node.js - Inilah Perbedaan Paling Penting โ€ oleh Louis Petrik.

Apakah Deno Node.js baru? Atau hanya alternatif yang bagus? Pada artikel ini saya akan mencoba menjawab pertanyaan-pertanyaan ini.

Sejarah Deno


Deno dan Node.js adalah cara kerja satu orang - Ryan Dahl.

Dahl telah bekerja di Node.js sejak 2009, tetapi setelah beberapa tahun meninggalkan tim. Pada tahun 2018, ia membuat presentasi, "10 Hal yang Aku Setujui Tentang Node.js." Dalam pembicaraan ini, Dahl memperkenalkan Deno - "mesin" baru untuk JavaScript dan TypeScript.

Fakta yang menyenangkan: "Deno" adalah sebuah diagram "Node."

Haruskah pengembang takut Deno akan menggantikan Node.js dalam waktu dekat?

Dahl sendiri percaya tidak.



Tautan ke video.

Seperti yang dicatat Dahl dalam pidatonya, Deno masih kalah dengan Node.js dalam kelengkapan (stabilitas).

Namun, keduanya adalah runtime kode JS di luar browser, misalnya, di server web. Tetapi hampir tidak ada yang bisa mengatakan bagaimana "hubungan" antara Node.js dan Deno akan berkembang dalam beberapa tahun.

Deno dan Node.js: perangkat internal


Node.js ditulis dalam C ++ dan menggunakan V8 untuk mengeksekusi kode JS. V8 dirancang khusus untuk Google Chrome untuk menjalankan kode JS di browser secepat mungkin. Saat ini, hampir semua browser, termasuk Microsoft Edge, telah beralih ke V8.

Deno juga didasarkan pada V8, tetapi alih-alih C ++, ia menggunakan Rust, bahasa yang tujuannya tidak hanya kinerja yang baik, tidak kalah dengan C ++, tetapi juga keamanan: menghilangkan kesalahan akses memori atau buffer overflows.

Keamanan adalah salah satu kelemahan utama Node.js, karena setelah memulai aplikasi, ia mendapat akses ke sistem file atau jaringan.

Deno mencoba memperbaikinya dengan meminta izin kepada pengguna untuk mengakses.

Contoh yang baik adalah kode TS berikut dari situs web resmi Deno:

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

const s = serve({ port: 8000 })

for await (const req of s) {
	req.respond({ body: 'Hello World\n'})
}

Seperti yang Anda lihat, ini adalah server web yang sangat sederhana yang dimulai seperti ini:

deno run app.ts

Namun, karena Deno tidak diberikan izin untuk mengakses jaringan, kami menerima pesan berikut:



Untuk memberikan akses, kami perlu melakukan yang berikut:

deno run --allow-net app.ts

Sekarang server kami berfungsi. Tetapi aplikasi tidak akan memiliki akses ke sistem file sampai kami mengizinkannya.

Selamat tinggal NPM, hello ES6 import


Masalah keamanan lain untuk aplikasi kita adalah NPM: penggunaan NPM tidak hanya membuat folder besar โ€œnode_modulesโ€, tetapi juga paket yang diinstal yang membuat aplikasi berfungsi secara teoritis dapat berisi kode berbahaya.

Deno tidak menggunakan NPM, sebagai gantinya, perpustakaan diimpor melalui URL, seperti yang ditunjukkan dalam contoh.

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

Perpustakaan dimuat saat pertama kali dijalankan dan di-cache:



Ini mirip dengan cara kami menyalin kode untuk server web kami dan menyimpannya secara terpisah di server atau komputer untuk digunakan kembali. Perpustakaan tidak perlu dimuat ulang.

Objek jendela di luar browser


Jendela adalah objek global di browser yang berisi beberapa fungsi JS yang sangat penting.

Salah satu fitur tersebut adalah fetch. Fecth tidak dapat digunakan di Node.js - ada perpustakaan khusus untuk ini, tetapi di Deno bisa.

Ini disebabkan oleh fakta bahwa Deno memiliki akses ke Window, sebagai berikut dari dokumentasi .

Kode berikut dapat dijalankan di browser dan Deno:

fetch('https://jsonplaceholder.typicode.com/todos/1')
	.then(response => response.json)
	.then(data => console.log(data))

Dukungan TypeScript di luar kotak


Menggunakan TypeScript, tentu saja, adalah masalah selera. Beberapa menyukainya, yang lain tidak. Bagaimanapun, Deno mendukung TypeScript di luar kotak dan, tentu saja, itu juga mendukung JavaScript.

Anda dapat memverifikasi ini dengan menulis kode, menyimpan file sebagai .ts atau .js, dan menjalankannya dengan deno run. Menurut pendapat saya, ini bukan keuntungan yang signifikan, karena dukungan TypeScript dapat dengan mudah ditambahkan ke Node.js.

Terima kasih atas perhatian Anda.

All Articles