ทุกสิ่งที่คุณต้องรู้เกี่ยวกับ node.js 8

Sep 11, 2025
วิธีการ

การเปิดตัวครั้งสำคัญล่าสุดของ Node.js นำเสนอการปรับปรุงที่สำคัญมากมายให้กับชุมชน JavaScript รวมถึงเครื่องยนต์ JavaScript ที่อัปเดต, NPM เวอร์ชัน 5, Google ของ Google, Node.js API, Async_hooks, A Whatwg URL Parser, บัฟเฟอร์ที่ปลอดภัยมากขึ้นและอื่น ๆ ที่นี่เราจะอัปเดตคุณเกี่ยวกับคุณสมบัติเหล่านี้และสิ่งที่สำคัญที่สุดอื่น ๆ ของรุ่นนี้

node.js 8 เปิดตัวภายใต้ชื่อรหัสคาร์บอนและมีวางจำหน่ายแล้วจาก ไซต์ node.js . มันจะทำงานอย่างแข็งขันอีก 18 เดือน (ไม่มีคุณสมบัติใหม่เพียงแค่แก้ไขข้อผิดพลาดการปรับปรุงความปลอดภัยและการอัปเดต NPM) ก่อนเข้าสู่โหมดบำรุงรักษา เช่นเดียวกับรุ่นก่อนหน้าในระหว่างการบำรุงรักษาโหมดการบำรุงรักษาจะได้รับการอัปเดตความปลอดภัยที่สำคัญและการแก้ไขข้อบกพร่องเท่านั้น

  • 20 JavaScript Tools เพื่อเป่าจิตใจของคุณ

มีความปลอดภัยที่จะบอกว่าตั้งแต่ Node.js ได้รับรอบนี้เป็นหนึ่งในการอัปเดตที่ยิ่งใหญ่ที่สุดที่รันไทม์ได้รับ - เปลี่ยนวิธีการเขียน Add-on ของ Native และยังนำการปรับปรุงความปลอดภัยและประสิทธิภาพเพิ่มเติม

เพิ่มขึ้น ได้รับการช่วยเหลือ บริษัท ที่ประสบความสำเร็จกับ Node.js เป็นเวลาสี่ปีกับการฝึกอบรมการให้คำปรึกษาหรือการพัฒนา หนึ่งในการดิ้นรนที่ยิ่งใหญ่ที่สุดที่เรามีคือการเพิ่มการพึ่งพาอาศัยในโครงการ

ก่อนที่จะ node.js 8 หากแอปพลิเคชันขึ้นอยู่กับโมดูลที่มีรหัสพื้นเมืองเมื่อใดก็ตามที่รุ่น Node.js ใหม่ที่สำคัญมาถึงในฐานะผู้ดูแลแอปพลิเคชันที่คุณต้องคอมไพล์การอ้างอิงของคุณใหม่ หากคุณโชคดีพวกเขาทำงานในตอนแรก

กระบวนการนี้เป็นไปได้กับผู้ดูแลโมดูลการทำงานอย่างมหาศาลที่ทำให้โมดูลทำงานข้ามเวอร์ชัน node.js ที่เข้ากันไม่ได้ส่วนใหญ่ด้วยความช่วยเหลือของโมดูลที่เรียกว่า Nan (node.js native abstractions)

กระบวนการนี้อยู่ไกลจากอุดมคติเนื่องจาก บริษัท จำนวนมากไม่สามารถอัพเดทการพึ่งพาได้หากไม่สามารถรวบรวมได้และยังใส่ภาระงานพิเศษขนาดใหญ่บนผู้ดูแลโมดูล เพื่อแก้ปัญหานี้มีการแนะนำ Node.js API (หรือ N-API)

01. ป้อน Node.js API

Machine agnostic: Native modules now work with Microsoft’s Chakra as well as different Node.js versions

เครื่องไม่เชื่อเรื่องพระเจ้า: โมดูลพื้นเมืองตอนนี้ทำงานร่วมกับจักระของ Microsoft รวมถึง Node.js รุ่นที่แตกต่างกัน

Node.js API เป็นหนึ่งในการปรับปรุงที่สำคัญที่สุดของ node.js 8. มันนำมาซึ่ง ABI ที่กำหนดไว้อย่างดี (อินเตอร์เฟสไบนารีแอปพลิเคชัน) เป็น node.js เพื่อให้เครื่องเสมือนไม่เชื่อเรื่องพระเจ้า ซึ่งหมายความว่าโมดูลพื้นเมืองจะไม่เพียงทำงานกับรุ่น Node.js ที่แตกต่างกันโดยใช้เอ็นจิ้น V8 JavaScript ของ Google เท่านั้น แต่ยังมีจักระของ Microsoft ด้วย

สำหรับตอนนี้ N-API อยู่ในสถานะทดลองความหมายการเปลี่ยนแปลงที่สำคัญอาจเกิดขึ้นกับการดำเนินการและ API ด้วยสิ่งนี้กล่าวว่าผู้ดูแลระบบโมดูลพื้นเมืองได้รับการสนับสนุนให้ลองใช้อินเทอร์เฟซใหม่และให้ข้อเสนอแนะ

หากคุณเป็นผู้ดูแลโมดูลคุณสามารถปล่อยโมดูลโมดูล N-API ของคุณแบบขนานกับรุ่นโมดูลหลักของคุณ ในการทำเช่นนั้นคำแนะนำอย่างเป็นทางการคือการเผยแพร่โมดูลรุ่นของคุณด้วยแท็ก N-API เป็น NPM

ในการเผยแพร่รุ่น N-API คุณต้อง:

  1. เผยแพร่รุ่นที่ไม่ใช่ N-API ตามปกติ
  2. เผยแพร่เวอร์ชั่น N-API:
  • อัปเดตเวอร์ชันในไฟล์ Package.json โดยการเพิ่มเส้นประและ แท็ก Napi - ดังนั้นหากคุณมี 1.0.0 ก่อนหน้านี้มันจะกลายเป็น 1.0.0-Napi
  • เผยแพร่ไปยัง NPM โดยใช้ NPM Publish - แท็ก N-API

วิธีนี้คุณมั่นใจได้ว่ารุ่น N-API จะไม่กลายเป็นรุ่นล่าสุดดังนั้นหากมีคนติดตั้งโมดูลของคุณโดยค่าเริ่มต้นพวกเขาจะได้รับรุ่นที่ไม่ใช่ N-API

เส้นด้าย, ผู้จัดการแพคเกจที่สร้างขึ้นโดยวิศวกรของ Facebook ได้รับการปล่อยตัวในเดือนตุลาคม 2559 มันพยายามที่จะแก้ไขข้อบกพร่องบางอย่างของลูกค้า NPM อย่างเป็นทางการส่วนใหญ่โดยกลายเป็นนักแสดงและความมุ่งมั่นมากขึ้น นวัตกรรมเหล่านี้ส่วนใหญ่มีจุดเด่นใน NPM 5 เช่นกัน

02. พูดสวัสดีที่ NPM 5

เช่นเดียวกับเส้นด้าย NPM 5 แนะนำกลไกการล็อคไฟล์ - เมื่อใดก็ตามที่คุณติดตั้งการพึ่งพาใหม่ในโครงการของคุณจะถูกเพิ่มโดยอัตโนมัติไม่เพียง แต่ แพคเกจ json แต่ไฟล์ใหม่ที่เรียกว่า แพคเกจ -Lock.json เช่นกัน

คุณอาจถามความแตกต่างระหว่างกัน แพคเกจ -Lock.json และ npm-shrinkwrap.json เนื่องจาก NPM-Shrinkwrap อยู่ใน NPM มาตลอดกาล? เรื่องสั้นสั้นพวกเขาจะเหมือนกัน แต่ แพคเกจ -Lock.json ถูกสร้างขึ้นโดยอัตโนมัติ

จุดประสงค์ของพวกเขาคือการอธิบายสิ่งที่ต้นไม้พึ่งพา NPM ต้องสร้างสำหรับแพ็คเกจของคุณ หากคุณมีทั้ง npm-shrinkwrap จะมีความสำคัญ ตามคำแนะนำของ NPM คุณควรใช้ npm-shrinkwrap.json หากคุณต้องการเผยแพร่ดังนั้นผู้บริโภคโมดูลของคุณจะใช้มันเช่นกัน ในทางกลับกันคุณควรใช้แพคเกจ -Lock.json ภายใน - แม้แต่ตรวจสอบในที่เก็บ

แต่การปรับปรุง NPM 5 ไม่ได้หยุดการเพิ่มไฟล์ล็อค - ด้วยเวอร์ชันใหม่โมดูลทั้งหมดที่คุณติดตั้งจะถูกบันทึกโดยอัตโนมัติเช่นกันและพวกเขาจะถูกเพิ่มเข้ากับคุณ แพคเกจ json และ แพคเกจ -Lock.json ไฟล์.

วิธีการทำงานของสคริปต์ NPM ได้เปลี่ยนไปเล็กน้อย ก่อนอื่นตอนนี้สคริปต์ที่ติดตั้งไว้ล่วงหน้าตอนนี้เรียกใช้ก่อนทุกอย่างอื่นดังนั้นพวกเขาจึงสามารถปรับเปลี่ยนไดเร็กทอรี node_modules ก่อนที่ CLI อ่านจริง นอกจากนี้มีการเพิ่มสคริปต์ใหม่สองสคริปต์ - Prepack และ Postpack พวกเขาทั้งสองวิ่งบน NPM Pack และ NPM เผยแพร่เช่นกัน แต่ไม่ได้อยู่ในการติดตั้ง NPM

ในหัวใจของ node.js เป็นเครื่องยนต์ JavaScript ที่ตีความรหัส JavaScript ของคุณสร้าง Bytecode จากมันและให้แอปพลิเคชันของคุณทำงาน ด้วยการเปิดตัว NODE.JS 8 ใหม่นี้ได้รับการปรับปรุงเช่นกัน

03. อัพเดตเครื่องยนต์ JavaScript

Big news: Node.js will be able to update the V8 engine without a major release

Big News: Node.js จะสามารถอัพเดตเครื่องยนต์ V8 ได้โดยไม่มีการเปิดตัวครั้งใหญ่

ด้วยเครื่องยนต์ V8 ที่อัปเดตการปรับปรุงประสิทธิภาพที่สำคัญ - แต่ที่สำคัญกว่านั้นรับประกันว่าจะมีอินเตอร์เฟสไบนารีแอปพลิเคชันที่รองรับไปข้างหน้า ซึ่งหมายความว่า node.js จะสามารถอัปเดตเครื่องยนต์ V8 ได้โดยไม่มีการเปิดตัว Node.js ที่สำคัญ

นี่เป็นสิ่งสำคัญเนื่องจากเครื่องยนต์ V8 เวอร์ชันที่ใหม่กว่าจะแนะนำ Pipeline คอมไพเลอร์ใหม่ซึ่งจะแนะนำการปรับปรุงประสิทธิภาพเพิ่มเติมให้กับ Node.js. การอัปเดตนี้มีความสำคัญมากจนเป็นเหตุผลที่กำหนดวันวางจำหน่าย Node.js 8 ดั้งเดิมถูกเลื่อนออกไป

ท่อปัจจุบันนั้นซับซ้อนเกินไปและแนะนำคุณสมบัติภาษาใหม่มักจะหมายถึงการสัมผัสหลายส่วนของท่อส่ง ด้วยท่อใหม่มันจะง่ายขึ้นมาก

การจุดระเบิดล่ามใหม่และ Turbofan คอมไพเลอร์เพิ่มประสิทธิภาพใหม่ได้รับการพัฒนาเป็นเวลาเกือบสามปีครึ่ง พวกเขาเป็นรากฐานที่คุณสมบัติภาษาใหม่จะถูกสร้างขึ้น พวกเขารวมถึงประสบการณ์ที่ทีม V8 ที่ Google รวบรวมจากการวัดแอปพลิเคชัน JavaScript ในชีวิตจริง

04. ยินดีต้อนรับ async hooks

เพื่อให้เข้าใจได้ดียิ่งขึ้นสิ่งที่ Async Hooks อยู่ข้างหลังและไปจับด้วยที่เก็บข้อมูลท้องถิ่นต่อเนื่องก่อน พวกเขาทำงานเหมือนการจัดเก็บเธรดท้องถิ่นในการเขียนโปรแกรมเธรด แต่ใน node.js ใช้การเรียกกลับเพื่อส่งต่อบริบท

ลองนึกภาพว่าคุณกำลังเขียนแอปพลิเคชันที่ดึงข้อมูลผลิตภัณฑ์จากฐานข้อมูลจากนั้นคุณต้องการส่งมันในการตอบสนอง HTML ของคุณ:

 Const CreateNamespace = ต้องการ ('ต่อเนื่อง - โลคัลที่เก็บข้อมูล') Createnamespace
Const Session = CreateNamesSpace ('My-App-Session')
Const DB = ต้องการ ('./ db.js')
ฟังก์ชั่น OnRequest (ตัวเลือกถัดไป) {
  db.fetchuserbyid (ตัวเลือก, ฟังก์ชั่น (ข้อผิดพลาด, ผู้ใช้) {
    ถ้า (ข้อผิดพลาด) {
      ส่งคืนถัดไป (ข้อผิดพลาด)
    }
    Session.Set ('ผู้ใช้' ผู้ใช้)
    ต่อไป()
  }) 

ในภายหลังหากคุณต้องการเข้าถึงวัตถุผู้ใช้สิ่งที่คุณต้องทำคือคว้ามันจากที่เก็บข้อมูลในเครื่อง:

 const getNamespace = ต้องการ ('ต่อเนื่อง - ท้องถิ่น - ที่เก็บข้อมูล') getnamespace
Const Session = GetNamespace ('My Session')
Const render = ต้องการ ('./ render.js')
ฟังก์ชั่นเสร็จสิ้น (ตอบกลับ) {
  const ผู้ใช้ = session.get ('ผู้ใช้')
  แสดงผล ({user: user}) ท่อ (ตอบกลับ)
} 

เทคนิคนี้ใช้อย่างกว้างขวางโดยผู้ให้บริการตรวจสอบประสิทธิภาพของแอปพลิเคชันเช่นการติดตามโดย RisingStack เพื่อรักษาบริบทการดำเนินการและรวบรวมข้อมูลการตรวจสอบจากระบบการผลิต

ด้วย async hooks คุณสมบัติที่คล้ายกันจะถูกย้ายไปยังแกน Node.js - ช่วยติดตามคำขอแบบอะซิงโครนัสและตัวจัดการผ่านวงจรชีวิตของพวกเขา ที่ async_hooks โมดูลให้ API ในการลงทะเบียน Callbacks ติดตามอายุการใช้งานของทรัพยากรแบบอะซิงโครนัสที่สร้างขึ้นภายในแอปพลิเคชัน node.js

05. การสนับสนุนสัญญาที่ดีขึ้น

ก่อนที่จะ node.js 8 หากคุณต้องการใช้โมดูลหลักในแอปพลิเคชันที่ใช้สัญญาคุณต้องพันโมดูลหลักด้วยตนเองเพื่อให้สามารถใช้วิธีเดียวกันได้ มันดูแบบนี้:

Const FS = ต้องการ ('FS')
ฟังก์ชั่น readfilepromise (... args) {
  ส่งคืนสัญญาใหม่ ((แก้ไขปฏิเสธ) = & gt; {
    fs.readfile (... args, (ผิดพลาด, ผลลัพธ์) = & gt; {
      ถ้า (ทำผิด) {
        กลับมาแก้ไข (ทำผิดพลาด)
      }
      แก้ไข (ผลลัพธ์)
    })
  })
}
readfilepromise ('./ Package.json', 'UTF-8')
  . จากนั้น ((res) = & gt; console.log (res))
  . catch ((ทำผิดพลาด) = & gt; console.log (err)) 

ด้วย node.js 8 วิธีการใหม่จะถูกเพิ่มเข้าไปในโมดูล Util Core, Util.promisify จะช่วยให้ Node.js มาตรฐาน apis สไตล์การโทรกลับที่จะห่อในฟังก์ชั่นที่ส่งกลับสัญญา

การใช้ฟังก์ชั่นนี้ตัวอย่างข้างต้นนั้นง่ายและกลายเป็นสิ่งนี้:

 Const FS = ต้องการ ('FS')
Const Promisify = ต้องการ ('Util') สัญญา
ReadFilePromise = Promisify (FS.ReadFile)
readfilepromise ('./ Package.json', 'UTF-8')
  . จากนั้น ((res) = & gt; console.log (res))
  . catch ((ทำผิดพลาด) = & gt; console.log (err)) 

06. บัฟเฟอร์ที่ปลอดภัยมากขึ้น

ก่อนที่จะ node.js เวอร์ชัน 8 บัฟเฟอร์ที่จัดสรรโดยใช้บัฟเฟอร์ใหม่ (หมายเลข) ตัวสร้างไม่ได้เริ่มต้นพื้นที่หน่วยความจำกับศูนย์ เป็นผลให้อินสแตนซ์บัฟเฟอร์ใหม่อาจมีข้อมูลที่ละเอียดอ่อนนำไปสู่ปัญหาด้านความปลอดภัยที่ร้ายแรง - แม้แต่โมดูลที่เป็นที่นิยมเช่นพังพอน WS หรือโมดูลคำขอได้รับผลกระทบ

แต่เราไปถึงที่นั่นได้อย่างไร เมื่อจาวาสคริปต์ถูกย้ายจากเบราว์เซอร์ไปยังฝั่งเซิร์ฟเวอร์มีความต้องการการประมวลผลข้อมูลที่รวดเร็วและง่ายดายดังนั้นจึงมีการเพิ่มคลาสบัฟเฟอร์ บัฟเฟอร์เป็นอาร์เรย์ที่ไม่แน่นอนของข้อมูลไบนารี เมื่อใช้กับตัวสร้างที่ขอขนาดของบัฟเฟอร์ใหม่มันจะสงวนพื้นที่หน่วยความจำ แต่ไม่ได้ทำความสะอาด

เนื่องจากเซิร์ฟเวอร์ของคุณสามารถให้บริการผู้ใช้หลายคนในเวลาเดียวกัน (ไม่เหมือนเบราว์เซอร์ของคุณ) เป็นไปได้ว่าพื้นที่หน่วยความจำที่จัดสรรใหม่มีข้อมูลที่ละเอียดอ่อนจากผู้ใช้รายอื่น (แม้แต่รหัสผ่าน!) และอาจสัมผัสกับผู้โจมตีได้

ในขณะที่มันเป็นการตัดสินใจโดยเจตนาที่จะเพิ่มประสิทธิภาพการสร้างบัฟเฟอร์ใหม่สำหรับพวกเราส่วนใหญ่ไม่ใช่การใช้งานที่ตั้งใจไว้แม้ว่าจะมีการบันทึกไว้ ด้วยเหตุนี้เริ่มต้นด้วย node.js 8 บัฟเฟอร์ที่จัดสรรโดยใช้บัฟเฟอร์ใหม่ (หมายเลข) หรือบัฟเฟอร์ (หมายเลข) จะถูกเติมเต็มด้วยศูนย์โดยอัตโนมัติ

07. การเปลี่ยนแปลงในการดีบัก

ก่อนที่จะ node.js 8 ถ้าคุณต้องการที่จะดีบักแอปพลิเคชัน node.js ของคุณหนึ่งในโซลูชั่นที่ง่ายที่สุดคือการเริ่มต้นดีบักเกอร์ในตัวโดยใช้การดีบักโหนด index.js ด้วย node.js 8 นี่คือการลบและแทนที่ด้วย Node-Inspector คุณยังสามารถใช้ดีบักเกอร์ CLI ได้ แต่จะถูกลบออกในไม่ช้า

จากนี้ไปคุณควรใช้โหนด - index.inspect index.js หรือโหนด - index.inspect-brk index.js หากคุณต้องการให้ดีบักเกอร์ใส่เบรกพอยต์ในบรรทัดแรกของแอปพลิเคชัน เมื่อคุณเรียกใช้แล้วคุณจะได้รับลิงค์ WebSocket ที่ Google Chrome สามารถใช้เพื่อเชื่อมต่อ DEBUBGER

คุณควรตรงไปที่ Chrome: // ตรวจสอบ ในเบราว์เซอร์ Chrome ของคุณและจะจดจำแอปพลิเคชันการรัน node.js โดยอัตโนมัติทำให้คุณสามารถเชื่อมต่อได้ หลังจากที่คุณเชื่อมต่อกับกระบวนการของคุณแล้วคุณจะได้รับดีบักเกอร์ของ Chrome เพื่อตรวจสอบแอปพลิเคชัน Node.js ที่ใช้งานของคุณ

08. การแนะนำรหัสข้อผิดพลาดแบบคงที่

ก่อนหน้านี้หากคุณต้องการตรวจสอบข้อผิดพลาดที่คุณได้รับในรันไทม์และปฏิบัติตามในกรณีส่วนใหญ่คุณต้องตรวจสอบข้อความแสดงข้อผิดพลาด นี่คือข้อผิดพลาดมีแนวโน้มที่จะเป็นข้อความแสดงข้อผิดพลาดอาจมีการเปลี่ยนแปลงด้วย Node.js รุ่นใหม่

ด้วย node.js 8, รหัสข้อผิดพลาดคงที่ได้รับการกำหนดให้กับข้อผิดพลาดส่วนใหญ่ - มันยังคงเป็นงานในความคืบหน้า แต่เมื่อเสร็จแล้วรหัสข้อผิดพลาดเหล่านี้จะไม่เปลี่ยนแปลงแม้ว่าข้อความในข้อผิดพลาดจะทำ .

ตัวอย่างเช่นการแนะนำใหม่ Whatwg Url API จะโยน err_invalid_url ข้อผิดพลาดในตัวอย่างต่อไปนี้เนื่องจากพารามิเตอร์ไม่ใช่ URL ที่ถูกต้อง:

 Const URL = ต้องการ ('URL') URL
Const Myurl = URL ใหม่ ('/ Foo') 

อย่างที่คุณเห็นการเปิดตัวการอัปเดต Node.js 8 ได้นำการปรับปรุงใหม่และน่าตื่นเต้นไปสู่ชุมชนจาวาสคริปต์ ในการเริ่มทดลองกับคุณสมบัติใหม่ทั้งหมดเหล่านี้ด้วยตัวเองให้ตรงไปที่ nodejs.org ดาวน์โหลด Node.js 8 Binary และเริ่มเล่นกับชุดเครื่องมือใหม่ของคุณ!

บทความนี้ปรากฏในเดิม นิตยสารสุทธิ ปัญหา 296 ซื้อที่นี่ .

บทความที่เกี่ยวข้อง:

  • 20 โมดูล node.js ที่คุณต้องรู้
  • 30 ส่วนขยาย Chrome สำหรับนักออกแบบเว็บไซต์และ Devs
  • 3 วิธีอันดับต้น ๆ ในการสร้างต้นแบบเว็บไซต์

วิธีการ - บทความยอดนิยม

เริ่มต้นด้วย Redux Thunk

วิธีการ Sep 11, 2025

รัฐเป็นส่วนใหญ่ของแอปพลิเคชั่นตอบสนองซึ่งเป..


ทีละขั้นตอน: วิธีการเลียนแบบสีน้ำมันใน Corel Painter

วิธีการ Sep 11, 2025

มันรู้สึกเหมือนเมื่อวานนี้เมื่อฉันเล่นตามบทบาทกับเพื่อนในโรงเรี�..


สร้างเอฟเฟกต์ข้อความนีออนที่เร่าร้อน

วิธีการ Sep 11, 2025

บ่อยครั้งที่มันเป็นผลกระทบที่ง่ายที่สุดที่ด..


สร้างข้อความ 3 มิติใน Photoshop: คู่มือทีละขั้นตอน

วิธีการ Sep 11, 2025

ในการกวดวิชานี้เราจะแสดงวิธีการสร้างชิ้นส่ว..


วิธีการสร้างเอฟเฟกต์การพิมพ์ภาพเคลื่อนไหว

วิธีการ Sep 11, 2025

เมื่อใช้งานได้ดี ภาพเคลื่อนไหว CSS สามารถเพิ่มความสนใจ�..


วิธีการสร้างแอปมือถือด้วย Origami Studio

วิธีการ Sep 11, 2025

ในโลกที่ผู้ใช้มีความคาดหวังสูงในการสร้างประสบการณ์บนเว็บและมือถ�..


วิธีการตั้งชื่อตัวแทนออกแบบเว็บของคุณ

วิธีการ Sep 11, 2025

การได้รับชื่อที่ถูกต้องสำหรับเอเจนซี่ของคุณ..


เพิ่มแผนภูมิ D3.JS ด้วยการไล่ระดับสี SVG

วิธีการ Sep 11, 2025

Nadieh Bremer จะอยู่ที่ สร้างลอนดอน ในเด�..


หมวดหมู่