Ryan Dahl, pencipta Node.js. Laporannya menimbulkan sensasi, dia mengangkat banyak masalah mendesak dan mengangkat hype yang keras, sehingga hampir tidak ada orang yang terhubung dengan pemrograman server yang acuh tak acuh. Dalam diskusinya tentang backend, programmer dibagi menjadi dua kubu: beberapa mempertahankan Node.js, yang lain meramalkan kematian yang cepat untuknya.
Sedikit lebih dari dua tahun telah berlalu sejak pidato Ryan, dan di IT ini adalah era keseluruhan, di mana tidak semuanya bisa berubah, lalu banyak. Mari mengingat laporan ini dan mencoba melihat apa yang berubah sejak saat itu, siapa yang benar.
Sedikit tentang Node.js
Suatu ketika, ketika Ryan mengupload foto ke Flickr , dia melihat hal yang tidak biasa - sebuah indikator yang secara grafis menunjukkan proses mengupload foto ke server. Saat ini tidak mungkin untuk mengejutkan siapa pun dengan bilah kemajuan, tetapi antarmuka seperti itu belum tersebar luas dan, biasanya, pengguna menonton gif dengan jam pasir dangkal yang baru saja berputar dan tidak memberikan informasi apa pun tentang sisa waktu untuk penyelesaian operasi.
Kemudian dia berpikir tentang fakta bahwa web server harus dapat memproses beberapa tugas pada waktu yang bersamaan. Saat itu, Ryan sedang mengembangkan modul untuk Nginx, di mana semuanya bekerja secara asinkron, dan sampai pada kesimpulan bahwa cara paling efisien untuk mengimplementasikan sistem berbasis peristiwa, yang menjadi platform Node.js.
Awalnya kerangka kerja ini disebut web.js, tetapi penggunaannya ternyata jauh lebih luas daripada server web biasa, dan oleh karena itu platform tersebut diganti namanya menjadi Node.js. Proyek yang sudah selesai dipresentasikan oleh Ryan di JSConf 2009, dan pertunjukan selama 45 menit tersebut mendapat tepuk tangan meriah:
Sistem tersebut dengan cepat diterima dan menjadi sangat populer. Selain asynchrony, Node memiliki banyak keuntungan lain, Node dapat digunakan sebagai lapisan abstraksi lain pada backend yang ada dan tidak menulis ulang sisi server dari awal. Kecepatan kerja yang tinggi dan skalabilitas yang baik memungkinkan untuk membangun sistem dengan beban tinggi, misalnya, aplikasi untuk pengoperasian toko rantai, yang tidak jatuh bahkan selama musim penjualan, ketika waktu henti sistem dapat menghilangkan bagian yang sangat signifikan dari pendapatan tahunan.
Ada beberapa masalah, khususnya tidak mudah menemukan developer dengan background yang sesuai. Alasan paling umum adalah: "I HATE NODE.JS !!! 1111oneone", merekaberasal dari fakta bahwa kesederhanaan bahasa yang tampak menarik pemrogram yang sebelumnya tidak melakukan pengembangan untuk server. Bagian depan biasanya ditulis dalam JS, dan tugas yang sangat berbeda diselesaikan di sana. Pengembang di Java juga menghadapi masalah, karena mereka memiliki prasangka: "Dalam bahasa yang disebut Java Script, saya dapat memprogram tanpa masalah!" Ternyata programmer yang bekerja di platform .Net mengatasi tugas pemrograman di JS di bawah Node lebih mudah daripada yang lain. Selain itu, pada saat pengembangan Node, pekerja dotnet mengalami beberapa kesulitan dengan permintaan, dan programmer JS untuk backend dibayar dengan baik.
Ryan sendiri, beberapa saat setelah selesainya pengembangan, sekitar tahun 2012-13, menjadi tertarik dengan bahasa Go dan lama menjauh dari segala sesuatu yang berhubungan dengan Node.js, karena bahasa ini sangat cocok dengannya dalam hal kemampuan dan kecepatan, dan kemudian dia menjadi tertarik pada jaringan saraf ...
Kritik terhadap Node.js oleh penciptanya
Sekitar enam bulan sebelum konferensi JSConf 2018, Ryan Dahl memutuskan untuk mencoba mengerjakan gagasannya, hampir 10 tahun setelah pembuatannya. Ini bukan untuk mengatakan bahwa dia senang dengan apa yang dia lihat. Tidak diragukan lagi, proyek ini telah berkembang pesat, tetapi selama pengembangan Node.js Ryan terlalu terpaku pada penyelesaian masalah I / O, sehingga dia melakukan beberapa kesalahan, yang kemudian berubah menjadi masalah sistem. Karena platform telah menjadi sangat populer, sudah terlambat untuk mengubah sesuatu secara global tanpa merusak semua ketergantungan dan kompatibilitas.
Ryan sangat kritis terhadap semua perangkat lunak di masa lalu, tidak hanya Node.js. Pada tahun 2011, dia mengadakan acara kecil "kebencian lima menit" di Google+. Jejaring sosial itu sendiri telah lama ditutup, tetapi Internet mengingat semuanya. Terjemahan kata-katanya bisa dibaca di sini: Saya benci hampir semua perangkat lunak . Dan setahun sebelum berbicara pada tahun 2018, dia mengatakan bahwa: "Untuk server, saya tidak dapat membayangkan bahasa lain selain Go . " Ke depan, dia mulai menulis di Go, "node.js killer", tetapi kemudian beralih ke Rust.
Oleh karena itu, nada kritis pidatonya di tahun 2018 tidak mengejutkan siapa pun, dan tampilan segar pembuat platform kembali mengangkat relevansi beberapa masalah.
10 Hal yang Saya Menyesal Tentang Node.js
Mari kita ingat poin-poin utama yang dipertimbangkan di dalamnya, dan kemudian bandingkan dengan keadaan saat ini.
satu.
Lack of Promises yang dijatuhkan di awal pengembangan.
2.
Masalah keamanan. Aplikasi Node.js mendapatkan akses ke disk lokal, jaringan, dan secara umum ke seluruh sistem sekaligus.
3.
Sistem build yang kompleks dan ketinggalan zaman yang telah lama ditinggalkan semua orang.
empat.
Package.json yang tidak perlu merepotkan.
lima.
Semantik platform tidak kompatibel dengan browser
6.
Repositori terpusat untuk modul.
7.
Perintah untuk menghubungkan modul tidak memerlukan indikasi wajib dari jenis file, yang dapat menyebabkan kebingungan.
8.
Menggunakan index.js, dengan analogi dengan index.html, membuatnya lebih sulit untuk memuat modul dan tidak lagi diperlukan setelah mendukung package.json.
Lucunya dalam pembahasan pidato tersebut, berulang kali disebutkan bahwa jumlah penyesalan dalam laporan tersebut tidak sesuai dengan jumlah penyesalan pada judul, namun harus kita perhatikan bahwa Ryan sangat khawatir, ia terasa terguncang. di awal pidato. Selain itu, ia berulang kali mencatat dalam wawancaranya bahwa ia adalah seorang programmer, bukan orang media, menyesali setiap postingannya di blok “menarik ratusan komentar” dan “sekarang kami perlu lebih berhati-hati dalam mengungkapkan pendapat kami”, karena masyarakat sering memahami perkataannya terlalu literal.
Pengumuman Deno
Setelah membuat daftar kerugian Node.js, Ryan mempresentasikan proyek runtime JS-nya sendiri di server, secara berurutan mencantumkan keunggulannya di atas Node:
1.
Sandbox aman untuk mengeksekusi kode, yang hanya memberikan hak istimewa yang diperlukan.
2.
Penggunaan modul yang disederhanakan, memuat dengan tautan langsung dan menyimpan di cache lokal, yang tidak akan diperbarui hingga perintah khusus diberikan.
3.
Dukungan TypeScript penuh.
empat.
Satu-satunya file yang dapat dieksekusi tanpa tautan yang tidak perlu
5.
Deno memungkinkan Anda untuk mengeksekusi kode secara native dalam berbagai bahasa, tergantung mana yang lebih nyaman untuk tugas tertentu.
6.
Aplikasi mogok saat Kesalahan Tidak Tertangkap, operasi asinkron akan mengembalikan Janji, kompatibilitas browser yang hebat.
Selain di atas, Deno akan menggunakan Modul ES, yang kemudian tidak didukung oleh Node.
Apa yang telah berubah di Node.js
Laporan tersebut keluar secara ambigu, itulah sebabnya mengapa hal itu menimbulkan desas-desus di komunitas. Di satu sisi, pernyataan itu benar. Di sisi lain, tidak semuanya begitu penting sehingga Anda perlu membuang semuanya dan menulis lingkungan baru.
Mungkin penyebutan masalah keamanan yang paling adil. Node.js tidak memiliki kotak pasir yang akan menutup server dari aplikasi yang sedang berjalan. Masalah ini belum terselesaikan sepenuhnya. Akses ke jaringan dapat ditutup oleh firewall, akses ke disk dan izin lainnya dapat dibatasi dengan meluncurkan dari wadah, tetapi ini adalah solusi pihak ketiga yang mungkin tidak nyaman di mana-mana.
Masalah dengan eksekusi kode asinkron yang disebutkan dalam laporan kurang lebih telah terpecahkan saat ini. Tentu saja, akan lebih baik jika Ryan tidak menghapus Promises pada tahun 2010, karena yakin bahwa Promises terlalu rumit, tetapi sekarang banyak pustaka sistem sudah menyediakan fungsionalitas ini, belum lagi yang pihak ketiga. Sekarang dimungkinkan untuk menjalankan skrip secara paralel dengan pekerja, perusahaan besar seperti Microsoft dan Alibaba sedang mengembangkan versi Node mereka dengan multithreading.
GYP tidak pernah dihilangkan; warisan ini akan tetap ada di Node untuk waktu yang lama. Tautan url yang kompatibel dengan browser tidak lagi menjadi pertanyaan, tetapi untuk beberapa waktu sekarang Node telah mendukung modul ES.
Resolusi dependensi memang rumit dan bekerja secara berbeda dari pada browser, tetapi berfungsi, yang paling penting, meskipun bukan tanpa beberapa masalah. Dan kemunculan mekanisme package-lock.json meminimalkannya.
NPM telah berkembang pesat sejak 2012. Meskipun, perlu dicatat, evolusi itu menyakitkan dan didorong oleh masalah seperti bantalan kiri yang membuat gigi tegang . Tetapi paket tidak hilang begitu saja, ada beberapa tingkat audit keamanan dan kemampuan untuk menginstal paket dari sumber yang berbeda. Meskipun sejauh ini tidak ada yang menghalangi pengembang untuk mengunggah kode yang benar ke github, dan kode dengan exploit di npm.
Masalah dengan index.js terlihat lebih dibuat-buat daripada sebenarnya, seperti halnya kurangnya ekstensi saat menghubungkan modul. Orang mendapat kesan bahwa dia buru-buru mengemukakan setengah dari argumen. Ngomong-ngomong, itu lebih terinci di akhir artikel.
Harus diakui bahwa hampir semua masalah ini telah diselesaikan, dan sangat berhasil. Dahl sendiri menarik diri dari pengembangan proyek, sejak 2012 dia tidak ada hubungannya dengan Node, dan laporannya terlihat agak subjektif, di mana kekurangan platform dibesar-besarkan demi gagasannya sendiri. Jadi, pidato ini lebih terlihat seperti iklan untuk perkembangannya, daripada mengekspos Node.js.
Demi keadilan, perlu dicatat bahwa pengembangan aktif Node sangat dibatasi oleh perusahaan, di mana terdapat sejumlah besar kode warisan sehingga terlalu mahal untuk dihilangkan. Ini telah lama menyebabkan masalah serius ketika Linux perlu diperbarui, dan semua modul tidak dapat dirakit untuk sistem baru, dan cepat atau lambat Anda harus menulis ulang sejumlah besar kode, menghabiskan banyak waktu dan uang untuk itu. Perusahaan besar dapat mencurahkan sumber dayanya untuk ini, tetapi proyek OpenSource penghobi kecil akan ditinggalkan jika pengembang tidak punya waktu untuk memperbaruinya.
Namun demikian, Node.js memiliki komunitas yang sangat besar, dan ini membantu pemrogram untuk menangani banyak masalah, meskipun terkadang pengembang tidak menetapkan prioritas seperti yang diinginkan komunitas, dan oleh karena itu kemajuan proyek tidak merata. Ada kemungkinan bahwa cepat atau lambat Node akhirnya akan mengalami kekurangan asli yang dijelaskan Ryan, dan mustahil untuk menyelesaikannya. Tapi ini bukan pertama kalinya bagi TI ketika perlu mengubah sesuatu secara global. Misalnya, Flash berhasil dimakamkan tanpa banyak kerumitan.
Pengembangan Deno
Tak lama setelah pembicaraan, komunitas dengan cepat menemukan anagram Node-Deno. Bahkan ada lelucon bahwa suatu saat nanti proyek bernama Selesai akan ditulis. Tapi lelucon samping, dari mana perkembangan Deno datang?
Dalam pembicaraan tersebut, Ryan dengan jujur mengatakan bahwa Deno saat ini merupakan prototipe eksperimental dan tidak ditawarkan sebagai alternatif dari Node.
Tapi sejak itu sudah lebih dari dua tahun berlalu, pada musim semi tahun lalu, akhirnya ada rilis dengan angka 1.0.0.
Seperti disebutkan di atas, proyek dimulai di Go, tetapi kemudian didesain ulang di Rust. Meskipun proyek berhenti melambat, seperti pada awalnya, masih tidak menunjukkan keuntungan dalam kecepatan. Bekerja dengan TypeScript menjadi lebih cepat, karena pengoptimalan yang dilakukan oleh tim, karena pada saat presentasi, peluncuran penerjemah TS memakan waktu satu detik penuh. Ini diselesaikan, seperti yang disarankan Ryan dalam laporan 2018-nya, menggunakan snapshot mesin.
Platform ini sama sekali tidak kompatibel dengan Node dan dianggap bukan sebagai pengganti mutlak, tetapi sebagai alternatif, proyek penelitian, eksperimen yang mendorong pengembang untuk mengembangkan cara lain untuk mengembangkan solusi semacam itu.
Deno saat ini terdiri dari bagian-bagian berikut: pembungkus Typecript / Javascript di atas mesin V8 , yang merupakan kotak pasir, menyediakan antarmuka antara lapisan TS / JS dan Rust Backend (backend yang memiliki akses ke sistem file). Multithreading disediakan menggunakan Tokio , runtime asinkron Rust yang bertanggung jawab untuk membuat dan menangani peristiwa, menggunakan konstruksi "Rust Future", yang serupa dengan "Promise" di JavaScript.
Lingkungan secara inheren aman, tanpa hak akses secara default. Untuk memberikan hak istimewa yang diperlukan, Anda perlu memulai platform dengan opsi baris perintah tertentu. Solusinya ambigu. Cepat atau lambat, pengembang mungkin bosan menulis opsi tanpa akhir dalam skrip, karena dalam proyek besar akan ada banyak opsi dan "--allow-all" akan diluncurkan secara default.
Jika perlu, Deno memungkinkan Anda memanggil program dalam bahasa yang sesuai untuk melakukan beberapa tugas komputasi tertentu.
***
Saat ini, versi rilisnya telah dirilis di bawah nomor 1.7. Tapi kami masih belum mendengar perusahaan besar membuang Node.js untuk mendukung Deno. Kami bahkan membuat gambar di pasar untuk node.js
Proyek Deno berkembang dengan antusias, sementara Ryan sendiri sekarang bekerja di Google dan terlibat dalam pengaturan tugas untuk insinyur yang terlibat dalam jaringan saraf dan pembelajaran mendalam.
Seseorang berpikir bahwa Dahl mengembangkan kompleks proyek pertama yang diambil ketika Node.js, yang sama sekali tidak terduga bagi Ryan, segera mendapatkan pengakuan dan dengan sangat cepat mendapatkan popularitas. Tapi, kemungkinan besar, dia adalah salah satu dari orang-orang yang tidak bisa duduk tanpa ide-ide baru dan mentolerir ketidaksempurnaan dalam penemuannya sendiri.
Meskipun Dahl mulai mengerjakan Deno jauh sebelum berbicara di konferensi pada tahun 2018, tema aslinya sangat berbeda. Dia berencana untuk memberikan ceramah tentang pembelajaran mesin, yang telah dia lakukan selama beberapa tahun terakhir. Tetapi dia tidak punya waktu untuk mempersiapkan dan topik pidatonya telah dihapus secara harfiah beberapa hari sebelum konferensi. Dan karena dia memahami bobotnya di komunitas dan bagaimana penonton mengharapkan dia tampil, dia harus bekerja sangat keras dalam satu atau dua hari untuk menemukan topik baru yang layak yang memenuhi harapan penonton.
Jadi mungkin dia bahkan tidak berniat untuk memproklamirkan "pembunuh Node.js", tetapi hanya terburu-buru untuk menyiapkan laporan baru. Meskipun dia berhasil menimbulkan cukup banyak kebisingan, mungkin lebih dari topik pembelajaran yang dalam.