Mengenakan asbes longjohns ...
Kemarin judul saya dengan Publikasi Publikasi, Pemrograman Reaktif dengan JavaScript . Itu sebenarnya bukan judul Node.js-centric; bab-bab awal dimaksudkan untuk membahas teori, dan bab-bab selanjutnya membahas praktik. Karena saya tidak benar-benar berpikir itu akan sesuai untuk gagal untuk memberikan pembaca webserver, Node.js tampak jauh pilihan yang jelas. Kasing ditutup sebelum dibuka.
Saya bisa memberikan pandangan yang sangat indah tentang pengalaman saya dengan Node.js. Sebaliknya saya jujur tentang poin baik dan buruk yang saya temui.
Biarkan saya sertakan beberapa kutipan yang relevan di sini:
Peringatan: Node.js dan ekosistemnya panas - cukup panas untuk membakar Anda dengan buruk!
Ketika saya menjadi asisten guru dalam matematika, salah satu saran yang tidak jelas yang saya diberitahu adalah untuk tidak memberi tahu seorang siswa bahwa ada sesuatu yang “mudah.” Alasannya agak jelas dalam retrospeksi: jika Anda memberi tahu orang-orang sesuatu itu mudah, seseorang yang tidak melihat solusi mungkin berakhir dengan perasaan (bahkan lebih) bodoh, karena mereka tidak hanya tidak mendapatkan cara untuk menyelesaikan masalah, tetapi masalahnya mereka terlalu bodoh untuk dipahami adalah hal yang mudah!
Ada gotcha yang tidak hanya mengganggu orang yang datang dari Python / Django, yang segera memuat ulang sumber jika Anda mengubah apa pun. Dengan Node.js, perilaku default adalah bahwa jika Anda melakukan satu perubahan, versi lama akan tetap aktif hingga akhir waktu atau hingga Anda berhenti dan memulai ulang server secara manual. Perilaku yang tidak pantas ini tidak hanya mengganggu Pythonista; itu juga mengganggu pengguna Node.js asli yang menyediakan berbagai solusi. Pertanyaan StackOverflow "Auto-reload file di Node.js", pada saat penulisan ini, memiliki lebih dari 200 upvote dan 19 jawaban; hasil edit mengarahkan pengguna ke skrip pengasuh, simpul-pengawas, dengan beranda di http://tinyurl.com/reactjs-node-supervisor. Masalah ini memberi pengguna baru peluang besar untuk merasa bodoh karena mereka pikir telah memperbaiki masalahnya, tetapi perilaku kereta yang lama benar-benar tidak berubah. Dan mudah untuk melupakan server bouncing; Saya sudah melakukannya berkali-kali. Dan pesan yang ingin saya sampaikan adalah, “Tidak, Anda tidak bodoh karena perilaku Node ini. Saya menggigit Anda; hanya saja para desainer Node.js tidak melihat alasan untuk memberikan perilaku yang sesuai di sini. Cobalah untuk mengatasinya, mungkin mengambil sedikit bantuan dari simpul-supervisor atau solusi lain, tapi tolong jangan pergi dengan perasaan bahwa Anda bodoh. Anda bukan orang yang bermasalah; masalahnya adalah perilaku default Node.js. "
Bagian ini, setelah beberapa perdebatan, ditinggalkan, tepatnya karena saya tidak ingin memberi kesan "Mudah." Saya memotong tangan saya berulang kali sambil menyelesaikan berbagai hal, dan saya tidak ingin meredakan kesulitan dan membuat Anda percaya bahwa membuat Node.js dan ekosistemnya berfungsi dengan baik adalah masalah yang mudah dan jika tidak langsung untuk Anda juga , kamu tidak tahu apa yang kamu lakukan. Jika Anda tidak mengalami kesulitan menjengkelkan menggunakan Node.js, itu luar biasa. Jika Anda melakukannya, saya berharap Anda tidak pergi dengan perasaan, "Saya bodoh — pasti ada yang salah dengan saya." Anda tidak bodoh jika Anda mengalami kejutan buruk berurusan dengan Node.js. Ini bukan kamu! Ini Node.js dan ekosistemnya!
Apendiks, yang sebenarnya tidak saya inginkan setelah naiknya crescendo pada bab-bab terakhir dan kesimpulannya, berbicara tentang apa yang dapat saya temukan di ekosistem, dan memberikan solusi untuk literalisme gila:
Basis data lain yang sepertinya sangat cocok, dan mungkin dapat ditebus, adalah implementasi sisi-server dari penyimpanan nilai kunci HTML5. Pendekatan ini memiliki keunggulan utama dari API yang dipahami oleh sebagian besar pengembang front-end yang baik. Dalam hal ini, ini juga merupakan API yang dipahami oleh sebagian besar pengembang front-end yang cukup baik. Tetapi dengan paket node-localstorage, sementara akses kamus-sintaks tidak ditawarkan (Anda ingin menggunakan localStorage.setItem (kunci, nilai) atau localStorage.getItem (kunci), bukan localStorage [kunci]), semantik localStorage penuh diimplementasikan , termasuk kuota 5MB default— MENGAPA? Apakah pengembang JavaScript sisi-server perlu dilindungi dari diri mereka sendiri?
Untuk kemampuan basis data sisi klien, kuota 5MB per situs web benar-benar merupakan jumlah ruang pernafasan yang murah hati dan berguna untuk memungkinkan pengembang bekerja dengannya. Anda bisa menetapkan kuota yang jauh lebih rendah dan masih menawarkan pengembang peningkatan yang tak terukur dibandingkan pincang bersama dengan manajemen cookie. Batas 5MB tidak cocok untuk pemrosesan data sisi klien Big Data, tetapi ada tunjangan yang cukup besar yang dapat digunakan oleh pengembang yang banyak akal untuk melakukan banyak hal. Tetapi di sisi lain, 5MB bukanlah bagian yang paling besar dari sebagian besar disk yang dibeli kapan saja, yang berarti bahwa jika Anda dan situs web tidak setuju tentang apa yang masuk akal dari penggunaan ruang disk, atau beberapa situs hanya omong kosong, itu tidak benar-benar mahal Anda banyak dan Anda tidak dalam bahaya hard drive yang kebanjiran kecuali hard drive Anda sudah terlalu penuh.
Namun, mungkin dengan lembut ditunjukkan bahwa ketika Anda adalah satu-satunya kode penulisan untuk server Anda, Anda tidak memerlukan perlindungan tambahan dari membuat database Anda lebih dari ukuran 5MB yang dapat ditoleransi. Sebagian besar pengembang tidak perlu atau menginginkan alat yang bertindak sebagai pengasuh dan melindungi mereka dari menyimpan lebih dari 5MB data sisi server. Dan kuota 5MB yang merupakan tindakan penyeimbangan emas di sisi klien agak konyol di server Node.js. (Dan, untuk database untuk banyak pengguna seperti yang dicakup dalam Lampiran ini, mungkin ditunjukkan, sedikit menyakitkan, bahwa itu bukan 5MB per akun pengguna kecuali Anda membuat database terpisah pada disk untuk setiap akun pengguna; itu 5MB dibagi antara semua akun pengguna bersama. Itu bisa menyakitkanjika Anda menjadi viral!) Dokumentasi menyatakan bahwa kuota dapat disesuaikan, tetapi email seminggu yang lalu kepada pengembang yang menanyakan bagaimana mengubah kuota tidak dijawab, seperti pertanyaan StackOverflow yang menanyakan hal yang sama. Satu-satunya jawaban yang dapat saya temukan adalah di sumber Github CoffeeScript, di mana ia terdaftar sebagai argumen integer kedua opsional untuk sebuah konstruktor. Jadi itu cukup mudah, dan Anda dapat menentukan kuota yang setara dengan ukuran disk atau partisi. Tetapi selain mem-porting sebuah fitur yang tidak masuk akal, pembuat alat telah gagal sepenuhnya untuk mengikuti konvensi yang sangat standar dalam menafsirkan 0 sebagai makna "tidak terbatas" untuk variabel atau fungsi di mana integer adalah untuk menentukan batas maksimum untuk beberapa penggunaan sumber daya. Hal terbaik untuk dilakukan dengan penyimpangan ini mungkin untuk menentukan bahwa kuota adalah Infinity:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Bertukar dua komentar secara berurutan:
Orang-orang yang tidak perlu menembak diri sendiri terus-menerus menggunakan JavaScript secara keseluruhan, dan bagian dari JavaScript yang dijadikan bahasa terhormat adalah Douglas Crockford yang pada intinya mengatakan, “JavaScript sebagai bahasa memiliki beberapa bagian yang sangat bagus dan beberapa bagian yang sangat buruk. Ini bagian yang bagus. Lupakan saja ada hal lain di sana. ” Mungkin Node.js panas ekosistem akan tumbuh nya sendiri “Douglas Crockford,” yang akan mengatakan, “The Node.js ekosistem adalah coding Wild West, tetapi ada beberapa permata yang nyata dapat ditemukan. Inilah peta jalan. Berikut adalah area yang harus dihindari dengan biaya berapa pun. Berikut adalah area dengan paydirt terkaya yang dapat ditemukan dalam bahasa atau lingkungan APAPUN. ”
Mungkin orang lain dapat menganggap kata-kata itu sebagai tantangan, dan mengikuti petunjuk Crockford dan menulis "bagian yang baik" dan / atau "bagian yang lebih baik" untuk Node.js dan ekosistemnya. Saya akan membeli salinan!
Dan mengingat tingkat antusiasme dan jam kerja semata-mata pada semua proyek, mungkin diperlukan dalam satu tahun, atau dua, atau tiga, untuk meredam dengan tajam setiap komentar tentang ekosistem yang belum matang yang dibuat pada saat penulisan ini. Sangat masuk akal dalam lima tahun untuk mengatakan, “Ekosistem Node.js 2015 memiliki beberapa ladang ranjau. Ekosistem Node.js 2020 memiliki banyak paradis. ”