เรียนรู้ 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
ดีโน่ทำอะไร?
เช่นเดียวกับรันไทม์ 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
และตอบกลับคำขอด้วยการทักทาย
หากคุณต้องการขยายเซิร์ฟเวอร์เป็น API เต็มรูปแบบ คุณอาจต้องเพิ่มการเชื่อมต่อฐานข้อมูล ทำได้ง่ายเนื่องจากชุมชน Deno ได้สร้างไดรเวอร์ที่รองรับฐานข้อมูลยอดนิยม เช่น MariaDB/MySQL, PostgreSQL, MongoDB และอื่นๆ
อย่างไรสรุป
รันไทม์มีตั้งแต่ทั่วไปและเชื่อถือได้ไปจนถึงการทดลองมาก การเลือกสิ่งที่ถูกต้องสำหรับโครงการของคุณขึ้นอยู่กับโครงการของคุณ และวิธีที่คุณต้องการให้รันไทม์ช่วยให้คุณบรรลุเป้าหมาย
Node.js ทำงานได้ดีสำหรับโครงการส่วนใหญ่ มีระบบนิเวศขนาดใหญ่และชุมชนขนาดใหญ่ที่สามารถช่วยเหลือในสถานการณ์การแก้ไขปัญหาที่หลากหลาย
Deno ได้รับประโยชน์จากการรักษาความปลอดภัยเพิ่มเติมและประสบการณ์นักพัฒนาที่ดีขึ้น ในขณะเดียวกัน ก็เหมาะที่สุดสำหรับทีมที่มีประสบการณ์ เพื่อให้ผลประโยชน์มีมากกว่าเวลาและต้นทุนแรงงานในการเรียนรู้รันไทม์ที่ไม่คุ้นเคย
สุดท้าย แม้ว่า Bun จะเป็นการทดลองมากเกินไปสำหรับโปรเจ็กต์ระดับมืออาชีพส่วนใหญ่ มันเป็นรันไทม์ที่ไม่ซ้ำใครและสนุกสำหรับการเลือกสำหรับโปรเจ็กต์ส่วนตัวหรือเพื่อขยาย
สรุปแล้ว Deno ให้ความสมดุลระหว่างประโยชน์ของ Node.js และความเป็นไปได้ในการทดลองของ Bun แม้ว่า Node.js จะเป็นตัวเลือกที่มีประโยชน์สำหรับโครงการส่วนใหญ่ แต่ Deno อาจเป็นแนวหน้าในการพัฒนาเว็บในอนาคต
ในขณะเดียวกัน ฝึกฝนการสับ Deno ของคุณโดยสมัครใช้งาน Application Hosting Hobby Tier ของ Kinsta — เขียนโค้ดตอนนี้และปรับขนาดในภายหลัง