เรียนรู้ Deno และไปไกลกว่า Node.js

เผยแพร่แล้ว: 2023-04-20

แม้ว่า Node.js จะยังคงเป็นรันไทม์ JavaScript ฝั่งเซิร์ฟเวอร์ที่มีผู้ใช้มากที่สุดโดยมีอัตรากำไรที่มาก แต่รันไทม์ทางเลือกอย่าง Deno และ Bun ก็ได้รับความสนใจในขณะที่พวกเขาพยายามปรับปรุงแนวคิด Node.js

Deno ซึ่งเป็นรันไทม์รุ่นใหม่ที่ได้รับความนิยมมากกว่า 2 รันไทม์ แก้ไขปัญหาด้านความปลอดภัยบางอย่างที่มีอยู่ใน Node.js และให้การสนับสนุนที่ครอบคลุมยิ่งขึ้นสำหรับเทคโนโลยี เช่น TypeScript และ WebAssembly

ในบทความนี้ คุณจะได้สำรวจข้อมูลพื้นฐานเกี่ยวกับ Deno เรียนรู้วิธีการเปรียบเทียบกับ Node.js และ Bun และติดตามการสาธิตเชิงปฏิบัติที่ใช้ Deno เพื่อสร้างเว็บเซิร์ฟเวอร์ HTTP อย่างง่าย

เดโนคืออะไร?

เมื่อนักพัฒนาคุ้นเคยกับ JavaScript พวกเขาเห็นศักยภาพในการเขียนโปรแกรมบนเครื่องท้องถิ่น ดังนั้น พวกเขาจึงสร้างรันไทม์ฝั่งเซิร์ฟเวอร์ ซึ่งเป็นสภาพแวดล้อมที่เปิดใช้งานการรันโค้ด JavaScript บนเครื่องโดยไม่ต้องใช้เบราว์เซอร์

Ryan Dahl พัฒนา Node.js เพื่อจุดประสงค์นี้ และต่อมาได้สร้าง Deno เพื่อแก้ไขปัญหาบางอย่างที่เขาพบกับการออกแบบ Node.js ดั้งเดิม ข้อบกพร่องที่โดดเด่นบางประการ ได้แก่ การพึ่งพาโปรแกรมจัดการแพ็คเกจแบบรวมศูนย์ เช่น npm การไม่มีไลบรารี่มาตรฐาน และการตั้งค่าความปลอดภัยที่หละหลวมโดยค่าเริ่มต้น

ข้อได้เปรียบหลักบางประการของ Deno ได้แก่:

  • ความ ปลอดภัยตามค่าเริ่มต้น — ผู้ใช้ต้องให้สิทธิ์อย่างชัดเจนสำหรับรหัสเพื่อเข้าถึงเครือข่าย ระบบไฟล์ หรือสภาพแวดล้อม
  • การสนับสนุนในตัวสำหรับ TypeScript และ WebAssembly — การเรียกใช้โปรแกรม TypeScript และ WebAssembly ใน Deno นั้นง่ายเหมือนกับการเรียกใช้โปรแกรม JavaScript รันไทม์รวบรวมภาษาเช่นเดียวกับ JavaScript
  • ผู้จัดการ แพ็คเกจ แบบรวมศูนย์ — แทนที่จะใช้ที่เก็บแพ็คเกจเช่น npm หรือตัวจัดการแพ็คเกจของ Bun Deno สามารถนำเข้าโค้ดโดยตรงจาก URL ความสามารถนี้หมายความว่าคุณสามารถโหลดการอ้างอิงจากที่ใดก็ตามที่โฮสต์อยู่ รวมถึงที่เก็บ GitHub เซิร์ฟเวอร์ หรือ CDN ของคุณ Deno ยังเสนอบริการโฮสต์สคริปต์เพื่อการเข้าถึงที่ง่ายยิ่งขึ้น
  • การปฏิบัติตามมาตรฐานเว็บ — Deno มีเป้าหมายที่จะปฏิบัติตาม API เดียวกันกับที่เบราว์เซอร์ทำ ซึ่งหมายความว่าโค้ดที่เขียนขึ้นสำหรับเบราว์เซอร์สามารถแปลเป็นรันไทม์ได้อย่างง่ายดาย

