คำนำ
ในภาพของฉันอะซิงโครนัสปรากฏตัวครั้งแรกกับอาแจ็กซ์ ฉันยังคงทำงานกับ. NET ในเวลานั้นและตอนนั้น. NET ได้เปิดตัวการควบคุมแบบอะซิงโครนัส ...
แม้ว่าในที่สุดฉันก็รู้ว่ามันไม่ได้เป็นแบบอะซิงโครนัส ... จากนั้น asynchronous ส่วนหน้าจะใช้มาก หากไม่ใช่โปรแกรมแบบอะซิงโครนัสคุณจะอายที่จะบอกว่า nodejs ที่คุณเขียนนั้นทำโดย JavaScript โอกาส
คุณลักษณะของรูปแบบการเขียนโปรแกรมแบบอะซิงโครนัสก็ถูกนำมาใช้ Asynchronous มีข้อได้เปรียบมากมาย แต่เป็นฝันร้ายสำหรับการออกแบบ Asynchronous สามารถขัดขวางเวลาดังนั้นมันจึงเพิ่มความยากลำบากในการออกแบบ
อย่างไรก็ตามอะซิงโครนัสได้ปฏิวัติการปรับปรุงประสิทธิภาพและประสบการณ์ของผู้ใช้ดังนั้นคุณสมบัติอะซิงโครนัสของ NodeJs จึงค่อนข้างชัดเจน วันนี้เราจะเรียนรู้ได้ง่ายๆ
I/O แบบอะซิงโครนัส
ในความเป็นจริงในระดับระบบปฏิบัติการมีเพียงสองวิธี I/O เท่านั้นที่ถูกบล็อกและไม่ถูกบล็อก
ในรูปแบบการอุดตันแอปพลิเคชันจะต้องรอให้ I/O เสร็จสมบูรณ์ก่อนที่จะส่งคืนผลลัพธ์ ลักษณะของมันคือกองกลางด้านหลังถูกเรียกให้รอให้ระบบดำเนินการเสร็จสิ้นทั้งหมด สิ่งนี้จะทำให้ CPU รอแทนที่จะส่งคืนทันทีหลังจากการโทรกลับ
ฉันกำลังอ่านหนังสือเมื่อฉันเป็นมือใหม่ แต่ฉันรู้สึกว่ามันไม่ได้อธิบายไว้อย่างชัดเจนที่นี่ ยิ่งไปกว่านั้นโมเดลแบบอะซิงโครนัสนั้นมีขนาดใหญ่มากเพียงแค่การปรับปรุงในระดับความรู้สึก ให้ฉันยกตัวอย่างง่ายๆ
ตอนนี้ฉันมีมุมมองแอปพลิเคชันหน้าเดียวของแอปพลิเคชันสองหน้าเดียว เมื่อฉันค้นหาฉันต้องค้นหาผ่านช่องทางต่างๆ เซินเจิ้นจำเป็นต้องโทรหาบุคคลที่สามและบุคคลที่สามจากนั้นจะได้รับข้อมูลจากช่องทางเฉพาะ
แน่นอนว่ามันช้ามากในเวลานี้ หากฉันตัดโดยตรงจาก A ถึง B และ B เพื่อโหลดข้อมูลจะไม่มีปัญหา แต่ตอนนี้ปัญหาคือฉันต้องการเอฟเฟกต์ภาพเคลื่อนไหวเมื่อเปลี่ยนจาก A เป็น B
สิ่งนี้ต้องการให้การแสดงผล BVIEW สิ้นสุดลงในระหว่างกระบวนการสลับและอย่างน้อยก็จะไม่ถูกส่งไปยังกระบวนการเพื่อรับข้อมูลและเริ่มการเรนเดอร์ ดังนั้นอะซิงโครนัสอาจไม่ง่ายเลยที่จะใช้ แม้ว่าข้อมูลจะถูกร้องขอแบบอะซิงโครนัสข้อมูลจะต้องได้รับก่อนที่จะสามารถโหลดหน้าเว็บได้
สิ่งนี้ยังคงถูกปิดกั้นการโหลดไม่มีวิธีการทำธุรกิจ
ไม่มีเทคโนโลยีที่สมบูรณ์แบบการอุดตันทำให้ CPU กำลังรอการสูญเสียการไม่ปิดกั้นตรรกะอาจทำให้เกิดการสำรวจเพื่อยืนยันว่าโหลดเสร็จสมบูรณ์หรือไม่ (ฉันเคยใช้การสำรวจเพื่อตรวจสอบว่ามีการสร้าง DOM)
NodeJS ใช้กลไกการวนซ้ำเหตุการณ์ เมื่อกระบวนการเริ่มต้นโหนดจะสร้างห่วงที่ตายแล้ว แต่ละกระบวนการของการดำเนินการวนลูปเป็นเห็บ กระบวนการของแต่ละเห็บคือการดูว่ามีเหตุการณ์ที่ต้องดำเนินการหรือไม่
หากมีให้ลบเหตุการณ์ที่เกี่ยวข้องดำเนินการแล้วป้อนตรรกะถัดไป หากไม่มีให้ออกจากลูป
ในระหว่างกระบวนการเห็บแต่ละครั้งมีผู้สังเกตการณ์หนึ่งคนขึ้นไปในแต่ละเหตุการณ์ กระบวนการตัดสินว่ามีเหตุการณ์ที่ต้องดำเนินการคือการถามผู้สังเกตการณ์เหล่านี้ว่าเหตุการณ์จะต้องดำเนินการหรือไม่
นำตัวอย่างเหตุการณ์ HTML ของเราเป็นตัวอย่าง
สำหรับ HTML ในความเป็นจริง DOM แต่ละตัวเป็นผู้สังเกตการณ์ DOM ของหน้าสังเกตการเปลี่ยนแปลงของหน้าเว็บของเรา หลังจากที่เราจัดเตรียม addeventListener ให้กับ DOM เราจะลงทะเบียนฟังก์ชั่นการโทรกลับ เหตุการณ์ที่เราลงทะเบียนจะถูกวางไว้ในวัตถุ "คอนเทนเนอร์" ในเวลานี้มันเป็นเพียงการลงทะเบียน ฟังก์ชั่นเหล่านี้จะถูกเรียกใช้หลังจากการประชุมเงื่อนไข (เมื่อหน้าเปลี่ยน) และเหตุการณ์ที่เกี่ยวข้องจะถูกนำออกจากคอนเทนเนอร์เพื่อดำเนินการ
ตอนนี้เราคลิกที่จุดบนหน้าหนึ่งครั้งจากนั้นเราจะนำคอลเลกชันเหตุการณ์คลิกจากคอนเทนเนอร์ เราจะค้นหา DOM ที่เกี่ยวข้องแล้วทริกเกอร์ฟังก์ชั่นการโทรกลับของ DOM เหล่านี้
เหตุการณ์อาจมาจากการคลิกผู้ใช้หรือการเปลี่ยนแปลงข้อมูล ในโหนดเหตุการณ์ส่วนใหญ่มาจากคำขอเครือข่ายและไฟล์ I/O เหตุการณ์เหล่านี้จะมีผู้สังเกตการณ์ที่สอดคล้องกันเช่นผู้สังเกตการณ์ไฟล์และผู้สังเกตการณ์เครือข่าย
นี่เป็นรูปแบบการผลิต/การบริโภคทั่วไปแบบอะซิงโครนัส I/O คำขอเครือข่ายเพื่อให้การผลิตเหตุการณ์เหตุการณ์จะถูกส่งไปยังผู้สังเกตการณ์ต่าง ๆ ผู้สังเกตการณ์การลงทะเบียนกิจกรรมและลูปเหตุการณ์มีหน้าที่รับผิดชอบในการออกกิจกรรม
PS: คลิกเป็นตัวอย่าง ผู้สังเกตการณ์ DOM แต่ละคนลงทะเบียนเหตุการณ์แรกกระบวนการหน้าจะตรวจสอบหน้าผู้ใช้อย่างต่อเนื่องผู้ใช้จะคลิกเหตุการณ์การผลิตหน้าเว็บจากนั้นเหตุการณ์การคลิกที่ลงทะเบียนจะถูกนำออกมาจากคอนเทนเนอร์และดำเนินการ
ตรรกะฟังก์ชันทั่วไปถูกควบคุมโดยเรา:
การคัดลอกรหัสมีดังนี้:
var foreach = function (รายการ, callback) {
สำหรับ (var i = 0, len = list.length; i <len; i ++) {
การโทรกลับ (รายการ [i], i, list);
-
-
ในกรณีของอะซิงโครนัสฟังก์ชั่นการโทรกลับจะไม่ถูกควบคุมโดยนักพัฒนาอีกต่อไป ทุกครั้งที่มีการเริ่มต้นการโทร JS วัตถุคำขอเปลี่ยนผลิตภัณฑ์จะถูกสร้างขึ้น
การคัดลอกรหัสมีดังนี้:
fs.open = function (พา ธ , ธง, โหมด, การโทรกลับ) {
bingding.open (pathmodule._makelong (เส้นทาง), Stringtoflags (ธง), โหมด, การโทรกลับ);
-
Fs.Open เปิดไฟล์ตามเส้นทางและพารามิเตอร์เพื่อรับข้อมูลที่เกี่ยวข้อง อินเทอร์เฟซที่เกี่ยวข้อง C ++ เรียกว่าภายในและวัตถุระดับกลางจะถูกสร้างขึ้นในระหว่างกระบวนการและสถานะทั้งหมดของเราจะรวมอยู่ ...
PS: ฉันไม่รู้สึกดีหลังจากดูมานาน
บทสรุป
ข้างต้นเป็นเรื่องเกี่ยวกับ I/O แบบอะซิงโครนัสใน nodejs สรุปส่วนบุคคลหากมีการละเว้นหรือข้อผิดพลาดใด ๆ โปรดชี้ให้เห็น