หลังจากสองปีของการพัฒนา
หมายเลขเวอร์ชันที่สำคัญนั้นสัมพันธ์กับการรักษาเสถียรภาพของ API ในเนมสเปซ Deno ซึ่งมีหน้าที่รับผิดชอบในการโต้ตอบของแอปพลิเคชันกับระบบปฏิบัติการ ซอฟต์แวร์อินเทอร์เฟซที่มีอยู่จนถึงปัจจุบัน
แรงจูงใจหลักในการสร้างแพลตฟอร์ม JavaScript ใหม่คือความปรารถนาที่จะกำจัดข้อผิดพลาดทางแนวคิด
หลัก
- การกำหนดค่าเริ่มต้นที่มุ่งเน้นความปลอดภัย การเข้าถึงไฟล์ เครือข่าย และการเข้าถึงตัวแปรสภาพแวดล้อมจะถูกปิดใช้งานตามค่าเริ่มต้น และจะต้องเปิดใช้งานอย่างชัดเจน โดยค่าเริ่มต้น แอปพลิเคชันจะทำงานในสภาพแวดล้อมแบบแซนด์บ็อกซ์แบบแยก และไม่สามารถเข้าถึงความสามารถของระบบโดยไม่ได้รับสิทธิ์ที่ชัดเจน
- การสนับสนุน 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