บริษัทขนาดใหญ่และผู้เล่นรายใหญ่ในอุตสาหกรรมเช่น Slack, Netlify และ Supabase ได้นำ Deno มาใช้ แต่การยอมรับในหมู่นักพัฒนาเว็บนั้นแพร่หลายน้อยกว่า จากการสำรวจ Stack Overflow ในปี 2022 นักพัฒนามืออาชีพเพียง 1.47% ที่ตอบแบบสำรวจใช้ Deno ในขณะที่ 46.31% รายงานว่าใช้ Node.js

Deno จะเป็นอนาคตของการพัฒนาเว็บไซต์ได้หรือไม่? ค้นพบประโยชน์ของมัน ดูว่ามันเทียบชั้นกับ Node.js & Bun ได้อย่างไร และลองสาธิตการใช้งานจริง ทั้งหมดนี้อยู่ในคู่มือนี้! คลิกเพื่อทวีต

ดีโน่ทำอะไร?

เช่นเดียวกับรันไทม์ JavaScript อื่นๆ Deno ช่วยให้นักพัฒนาเรียกใช้ JavaScript บนฝั่งเซิร์ฟเวอร์ได้ ด้วยเหตุนี้ คุณสามารถใช้ Deno เพื่อทำงานด้านการเขียนโปรแกรมที่หลากหลายให้สำเร็จได้

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

คุณยังสามารถใช้ Deno สำหรับงานการเขียนโปรแกรมระดับล่าง เช่น การสร้างเครื่องมือบรรทัดคำสั่งเพื่อจัดการงานที่ต้องทำผ่านเทอร์มินัล กล่าวอีกนัยหนึ่ง คุณสามารถใช้ Deno เพื่อบรรลุเป้าหมายเดียวกันกับที่คุณทำได้โดยใช้ภาษาเช่น Python หรือ Ruby

ดีโน vs โหนด

Deno ตั้งเป้าหมายที่จะปรับปรุงเหนือ Node.js และปฏิบัติตามคำมั่นสัญญานั้นในหลายประเด็นสำคัญ Deno ปรับปรุงความปลอดภัยโดยเปิดใช้งานการกำหนดค่าการเข้าถึงที่ละเอียดยิ่งขึ้นสำหรับโมดูลรหัสต่างๆ นอกจากนี้ยังมุ่งเน้นไปที่การปฏิบัติตามมาตรฐาน API ของเว็บ ซึ่งช่วยให้นักพัฒนาสามารถใช้รหัสเดียวกันได้ทั้งบนเบราว์เซอร์และฝั่งเซิร์ฟเวอร์

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

Node.js เป็นรันไทม์ JavaScript ที่ได้รับความนิยมมากที่สุดและได้รวบรวมระบบนิเวศขนาดใหญ่ของแพ็คเกจที่เขียนไว้ล่วงหน้าและชุมชนผู้ใช้ขนาดใหญ่ที่ใช้งานอยู่ ทรัพยากรที่มีค่าเหล่านี้ช่วยให้ Node.js ยังคงเป็นรันไทม์ที่น่าดึงดูดอย่างยิ่ง

ในทางตรงกันข้าม Deno เป็นเวอร์ชันใหม่: เวอร์ชัน 1.0 เปิดตัวในเดือนพฤษภาคม 2020 ดังนั้นนักพัฒนาค่อนข้างน้อยที่มีเวลาเล่นกับมัน การเรียนรู้เครื่องมือใหม่ทำให้ระยะเวลาในการพัฒนายาวนานขึ้น นอกจากนี้ยังไม่ชัดเจนว่า Deno จะนำประโยชน์ที่สำคัญมาสู่โครงการง่ายๆ มากมายหรือไม่

แต่ถ้าคุณกำลังสร้างแอปพลิเคชันในพื้นที่ที่การรักษาความปลอดภัยเป็นสิ่งสำคัญ เช่น การเงิน ความสามารถด้านการรักษาความปลอดภัยของ Deno อาจทำให้คุ้มค่ากับการเปลี่ยนมาใช้

เดนโอ vs บัน

