Rumah  >  Artikel  >  hujung hadapan web  >  tutorial nodejs I/O_node.js tak segerak

tutorial nodejs I/O_node.js tak segerak

WBOY
WBOYasal
2016-05-16 16:30:461457semak imbas

Kata Pengantar

Dalam imej saya, asynchronous muncul dahulu dengan ajax saya masih mengusahakan .net pada masa itu, dan kemudian .net sebenarnya keluar dengan kawalan asynchronous...

Walaupun akhirnya saya dapati bahawa ia bukan tak segerak... Kemudian, bahagian hadapan banyak digunakan sebagai asynchronous Jika ia bukan program tak segerak, anda akan malu untuk mengatakan bahawa NodeJ yang anda tulis telah dibuat. oleh JavaScript

Ciri model pengaturcaraan asynchronous juga telah dibawa ke atas, tetapi ia adalah mimpi ngeri untuk reka bentuk akan mengganggu masa, jadi ia meningkatkan kesukaran reka bentuk,

Tetapi asynchrony telah merevolusikan peningkatan prestasi dan pengalaman pengguna, jadi ciri tak segerak NodeJS agak jelas Hari ini kita akan belajar secara ringkas

I/O Tak segerak

Malah, pada peringkat sistem pengendalian, hanya terdapat dua kaedah I/O, menyekat dan tidak menyekat

Dalam model penyekatan, aplikasi perlu menunggu I/O selesai sebelum mengembalikan hasilnya. Cirinya ialah ia memanggil bahagian belakang dan menunggu sistem menyelesaikan semua operasi tunggu, sementara panggilan tidak menyekat akan kembali serta-merta

Saya mula-mula membaca buku, tetapi saya merasakan penerangan di sini tidak jelas, dan model tak segerak sebenarnya sangat besar, cuma peningkatan dalam tahap persepsi Biar saya berikan contoh mudah

Saya kini mempunyai dua paparan aplikasi satu halaman, halaman carian dan halaman senarai Apabila saya mencari, saya perlu mencari melalui pelbagai saluran Shenzhen, dan pihak ketiga memperoleh data daripada saluran tertentu

Sudah tentu ia sangat perlahan pada masa ini Jika saya menukar terus dari A ke B dan kemudian mencipta kotak pemuatan atau sesuatu untuk memuatkan data dalam B, tidak akan ada masalah kesan untuk bertukar dari A ke B

Ini memerlukan pemaparan Bview telah tamat semasa bertukar, sekurang-kurangnya ia tidak akan mendapat data dalam proses dan mula membuat pemaparan, jadi asynchronous mungkin tidak begitu mudah digunakan pada masa ini Walaupun ia meminta data secara tidak segerak, ia juga memerlukan pemerolehan data untuk memuatkan halaman

Ini masih menyekat pemuatan, dan tiada cara untuk melakukannya dari segi perniagaan

Tiada teknologi yang sempurna menyebabkan pembaziran menunggu CPU Bukan sahaja tidak menyekat mengganggu logik, ia juga mungkin memerlukan tinjauan untuk mengesahkan sama ada pemuatan telah selesai (saya pernah menggunakan tinjauan untuk mengesan sama ada DOM telah dijana)

NodeJs menggunakan mekanisme gelung peristiwa Apabila proses bermula, Node akan mencipta gelung tak terhingga Setiap kali badan gelung dilaksanakan, proses setiap Tick adalah untuk melihat jika terdapat peristiwa yang memerlukan untuk diproses

Jika ada, keluarkan acara yang berkaitan, laksanakannya, dan kemudian masukkan logik seterusnya Jika tidak, keluar dari gelung

Dalam setiap proses Tick, terdapat satu atau lebih pemerhati dalam setiap gelung peristiwa Proses menentukan sama ada terdapat peristiwa yang akan diproses adalah dengan bertanya kepada pemerhati ini sama ada peristiwa itu perlu diproses

.

Ambil model acara html kami sebagai contoh

Untuk HTML, sebenarnya, setiap DOMnya ialah pemerhati DOM halaman memerhatikan perubahan Halaman Web kami Selepas kami menyediakan addEventListener kepada DOM, kami akan mendaftarkan fungsi panggilan balik untuknya kami mendaftar akan dimasukkan ke dalam objek "bekas" Pada masa ini, ia hanya pendaftaran Fungsi ini akan dicetuskan selepas syarat dipenuhi (apabila halaman berubah), dan acara yang berkaitan akan dikeluarkan dari bekas dan. dilaksanakan

Kami kini mengklik pada satu titik pada halaman sekali, dan kemudian kami akan mengeluarkan koleksi acara klik daripada bekas, kami akan menemui DOM yang berkaitan, dan kemudian mencetuskan fungsi panggil balik DOM ini

Peristiwa mungkin datang daripada klik pengguna atau perubahan data Dalam Node, peristiwa terutamanya datang daripada permintaan rangkaian dan I/O fail Peristiwa ini akan mempunyai pemerhati yang sepadan, seperti pemerhati fail dan pemerhati rangkaian

Ini juga merupakan model pengeluaran/penggunaan biasa, I/O tak segerak, permintaan rangkaian menyediakan pengeluaran acara, acara dihantar kepada pelbagai pemerhati, pemerhati mendaftarkan acara dan gelung acara bertanggungjawab untuk mengeluarkan acara dan kemudian melaksanakannya

PS: Mengambil klik sebagai contoh, setiap pemerhati DOM mula-mula mendaftarkan acara, proses halaman terus memantau halaman, pengguna mengklik halaman untuk menjana acara, dan kemudian acara klik berdaftar dikeluarkan dari bekas dan dilaksanakan ,

Logik fungsi am dikawal oleh kami:

Salin kod Kod adalah seperti berikut:
var forEach = fungsi (senarai, panggil balik) {
untuk (var i = 0, len = list.length; i < len; i ) {
          panggil balik(senarai[i], i, senarai);
}
}

Dalam kes operasi tak segerak, fungsi panggil balik tidak dikawal oleh pembangun Setiap kali js dipanggil, objek permintaan produk peralihan akan dijana

Salin kod Kod adalah seperti berikut:
fs.open = fungsi (laluan, bendera, mod, panggil balik) {
bingding.open(pathModule._makeLong(path), stringToFlags(bendera), mod, panggil balik);
};

fs.open membuka fail berdasarkan laluan dan parameter untuk mendapatkan data yang berkaitan Ia memanggil antara muka berkaitan c secara dalaman dan objek perantaraan akan dijana dalam proses, di mana semua keadaan kami akan...

PS: Saya rasa tidak sedap hati setelah menontonnya sekian lama

Kesimpulan

Di atas adalah mengenai I/O tak segerak dalam ringkasan peribadi. Jika terdapat sebarang ketinggalan atau ralat, sila nyatakan.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn