ผู้เขียน Node.js นำเสนอแพลตฟอร์ม JavaScript ที่ปลอดภัย Deno 1.0

หลังจากสองปีของการพัฒนา นำเสนอ การเปิดตัวครั้งใหญ่ครั้งแรก ดีโน่ 1.0ซึ่งเป็นแพลตฟอร์มสำหรับการดำเนินการแอปพลิเคชันแบบสแตนด์อโลนใน JavaScript และ TypeScript ซึ่งสามารถใช้เพื่อสร้างตัวจัดการที่ทำงานบนเซิร์ฟเวอร์ แพลตฟอร์มดังกล่าวได้รับการพัฒนาโดย Ryan Dahl (ไรอัน ดาห์ล) ผู้สร้าง Node.js เช่นเดียวกับ Node.js Deno ใช้เครื่องมือ JavaScript V8ซึ่งใช้ในเบราว์เซอร์ที่ใช้ Chromium เช่นกัน ในเวลาเดียวกัน Deno ไม่ใช่ทางแยกของ Node.js แต่เป็นโครงการใหม่ที่สร้างขึ้นตั้งแต่เริ่มต้น รหัสโครงการ จัดจำหน่ายโดย ภายใต้ใบอนุญาต MIT แอสเซมบลี เตรียมไว้ สำหรับ Linux, Windows และ macOS

หมายเลขเวอร์ชันที่สำคัญนั้นสัมพันธ์กับการรักษาเสถียรภาพของ API ในเนมสเปซ Deno ซึ่งมีหน้าที่รับผิดชอบในการโต้ตอบของแอปพลิเคชันกับระบบปฏิบัติการ ซอฟต์แวร์อินเทอร์เฟซที่มีอยู่จนถึงปัจจุบัน ไม่เสถียรจะถูกซ่อนไว้ตามค่าเริ่มต้นและใช้ได้เฉพาะเมื่อทำงานในโหมด "--ไม่เสถียร" เมื่อมีการสร้างเวอร์ชันใหม่ API ดังกล่าวจะค่อยๆ มีความเสถียร API ในเนมสเปซส่วนกลาง ซึ่งรวมถึงฟังก์ชันทั่วไป เช่น setTimeout() และ fetch() นั้นใกล้เคียงกับ API ของเว็บเบราว์เซอร์ทั่วไปมากที่สุด และได้รับการพัฒนาตามมาตรฐานเว็บสำหรับเบราว์เซอร์ API ที่ให้บริการโดย Rust ซึ่งใช้โดยตรงในโค้ดแพลตฟอร์ม รวมถึงอินเทอร์เฟซสำหรับการพัฒนาปลั๊กอินสำหรับรันไทม์ Deno ยังไม่เสถียรและพัฒนาต่อไป

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

หลัก คุณสมบัติ เดโน่:

  • การกำหนดค่าเริ่มต้นที่มุ่งเน้นความปลอดภัย การเข้าถึงไฟล์ เครือข่าย และการเข้าถึงตัวแปรสภาพแวดล้อมจะถูกปิดใช้งานตามค่าเริ่มต้น และจะต้องเปิดใช้งานอย่างชัดเจน โดยค่าเริ่มต้น แอปพลิเคชันจะทำงานในสภาพแวดล้อมแบบแซนด์บ็อกซ์แบบแยก และไม่สามารถเข้าถึงความสามารถของระบบโดยไม่ได้รับสิทธิ์ที่ชัดเจน
  • การสนับสนุน TypeScript ในตัวนอกเหนือจาก JavaScript คอมไพเลอร์ TypeScript มาตรฐานใช้เพื่อตรวจสอบประเภทและสร้าง JavaScript ซึ่งนำไปสู่ประสิทธิภาพการทำงานเมื่อเทียบกับการแยกวิเคราะห์ JavaScript ใน V8 ในอนาคต เราวางแผนที่จะเตรียมการใช้ระบบตรวจสอบประเภท TypeScript ของเราเอง ซึ่งจะปรับปรุงประสิทธิภาพการประมวลผล TypeScript ตามลำดับความสำคัญ
  • รันไทม์มาในรูปแบบของไฟล์ปฏิบัติการที่มีอยู่ในตัวเองไฟล์เดียว ("deno") หากต้องการเรียกใช้แอปพลิเคชันโดยใช้ Deno ก็เพียงพอแล้ว ดาวน์โหลด สำหรับแพลตฟอร์มจะมีไฟล์ปฏิบัติการหนึ่งไฟล์ขนาดประมาณ 20 MB ซึ่งไม่มีการพึ่งพาภายนอกและไม่จำเป็นต้องติดตั้งพิเศษใด ๆ บนระบบ ยิ่งกว่านั้น deno ไม่ใช่แอปพลิเคชันเสาหิน แต่เป็นชุดของแพ็คเกจลังใน Rust (deno_core, สนิม_v8) ซึ่งสามารถใช้แยกกันได้
  • เมื่อเริ่มต้นโปรแกรมรวมทั้งโหลดโมดูลคุณสามารถใช้การกำหนดที่อยู่ URL ได้ ตัวอย่างเช่น หากต้องการรันโปรแกรมยินดีต้อนรับ js คุณสามารถใช้คำสั่ง “deno https://deno.land/std/examples/welcome.js” โค้ดจากแหล่งข้อมูลภายนอกจะถูกดาวน์โหลดและแคชไว้บนระบบโลคัล แต่จะไม่มีการอัพเดตโดยอัตโนมัติ (การอัปเดตจำเป็นต้องรันแอปพลิเคชันอย่างชัดเจนด้วยแฟล็ก "--reload")
  • การประมวลผลคำขอเครือข่ายอย่างมีประสิทธิภาพผ่าน HTTP ในแอปพลิเคชัน แพลตฟอร์มนี้ออกแบบมาเพื่อสร้างแอปพลิเคชันเครือข่ายประสิทธิภาพสูง
  • ความสามารถในการสร้างเว็บแอปพลิเคชันสากลที่สามารถดำเนินการได้ทั้งใน Deno และในเว็บเบราว์เซอร์ทั่วไป
  • ความพร้อมใช้งาน ชุดโมดูลมาตรฐานการใช้งานที่ไม่ต้องการการเชื่อมโยงกับการพึ่งพาภายนอก โมดูลจากคอลเลกชันมาตรฐานได้ผ่านการตรวจสอบเพิ่มเติมและการทดสอบความเข้ากันได้
  • นอกเหนือจากรันไทม์แล้ว แพลตฟอร์ม Deno ยังทำหน้าที่เป็นผู้จัดการแพ็คเกจและช่วยให้คุณเข้าถึงโมดูลด้วย URL ภายในโค้ด ตัวอย่างเช่น หากต้องการโหลดโมดูล คุณสามารถระบุในโค้ด “import * as log from “https://deno.land/std/log/mod.ts” ไฟล์ที่ดาวน์โหลดจากเซิร์ฟเวอร์ภายนอกผ่าน URL จะถูกแคชไว้ การผูกเข้ากับเวอร์ชันของโมดูลถูกกำหนดโดยการระบุหมายเลขเวอร์ชันภายใน URL เช่น “https://unpkg.com/[ป้องกันอีเมล]/dist/liltest.js";
  • โครงสร้างประกอบด้วยระบบการตรวจสอบการพึ่งพาแบบรวม (คำสั่ง “deno info”) และยูทิลิตี้สำหรับการจัดรูปแบบโค้ด (deno fmt)
  • สคริปต์แอปพลิเคชันทั้งหมดสามารถรวมเป็นไฟล์ JavaScript เดียวได้