อดีตวิศวกร Stripe Jarred Sumner เปิดตัว Bun ครั้งแรกในเดือนกรกฎาคม 2565 สำหรับการทดสอบเบต้า Bun เป็นรันไทม์เชิงทดลองมากกว่า Deno และได้รับการออกแบบมาให้มีความเข้ากันได้ย้อนหลังกับ Node.js ซึ่งแตกต่างจาก Deno

นอกจากนี้ Bun ยังอวดอ้างประสิทธิภาพการทำงานที่รวดเร็วอย่างน่าทึ่ง ซึ่งเหนือกว่า Node.js และ Deno คุณลักษณะสำคัญช่วยให้ความสามารถเหล่านี้:

  • เครื่องมือที่ดีกว่า — แทนที่จะใช้ V8 JavaScript และเครื่องมือ Web Assembly ของ Google Bun ใช้ JavaScriptCore ที่เร็วกว่าและมีประสิทธิภาพมากกว่าเป็นเครื่องมือ JavaScript พื้นฐาน
  • การควบคุมโค้ดที่มากขึ้น — Bun เขียนด้วย Zig ซึ่งเป็นภาษาระดับต่ำที่ให้การควบคุมที่มากกว่า JavaScript ในการเรียกใช้โค้ด
  • ประสิทธิภาพที่ปรับแต่งอย่างละเอียด — ทีมงานที่ทำงานเกี่ยวกับ Bun ให้ความสำคัญกับการสร้างโปรไฟล์ การเปรียบเทียบ และการเพิ่มประสิทธิภาพระหว่างการพัฒนาเพื่อให้แน่ใจว่าโค้ดมีประสิทธิภาพ

Bun นั้นใหม่มาก มีการสนับสนุนจากชุมชนค่อนข้างน้อยที่จะช่วยแก้ไขปัญหา อย่างไรก็ตาม Bun เป็นเรื่องสนุกสำหรับการทดลอง ทีมที่ต้องการการเพิ่มประสิทธิภาพโดยเฉพาะอาจพบว่า Bun มีประโยชน์สำหรับโครงการของตน แต่การพัฒนาเว็บไซต์มักให้ความสำคัญกับปัจจัยอื่นที่ไม่ใช่ประสิทธิภาพ

เริ่มต้นใช้งาน Deno

ตอนนี้คุณได้เรียนรู้เล็กน้อยเกี่ยวกับ Deno และวิธีเปรียบเทียบกับรันไทม์ JavaScript ยอดนิยมอื่น ๆ แล้วก็ถึงเวลาดูว่ามันทำงานอย่างไร ในส่วนนี้ คุณจะได้เรียนรู้วิธีสร้างเซิร์ฟเวอร์อย่างง่ายใน Deno ที่ตอบสนองต่อคำขอ HTTP ด้วย "สวัสดีจากเซิร์ฟเวอร์!"

การติดตั้ง Deno

คุณสามารถติดตั้ง Deno บนเครื่องเป็นไฟล์ปฏิบัติการแบบไบนารีได้โดยใช้คำแนะนำในการติดตั้งเหล่านี้จากเอกสารอย่างเป็นทางการ ตัวอย่างเช่น บน macOS คุณอาจติดตั้ง Deno ด้วยคำสั่ง brew install deno

อีกวิธีในการเริ่มทำงานกับ Deno คือการติดตั้งเป็นแพ็คเกจ npm ดังนี้:

สร้างโฟลเดอร์สำหรับโครงการของคุณ (อาจจะ เป็น deno_example ) และเรียกใช้คำสั่ง npm init ภายในนั้น (คุณสามารถยอมรับตัวเลือกเริ่มต้นทั้งหมดที่แนะนำโดย init เนื่องจากมันสร้างไฟล์ package.json พื้นฐาน)

หลังจากเริ่มต้นแอปพลิเคชันของคุณ ให้รัน npm install deno-bin เพื่อติดตั้งแพ็คเกจ Deno binary ตอนนี้คุณสามารถอัปเดตไฟล์ package.json เพื่อเปิดใช้งานการเรียกใช้แอปพลิเคชันด้วย npm start เพิ่มบรรทัดตัวหนาด้านล่างให้กับคุณสมบัติออบเจกต์ "สคริปต์" ในไฟล์ package.json เริ่มต้น:

 "scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },

