การทำความเข้าใจว่า Chrome V8 Engine แปล JavaScript เป็นรหัสเครื่องอย่างไร

ก่อนที่จะเจาะลึกถึงแกนกลางของ V8 ของ Chrome ก่อนอื่นเรามาดูพื้นฐานของเรากันก่อน ระบบทั้งหมดของเราประกอบด้วยไมโครโปรเซสเซอร์สิ่งที่อยู่ในคอมพิวเตอร์ของคุณในขณะนี้และช่วยให้คุณอ่านสิ่งนี้ได้

ไมโครโปรเซสเซอร์เป็นเครื่องจักรขนาดเล็กที่ทำงานกับสัญญาณไฟฟ้าและในที่สุดก็ทำงานได้ เราให้คำแนะนำไมโครโปรเซสเซอร์ คำแนะนำเป็นภาษาที่ไมโครโปรเซสเซอร์สามารถตีความได้ ไมโครโปรเซสเซอร์ต่างกันพูดภาษาที่แตกต่างกัน ที่พบมากที่สุด ได้แก่ IA-32, x86–64, MIPS และ ARM ภาษาเหล่านี้โต้ตอบโดยตรงกับฮาร์ดแวร์ดังนั้นรหัสที่เขียนขึ้นจึงเรียกว่ารหัสเครื่อง รหัสที่เราเขียนบนคอมพิวเตอร์ของเราจะถูกแปลงหรือรวบรวมเป็นรหัสเครื่อง

นั่นคือลักษณะของรหัสเครื่อง:

ประกอบด้วยคำสั่งที่ดำเนินการกับหน่วยความจำเฉพาะในระบบของคุณในระดับต่ำ คุณต้องรู้สึกโชคดีที่ไม่ต้องเขียนทั้งหมดนี้เพื่อรันโปรแกรมของคุณ!

ภาษาระดับสูงแยกออกจากภาษาเครื่อง ในระดับของสิ่งที่เป็นนามธรรมด้านล่างคุณจะเห็นว่า JavaScript แยกออกจากระดับเครื่องได้มากเพียงใด C / C ++ ค่อนข้างใกล้เคียงกับฮาร์ดแวร์มากและด้วยเหตุนี้จึงเร็วกว่าภาษาระดับสูงอื่น ๆ

ตอนนี้กลับไปที่เครื่องยนต์ V8: V8 เป็นเอ็นจิ้น Javascript โอเพ่นซอร์สที่มีประสิทธิภาพที่ Google จัดหา แล้ว Javascript Engine คืออะไร? เป็นโปรแกรมที่แปลงรหัส Javascript เป็นระดับล่างหรือรหัสเครื่องที่ไมโครโปรเซสเซอร์สามารถเข้าใจได้

มีเอ็นจิ้น JavaScript ที่แตกต่างกัน ได้แก่ Rhino, JavaScriptCore และ SpiderMonkey เอ็นจิ้นเหล่านี้เป็นไปตามมาตรฐาน ECMAScript ECMAScript กำหนดมาตรฐานสำหรับภาษาสคริปต์ JavaScript เป็นไปตามมาตรฐาน ECMAScript มาตรฐานเหล่านี้กำหนดวิธีการทำงานของภาษาและคุณลักษณะที่ควรมี คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ ECMAScript ได้ที่นี่

เครื่องยนต์ Chrome V8:

  • เครื่องยนต์ V8 เขียนด้วย C ++ และใช้ใน Chrome และ Nodejs
  • ใช้ ECMAScript ตามที่ระบุใน ECMA-262
  • เครื่องยนต์ V8 สามารถทำงานแบบสแตนด์อโลนเราสามารถฝังด้วยโปรแกรม C ++ ของเราเอง

ให้เราทำความเข้าใจประเด็นสุดท้ายให้ดีขึ้นเล็กน้อย V8 สามารถทำงานแบบสแตนด์อโลนและในเวลาเดียวกันเราสามารถเพิ่มการใช้งานฟังก์ชันของเราเองใน C ++ เพื่อเพิ่มคุณสมบัติใหม่ให้กับ JavaScript

ตัวอย่างเช่น: print('hello world')ไม่ใช่คำสั่งที่ถูกต้องใน Node.js มันจะทำให้เกิดข้อผิดพลาดถ้าเรารวบรวมมัน แต่เราสามารถเพิ่มการใช้งานฟังก์ชันการพิมพ์ของเราเองใน C ++ ที่ด้านบนของ V8 ซึ่งเป็นโอเพ่นซอร์สที่ Github จึงทำให้ฟังก์ชันการพิมพ์ทำงานได้ สิ่งนี้ช่วยให้ JavaScript เข้าใจมากกว่าสิ่งที่มาตรฐาน ECMAScript ระบุว่า JavaScript ควรเข้าใจ

นี่เป็นคุณสมบัติที่มีประสิทธิภาพเนื่องจาก C ++ มีคุณสมบัติมากกว่าภาษาโปรแกรมเมื่อเทียบกับ JavaScript เนื่องจากใกล้เคียงกับฮาร์ดแวร์มากขึ้นเช่นการจัดการกับไฟล์และโฟลเดอร์ในฮาร์ดไดรฟ์

การอนุญาตให้เราเขียนโค้ดใน C ++ และทำให้สามารถใช้งานได้กับ JavaScript ทำให้เราสามารถเพิ่มคุณสมบัติให้กับ JavaScript ได้มากขึ้น

Node.js ในตัวเองคือการใช้งาน C ++ ของเอ็นจิ้น V8 ที่อนุญาตให้มีการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์และแอพพลิเคชั่นเครือข่าย

ตอนนี้เรามาดูโค้ดโอเพนซอร์สบางส่วนภายในเครื่องยนต์ ในการดำเนินการนี้คุณต้องไปที่โฟลเดอร์ v8 / samples / shell.cc

ที่นี่คุณสามารถดูการใช้งานฟังก์ชันต่างๆเช่นPrintและRead,ที่ไม่มีอยู่ใน Node.js

ด้านล่างคุณสามารถดูการใช้งานPrintฟังก์ชัน เมื่อใดก็ตามที่print()เรียกใช้ฟังก์ชันใน Node.js ฟังก์ชันจะสร้างการเรียกกลับและฟังก์ชันจะถูกเรียกใช้งาน

ในทำนองเดียวกันเราสามารถเพิ่มการใช้งานฟังก์ชันใหม่ ๆ ของเราเองใน C ++ ภายใน V8 เพื่อให้ Node.js เข้าใจได้

นั่นเป็นเรื่องที่มากเกินไปที่จะหาคำพูดง่ายๆและนั่นคือจำนวนของเครื่องยนต์ V8 ที่ทำงานได้ภายใต้ประทุน

ตอนนี้คุณต้องมีความเข้าใจอย่างชัดเจนว่า Node.js ทำงานอย่างไรและเครื่องยนต์ Chrome V8 คืออะไร

ขอบคุณที่อ่านบทความนี้ ลองติดตามTwitter , Linkedin , Github ,และFacebook