ความแตกต่างจาก Node.js:

  • Deno ไม่ได้ใช้ตัวจัดการแพ็คเกจ npm
    และไม่เชื่อมโยงกับที่เก็บข้อมูล โมดูลต่างๆ ได้รับการแก้ไขผ่าน URL หรือเส้นทางของไฟล์ และสามารถวางโมดูลบนเว็บไซต์ใดๆ ก็ได้
  • Deno ไม่ได้ใช้ "package.json" เพื่อกำหนดโมดูล
  • ความแตกต่างของ API การดำเนินการแบบอะซิงโครนัสทั้งหมดใน Deno ส่งคืนสัญญา
  • Deno ต้องการคำจำกัดความที่ชัดเจนของการอนุญาตที่จำเป็นทั้งหมดสำหรับไฟล์ ตัวแปรเครือข่ายและสภาพแวดล้อม
  • ข้อผิดพลาดทั้งหมดที่ไม่ได้มาพร้อมกับตัวจัดการจะนำไปสู่การยุติแอปพลิเคชัน
  • Deno ใช้ระบบโมดูล ECMAScript และไม่รองรับ need();
  • เซิร์ฟเวอร์ HTTP ในตัวของ Deno เขียนด้วย TypeScript และทำงานบนซ็อกเก็ต TCP ดั้งเดิม ในขณะที่เซิร์ฟเวอร์ HTTP ของ Node.js เขียนด้วยภาษา C และจัดให้มีการเชื่อมโยงสำหรับ JavaScript นักพัฒนาของ Deno มุ่งเน้นไปที่การเพิ่มประสิทธิภาพเลเยอร์ซ็อกเก็ต TCP ทั้งหมด และจัดให้มีอินเทอร์เฟซทั่วไปมากขึ้น เซิร์ฟเวอร์ Deno HTTP ให้ปริมาณงานต่ำกว่า แต่รับประกันเวลาแฝงต่ำที่คาดการณ์ได้ ตัวอย่างเช่น ในการทดสอบ แอปพลิเคชันธรรมดาที่ใช้เซิร์ฟเวอร์ Deno HTTP สามารถประมวลผลคำขอได้ 25 คำขอต่อวินาที โดยมีเวลาแฝงสูงสุด 1.3 มิลลิวินาที ใน Node.js แอปพลิเคชันที่คล้ายกันประมวลผลคำขอ 34 คำขอต่อวินาที แต่เวลาแฝงอยู่ระหว่าง 2 ถึง 300 มิลลิวินาที
  • Deno เข้ากันไม่ได้กับแพ็คเกจสำหรับ Node.js (NPM) แต่กำลังได้รับการพัฒนาแยกกัน อินเตอร์เลเยอร์ เพื่อความเข้ากันได้กับไลบรารี Node.js มาตรฐาน ในขณะที่พัฒนาขึ้น แอปพลิเคชันที่เขียนขึ้นสำหรับ Node.js จะสามารถทำงานใน Deno ได้มากขึ้นเรื่อยๆ
  • ที่มา: opennet.ru

เพิ่มความคิดเห็น