Kata pengantar
Dalam gambar saya, Asynchronous pertama kali muncul dengan Ajax. Saya masih mengerjakan .net pada waktu itu, dan kemudian .net sebenarnya merilis kontrol asinkron ...
Meskipun akhirnya saya tahu bahwa itu tidak sinkron ... Lalu, front-end asynchronous banyak digunakan. Jika ini bukan program asinkron, Anda malu untuk mengatakan bahwa nodej yang Anda tulis dibuat oleh Opportunity JavaScript.
Fitur model pemrograman asinkron juga telah dibawa. Asynchronous memiliki banyak keunggulan, tetapi ini adalah mimpi buruk untuk desain. Asynchronous dapat mengganggu waktu, sehingga meningkatkan kesulitan desain.
Namun, asinkron telah merevolusi peningkatan kinerja dan pengalaman pengguna, sehingga fitur asinkron dari nodej cukup jelas. Hari ini kita akan mempelajarinya secara sederhana
I/O asinkron
Faktanya, pada tingkat sistem operasi, hanya ada dua metode I/O, diblokir dan tidak diblokir
Dalam model penyumbatan, aplikasi perlu menunggu I/O selesai sebelum mengembalikan hasilnya. Karakteristiknya adalah bahwa gelandang belakang dipanggil untuk menunggu sistem menyelesaikan semua operasi. Ini akan menyebabkan CPU menunggu, daripada kembali segera setelah panggilan penyumbatan.
Saya sedang membaca buku ketika saya masih pemula, tetapi saya merasa itu tidak dijelaskan di sini. Selain itu, model asinkron sebenarnya sangat besar, hanya peningkatan tingkat perasaan. Izinkan saya memberi Anda contoh sederhana
Saya sekarang memiliki tampilan aplikasi satu halaman dari dua aplikasi satu halaman. Ketika saya mencari, saya perlu mencari melalui berbagai saluran. Shenzhen perlu menelepon pihak ketiga, dan pihak ketiga kemudian mendapatkan data dari saluran tertentu.
Tentu saja sangat lambat saat ini. Jika saya langsung memotong dari A ke B dan B untuk memuat data, tidak akan ada masalah, tetapi sekarang masalahnya adalah saya memerlukan efek animasi saat beralih dari A ke B.
Ini mensyaratkan bahwa rendering BView telah berakhir selama proses switching, dan setidaknya tidak akan dikirim ke proses untuk mendapatkan data dan mulai rendering. Oleh karena itu, asinkron mungkin tidak mudah digunakan. Bahkan jika data diminta secara tidak sinkron, data harus diperoleh sebelum halaman dapat dimuat.
Ini masih diblokir pemuatan, tidak ada cara untuk melakukan ini dalam bisnis
Tidak ada teknologi yang sempurna, penyumbatan menyebabkan CPU menunggu sia-sia, tidak memblokir logika, mungkin juga memerlukan pemungutan suara untuk mengkonfirmasi apakah beban selesai (saya dulu menggunakan jajak pendapat untuk mendeteksi apakah DOM dihasilkan)
NodeJS mengadopsi mekanisme loop acara. Ketika proses dimulai, Node akan membuat loop dead. Setiap proses pelaksanaan badan loop adalah kutu. Proses setiap centang adalah untuk melihat apakah ada peristiwa yang perlu diproses.
Jika ada, hapus peristiwa yang terkait, jalankan, dan kemudian masukkan logika berikutnya. Jika tidak ada, keluar dari loop
Selama setiap proses centang, ada satu atau lebih pengamat di setiap loop peristiwa. Proses menilai apakah ada peristiwa yang akan diproses adalah bertanya kepada pengamat ini apakah peristiwa tersebut perlu diproses.
Ambil model acara HTML kami sebagai contoh
Untuk HTML, pada kenyataannya, masing -masing DOM adalah pengamat. DOM halaman mengamati perubahan halaman web kami. Setelah kami memberikan AddEventListener ke DOM, kami akan mendaftarkan fungsi panggilan balik. Acara yang kami daftarkan akan ditempatkan di objek "Container". Pada saat ini, itu hanya pendaftaran. Fungsi -fungsi ini akan dipicu setelah memenuhi persyaratan (ketika halaman berubah), dan acara terkait akan diambil dari wadah untuk dieksekusi.
Kami sekarang mengklik satu poin pada halaman sekali, dan kemudian kami akan mengeluarkan koleksi Klik Event dari wadah. Kami akan menemukan DOM yang relevan dan kemudian memicu fungsi panggilan balik dari DOMS ini.
Acara dapat berasal dari klik pengguna atau perubahan data. Di Node, acara terutama berasal dari permintaan jaringan dan file I/O. Peristiwa ini akan memiliki pengamat yang sesuai, seperti pengamat file dan pengamat jaringan.
Ini juga merupakan model produksi/konsumsi yang khas, I/O asinkron, permintaan jaringan untuk menyediakan produksi acara, acara disahkan ke berbagai pengamat, pengamat mendaftar acara, dan loop acara bertanggung jawab untuk mengambil acara dan kemudian melaksanakan acara
PS: Ambil klik sebagai contoh. Setiap pengamat DOM terlebih dahulu mendaftarkan acara, proses halaman terus -menerus memantau halaman, pengguna mengklik acara produksi halaman, dan kemudian acara klik terdaftar diambil dari wadah dan dieksekusi.
Logika fungsi umum dikendalikan oleh kami:
Salinan kode adalah sebagai berikut:
var foreach = function (daftar, callback) {
untuk (var i = 0, len = list.length; i <len; i ++) {
callback (daftar [i], i, daftar);
}
}
Dalam kasus asinkron, fungsi callback tidak lagi dikendalikan oleh pengembang. Setiap kali panggilan JS dimulai, objek permintaan produk transisi akan dihasilkan.
Salinan kode adalah sebagai berikut:
fs.open = function (path, flags, mode, callback) {
bingding.open (pathmodule._makelong (path), stringtoflags (flags), mode, callback);
};
Fs.open membuka file berdasarkan path dan parameter untuk mendapatkan data yang relevan. Antarmuka terkait C ++ disebut secara internal, dan objek perantara akan dihasilkan selama proses tersebut, dan semua negara bagian kami akan dimasukkan ...
PS: Saya merasa tidak enak setelah menontonnya begitu lama
Kesimpulan
Di atas adalah semua tentang I/O asinkron di nodeJs. Ringkasan pribadi, jika ada kelalaian atau kesalahan, silakan tunjukkan.