ก่อนอื่นมาดูการแนะนำบนเว็บไซต์ทางการของ NodeJS:
ลักษณะของมันคือ:
1. เป็นสภาพแวดล้อมที่ใช้งาน JavaScript
2. พึ่งพาเอ็นจิ้น Chrome V8 สำหรับคำอธิบายรหัส
3. ขับเคลื่อนเหตุการณ์
4. I/O ที่ไม่ปิดกั้น
5. น้ำหนักเบาปรับขนาดได้เหมาะสำหรับแอปพลิเคชันการโต้ตอบข้อมูลแบบเรียลไทม์
6. กระบวนการเดี่ยวเธรดเดี่ยว
(1) ทำไม nodejs ถึงเลือก JavaScript เป็นภาษาผู้ให้บริการ
ในความเป็นจริงในตอนต้นของการใช้ Node.js ผู้เขียน Ryan Dahl ไม่ได้เลือก JavaScript เขาลอง C และ Lua เพราะมันไม่มีคุณสมบัติภาษาระดับสูงเช่นการปิดและการเขียนโปรแกรมที่ใช้งานได้ซึ่งทำให้โปรแกรมซับซ้อนและยากต่อการบำรุงรักษา
JavaScript เป็นภาษาที่รองรับกระบวนทัศน์การเขียนโปรแกรมที่ใช้งานได้ซึ่งเหมาะกับรูปแบบการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ของ Node.js นอกจากนี้เอ็นจิ้น V8 ที่จัดทำโดย Google ได้ปรับปรุงความเร็วในการดำเนินการของภาษา JavaScript อย่างมาก
สิ่งที่นำเสนอในที่สุดเราคือ node.js ไม่ใช่ node.c, node.lua หรือการใช้ภาษาอื่น ๆ
(2) Node.js ไม่ใช่แอปพลิเคชัน JS แต่เป็นแพลตฟอร์มการดำเนินการ JS
เมื่อคุณเห็นชื่อ node.js ผู้เริ่มต้นอาจคิดผิดพลาดว่านี่เป็นแอปพลิเคชัน JavaScript ในความเป็นจริง Node.js เขียนใน C ++ และเป็นสภาพแวดล้อมที่ใช้งาน JavaScript
Node.js ใช้ Engine V8 ของ Google Chrome ซึ่งมีประสิทธิภาพที่ดีและยังมี API ระดับระบบมากมายเช่นการทำงานไฟล์การเขียนโปรแกรมเครือข่าย ฯลฯ
นี่คือโมดูลทั้งหมดที่เกี่ยวข้องใน NodeJS:
รหัส JavaScript ทางฝั่งเบราว์เซอร์จะอยู่ภายใต้ข้อ จำกัด ด้านความปลอดภัยที่หลากหลายเมื่อทำงานและการทำงานของระบบลูกค้ามี จำกัด
ในทางตรงกันข้าม Node.js เป็นรันไทม์พื้นหลังที่ครอบคลุมโดยให้ฟังก์ชั่นมากมายที่ภาษาอื่น ๆ สามารถทำได้
(3) คุณสมบัติของ node.js
node.js ยังค่อนข้างนวัตกรรมในการออกแบบ มันทำงานในโหมดเดี่ยวและโหมดเดียว (ซึ่งสอดคล้องกับวิธีการทำงานของ JavaScript)
กลไกที่ขับเคลื่อนด้วยเหตุการณ์ถูกนำมาใช้โดย node.js ผ่านการบำรุงรักษาอย่างมีประสิทธิภาพการเธรดเดียวภายในของคิวลูปเหตุการณ์ ไม่มีการประกอบอาชีพทรัพยากรและการสลับบริบทของมัลติเธรด ซึ่งหมายความว่าเมื่อเผชิญกับคำขอ HTTP ขนาดใหญ่ Node.js จัดการทุกอย่างด้วยการขับเคลื่อนเหตุการณ์
นักพัฒนาเว็บบริการที่คุ้นเคยกับภาษาดั้งเดิมอาจคุ้นเคยกับการทำงานร่วมกันและการทำงานร่วมกันแบบหลายเธรด แต่เมื่อเผชิญกับ Node.js เราต้องยอมรับและเข้าใจลักษณะของมัน
สองแนวคิดที่สำคัญ
1. Event Loop คืออะไร? (แนวคิดที่สำคัญมาก)
Event Loop เป็นแนวคิดที่สำคัญมากหมายถึงกลไกการทำงานของระบบคอมพิวเตอร์
หากคุณต้องการเข้าใจลูปเหตุการณ์คุณต้องเริ่มต้นด้วยโหมดการทำงานของโปรแกรม โปรแกรมหลังจากรันเรียกว่ากระบวนการ โดยทั่วไปกระบวนการสามารถทำงานได้ครั้งละหนึ่งงานเท่านั้น
หากมีงานมากมายที่จะดำเนินการมีเพียงสามวิธีเท่านั้น
(1) จัดเรียง เนื่องจากกระบวนการสามารถดำเนินการครั้งละหนึ่งงานได้จึงต้องรอจนกว่างานก่อนหน้าจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการงานต่อมา
(2) สร้างกระบวนการใหม่ ใช้คำสั่ง Fork เพื่อสร้างกระบวนการใหม่สำหรับแต่ละงาน
(3) สร้างเธรดใหม่ เนื่องจากกระบวนการใช้ทรัพยากรมากเกินไปโปรแกรมของวันนี้จึงอนุญาตให้กระบวนการมีหลายเธรดและเธรดทำให้งานเสร็จสมบูรณ์
ใช้ภาษาจาวาสคริปต์เป็นตัวอย่าง มันเป็นภาษาเดียว งานทั้งหมดเสร็จสมบูรณ์ในเธรดเดียวนั่นคือวิธีแรกด้านบนจะถูกนำมาใช้ เมื่อคุณพบงานจำนวนมากหรืองานที่ต้องใช้เวลานานหน้าเว็บจะได้สัมผัสกับ "ความตายปลอม" เนื่องจาก JavaScript ไม่สามารถหยุดและไม่สามารถตอบสนองต่อพฤติกรรมของผู้ใช้ได้
คุณอาจถามว่าทำไม JavaScript Single Threaded? มันไม่สามารถนำไปใช้เป็นแบบมัลติเธรดได้หรือไม่?
สิ่งนี้มีส่วนเกี่ยวข้องกับประวัติศาสตร์:
คุณลักษณะที่สำคัญของภาษาจาวาสคริปต์คือเธรดเดี่ยวซึ่งหมายความว่าคุณสามารถทำสิ่งเดียวได้ในเวลาเดียวกัน เหตุใด JavaScript จึงมีหลายเธรดไม่ได้? สิ่งนี้จะปรับปรุงประสิทธิภาพ
เธรดเดี่ยวของ JavaScript เกี่ยวข้องกับวัตถุประสงค์ ในฐานะที่เป็นภาษาสคริปต์เบราว์เซอร์จุดประสงค์หลักของ JavaScript คือการโต้ตอบกับผู้ใช้และใช้งาน DOM สิ่งนี้กำหนดว่ามันสามารถเป็นเกลียวเดี่ยวได้มิฉะนั้นจะทำให้เกิดปัญหาการซิงโครไนซ์ที่ซับซ้อนมาก
ตัวอย่างเช่นสมมติว่า JavaScript มีสองเธรดในเวลาเดียวกันเธรดหนึ่งจะเพิ่มเนื้อหาในโหนด DOM บางตัวและเธรดอื่น ๆ จะลบโหนดนี้ซึ่งเบราว์เซอร์ควรใช้เธรดใดในเวลานี้
ดังนั้นเพื่อหลีกเลี่ยงความซับซ้อน JavaScript เป็นเธรดเดียวตั้งแต่แรกเกิดซึ่งได้กลายเป็นคุณลักษณะหลักของภาษานี้และจะไม่เปลี่ยนแปลงในอนาคต
เพื่อใช้ประโยชน์จากพลังการคำนวณของซีพียูหลายคอร์ HTML5 เสนอมาตรฐานผู้ปฏิบัติงานบนเว็บทำให้สคริปต์ JavaScript สร้างเธรดหลายตัว แต่เธรดเด็กจะถูกควบคุมโดยเธรดหลักอย่างสมบูรณ์และไม่สามารถใช้งาน DOM ได้
ดังนั้นมาตรฐานใหม่นี้ไม่ได้เปลี่ยนลักษณะของการเธรดเดี่ยว JavaScript
กลับไปที่ Eventloop:
การทำเกลียวเดี่ยวหมายความว่างานทั้งหมดจะต้องเข้าคิวและงานก่อนหน้าจะถูกดำเนินการก่อนที่งานถัดไปจะถูกดำเนินการ หากงานก่อนหน้านี้ใช้เวลานานงานถัดไปจะต้องรอ
หากคิวเป็นเพราะการคำนวณจำนวนมากและ CPU ยุ่งเกินไปมันจะดี แต่หลายครั้งที่ CPU ไม่ได้ใช้งานเนื่องจากอุปกรณ์ IO (อุปกรณ์อินพุตและเอาต์พุต) ช้ามาก (เช่นการดำเนินการ AJAX อ่านข้อมูลจากเครือข่าย) และคุณต้องรอผลลัพธ์ที่จะออกมาก่อนที่จะดำเนินการ
ผู้ออกแบบภาษา JavaScript ตระหนักว่าในเวลานี้เธรดหลักสามารถเพิกเฉยต่ออุปกรณ์ IO ได้อย่างสมบูรณ์ระงับงานที่รอคอยและเรียกใช้งานถัดไปก่อน รอจนกว่าอุปกรณ์ IO จะส่งคืนผลลัพธ์จากนั้นหันหลังกลับและดำเนินการต่องานที่ถูกระงับ
ดังนั้นงานทั้งหมดสามารถแบ่งออกเป็นสองประเภทหนึ่งเป็นงานซิงโครนัสและอีกงานหนึ่งเป็นงานอะซิงโครนัส งานแบบซิงโครนัสอ้างถึงงานคิวในเธรดหลักมีเพียงงานก่อนหน้านี้เท่านั้น
งานหลังสามารถดำเนินการได้; งานอะซิงโครนัสหมายถึงงานที่ไม่ได้ป้อนเธรดหลัก แต่เข้าสู่ "คิวงาน" เฉพาะเมื่อ "คิวงาน" จะแจ้งเธรดหลักว่างานแบบอะซิงโครนัสสามารถดำเนินการได้จะต้องเข้าสู่เธรดหลักสำหรับการดำเนินการ
ดังที่แสดงในรูปด้านล่าง:
ตราบใดที่เธรดหลักว่างเปล่ามันจะอ่าน "คิวงาน" นี่คือกลไกการทำงานของ JavaScript กระบวนการนี้จะทำซ้ำอย่างต่อเนื่อง
3. ตัวอย่างคำอธิบาย
โอเคอย่าพูดว่า "ไร้สาระ" มากนักมาเริ่มแอปพลิเคชัน NodeJS ครั้งแรกของเรา: "สวัสดี Big Bear" ทันที
เปิดตัวแก้ไขที่คุณชื่นชอบและสร้างไฟล์ helloWorld.js
รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้: 1 var http = reghed ("http"); 2 http.createServer (ฟังก์ชั่น (คำขอ, การตอบกลับ) {3 response.writehead (200, {4 "เนื้อหาประเภท": "ข้อความ/ธรรมดา" 5}); 6 response.write ("สวัสดี, หมีใหญ่!"); 7 response.end (); 8}) ฟัง (8888);
ลองเรียกใช้และทดสอบรหัสนี้กันเถอะ ก่อนอื่นให้ดำเนินการสคริปต์ของคุณด้วย node.js:
เปิดเครื่องมือบรรทัดคำสั่ง CMD สลับไปที่ไดเรกทอรีการทำงานของคุณและเรียกใช้คำสั่ง "โหนด helloWorld.js"
ถัดไปเปิดเบราว์เซอร์และเยี่ยมชม http: // localhost: 8888/และคุณจะเห็นหน้าเว็บที่มีคำว่า "สวัสดี, Big Bear!"
ความรู้ขยายเล็กน้อย:
ดังที่แสดงในรูปด้านล่างนี่เป็นส่วนหนึ่งของซอร์สโค้ดของ http.js ใน nodejs CreateServer เป็นอินเทอร์เฟซที่ใช้งานง่าย การใช้งานภายในใช้แบบจำลองซิงเกิลตัน ข้อดีของสิ่งนี้คือการแยกงานการสร้างและการเริ่มต้นอย่างมีประสิทธิภาพของอินสแตนซ์มุ่งเน้นไปที่ความรับผิดชอบและลดการมีเพศสัมพันธ์ นี่คือความคิดที่ว่าทุกคนสามารถเรียนรู้ได้จากการเขียนโปรแกรม
ฮ่าฮ่าฮ่ามันไม่น่าสนใจมากเหรอ? นี่เป็นเพียงประสบการณ์สั้น ๆ ฉันจะอธิบายคะแนนความรู้มากมายในภายหลัง ทุกคนสามารถเข้าใจได้อย่างช้าๆ o (∩_∩) o ฮ่าฮ่า ~
iv. ภาพรวมโดยรวม
1. เป็นสภาพแวดล้อมที่ใช้งาน JavaScript
2. พึ่งพาเอ็นจิ้น Chrome V8 สำหรับคำอธิบายรหัส
3. ขับเคลื่อนเหตุการณ์
4. I/O ที่ไม่ปิดกั้น
5. น้ำหนักเบาปรับขนาดได้เหมาะสำหรับแอปพลิเคชันการโต้ตอบข้อมูลแบบเรียลไทม์
6. กระบวนการเดี่ยวเธรดเดี่ยว
ในที่สุดสิ่งที่ฉันต้องการจะพูดคือ: มีตัวอย่างไม่มากนักในบทความนี้ แต่แนวคิดเหล่านี้มีความสำคัญมาก คุณต้องมีความเข้าใจที่ชัดเจนเพื่อที่คุณจะได้วางรากฐานที่มั่นคงสำหรับการเรียนรู้ NodeJS ในอนาคต มาทำงานหนักด้วยกัน
ฮ่าฮ่าฮ่าบทความนี้จบลงแล้วและจะไม่ดำเนินการต่อ ฉันหวังว่าจะสื่อสารกับคุณมากขึ้นและดำเนินการร่วมกัน - - - - - Huhuhuhu … (*^__^*)