การเพิ่มสคริปต์นี้ทำให้ Deno สามารถเรียกใช้โมดูล app.ts ด้วยสิทธิ์เครือข่าย ( --allow-net ) โปรดจำไว้ว่าเมื่อทำงานกับ Deno คุณต้องอนุญาตการเข้าถึงเครือข่ายหรือระบบไฟล์อย่างชัดเจน

ตอนนี้ คุณก็พร้อมที่จะสร้างโมดูล app.ts แล้ว โดยมีหน้าที่รับฟังพอร์ตและให้บริการตามคำขอของผู้ใช้

การสร้างโมดูล App.ts

การสร้างเซิร์ฟเวอร์พื้นฐานใน Deno นั้นง่ายมาก ขั้นแรก สร้างไฟล์ app.ts และวางโค้ดต่อไปนี้:

 import { serve } from "https://deno.land/[email protected]/http/server.ts"; serve((_req) => new Response("Hello from the server!"), { port: 8000 });

รหัสใช้ฟังก์ชัน serve จาก server.ts Deno library ที่จัดเก็บไว้ในเว็บไซต์อย่างเป็นทางการของ Deno.land รหัสนี้ยังมีตัวจัดการฟังก์ชัน serve สำหรับคำขอที่เข้ามา ฟังก์ชันตัวจัดการตอบสนองทุกคำขอด้วย "สวัสดีจากเซิร์ฟเวอร์!"

ฟังก์ชัน serve ยังใช้พารามิเตอร์ทางเลือก เช่น หมายเลขพอร์ตที่คุณต้องการให้บริการ ในที่นี้ ตัวอย่างโค้ดใช้พารามิเตอร์เหล่านี้เพื่อให้บริการบนพอร์ต 8000

ถัดไป เริ่มต้นเซิร์ฟเวอร์ด้วยการเรียกใช้ npm start สิ่งนี้ควรเปิดใช้เซิร์ฟเวอร์ที่รับฟัง localhost:8000 และตอบกลับคำขอด้วยการทักทาย

เซิร์ฟเวอร์ Deno กำลังดำเนินการ
เซิร์ฟเวอร์ Deno กำลังดำเนินการ

หากคุณต้องการขยายเซิร์ฟเวอร์เป็น API เต็มรูปแบบ คุณอาจต้องเพิ่มการเชื่อมต่อฐานข้อมูล ทำได้ง่ายเนื่องจากชุมชน Deno ได้สร้างไดรเวอร์ที่รองรับฐานข้อมูลยอดนิยม เช่น MariaDB/MySQL, PostgreSQL, MongoDB และอื่นๆ

Deno ให้ความปลอดภัยเป็นพิเศษ & ประสบการณ์การพัฒนาที่ดีกว่า แต่มันเหมาะกับคุณหรือไม่? เจาะลึกคู่มือนี้เพื่อดูว่าเปรียบเทียบกับ Node.js & Bun Click to Tweet อย่างไร

สรุป

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

Node.js ทำงานได้ดีสำหรับโครงการส่วนใหญ่ มีระบบนิเวศขนาดใหญ่และชุมชนขนาดใหญ่ที่สามารถช่วยเหลือในสถานการณ์การแก้ไขปัญหาที่หลากหลาย

Deno ได้รับประโยชน์จากการรักษาความปลอดภัยเพิ่มเติมและประสบการณ์นักพัฒนาที่ดีขึ้น ในขณะเดียวกัน ก็เหมาะที่สุดสำหรับทีมที่มีประสบการณ์ เพื่อให้ผลประโยชน์มีมากกว่าเวลาและต้นทุนแรงงานในการเรียนรู้รันไทม์ที่ไม่คุ้นเคย

สุดท้าย แม้ว่า Bun จะเป็นการทดลองมากเกินไปสำหรับโปรเจ็กต์ระดับมืออาชีพส่วนใหญ่ มันเป็นรันไทม์ที่ไม่ซ้ำใครและสนุกสำหรับการเลือกสำหรับโปรเจ็กต์ส่วนตัวหรือเพื่อขยาย

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

ในขณะเดียวกัน ฝึกฝนการสับ Deno ของคุณโดยสมัครใช้งาน Application Hosting Hobby Tier ของ Kinsta — เขียนโค้ดตอนนี้และปรับขนาดในภายหลัง