เป้าหมายหลักประการหนึ่งของการสร้างรันไทม์ใหม่สำหรับ JavaScript คือการจัดหาสภาพแวดล้อมที่ปลอดภัยยิ่งขึ้น เพื่อปรับปรุงความปลอดภัย เอ็นจิ้น V8 เขียนด้วยภาษา Rust ซึ่งหลีกเลี่ยงช่องโหว่มากมายที่เกิดขึ้นจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงหลังจากฟรี การยกเลิกการอ้างอิงตัวชี้ค่าว่าง และการโอเวอร์รันบัฟเฟอร์ แพลตฟอร์มนี้ใช้เพื่อประมวลผลคำขอในโหมดไม่บล็อก
หลัก
- การกำหนดค่าเริ่มต้นที่มุ่งเน้นความปลอดภัย การเข้าถึงไฟล์ เครือข่าย และการเข้าถึงตัวแปรสภาพแวดล้อมถูกปิดใช้งานตามค่าเริ่มต้น และจะต้องเปิดใช้งานอย่างชัดเจน
- การสนับสนุนภาษา TypeScript ในตัวนอกเหนือจาก JavaScript
- รันไทม์มาในรูปแบบของไฟล์ปฏิบัติการที่มีอยู่ในตัวเองไฟล์เดียว ("deno") หากต้องการเรียกใช้แอปพลิเคชันโดยใช้ Deno ก็เพียงพอแล้ว
ดาวน์โหลด สำหรับแพลตฟอร์มไฟล์ปฏิบัติการหนึ่งไฟล์ขนาดประมาณ 10 MB ซึ่งไม่มีการพึ่งพาภายนอกและไม่จำเป็นต้องติดตั้งพิเศษใด ๆ บนระบบ - เมื่อเริ่มต้นโปรแกรมรวมทั้งโหลดโมดูลคุณสามารถใช้การกำหนดที่อยู่ 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()
ที่มา: opennet.ru