ដេណូ - ណូដដែលល្អជាងមុន?

Chhouk Davy| M-E, Programming, Space, Technology.
ថ្ងៃទី៖ 17 មិថុនា 2020
ប្រវែង៖ 2 នាទី
ដេណូ (Deno) បានចេញកំណែផ្លូវការដំបូង v1 នៅកំឡុងពាក់កណ្ដាលខែមុនខែឧសភា។ បើអ្នកតាមដានពីពិភពប្រូក្រាមមីងចុងក្រោយ ប្រហែលជាបានលឺមកហើយ។ វាទទួលបានចំណាប់អារម្មណ៍ច្រើនសមគួរណាស់ ហើយមានរហូតដល់អ្នកខ្លះគេនិយាយថ្ងៃអវសានរបស់ណូដជិតមកដល់ហើយទៀតផង។ អ៊ីចឹងថ្ងៃនេះ យើងមកមើលថាតើដេណូជាអ្វី វាខុសពីណូដយ៉ាងណាខ្លះ ហើយវាពិតជាល្អជាងណូដមែនដែរឫទេ។
##ដេណូជាអ្វី? ចំណុចខុសគ្នារវាងដេណូ និង ណូដ
ដេណូ (Deno) ជាប្រូក្រាមដែល Secure សម្រាប់ដំណើការ JavaScript និង TypeScript ក្រៅវែបប្រៅស័រថ្មីមួយ។ អ្នកដែលបង្កើតដេណូ និងណូដជាមនុស្សតែមួយគឹដោយលោក Ryan Dahl។
ដេណូប្រើ TypeScript, Rust, Tokio (សម្រាប់ Event Loop) និង V8 (Rusty-V8 ជា JavaScript Engine) ដែលខុសពីណូដដែលប្រើ JavaScript, C++, LibUV (សម្រាប់ Event Loop) និង V8 (ជា JavaScript Engine)។
មែនទែនទៅវាស្រដៀងនឹងណូដមែនដោយគ្រាន់តែដេណូត្រូវបានសរសេរថ្មីដើម្បីកែកំហុសឆ្គងមួយចំនួន ឌីហ្សាញសារជាថ្មីឡើងវិញដើម្បីរ៉ាប់រងកំណែថ្មីៗរបស់ចាវ៉ាស្ក្រីបត៍ដែលចេញមក។ លោក Ryan Dahl ខ្លួនឯងបាននិយាយហើយពីចំនុចដែលគាត់ខកចិត្តមួយចំនួន របស់ណូដដែលមានដូចជា៖
- មិនប្រើ Promise ដោយប្រើ Event Emitter ជំនួស
- បញ្ហាសុវត្តិភាព (Dependencies ដែលយើងនបញ្ចូលក្នុង Project របស់យើងមានសិទ្ធអាន Disk, ចូល Network ជាដើម)
- Build System (GYP)
- ការប្រើ package.json ដែលនាំឲ្យមាន node_modules
- node_modules ផ្ទុក dependencies សម្រាប់ Project នីមួយមានន័យថាបើយើងមាន Project ច្រើនយើងនឹងមាន dependencies ដូចគ្នាច្រើន
- Centralized package registry និង package manager
- Require ដោយមិនចាំបាច់មាន extension (.js)
- ហ្វាល់ index.js ដែលមិនចាំបាច់បានធ្វើឲ្យការឡូដ module ស្មុគស្មាញ
គោដៅទីមួយដែលគាត់សរសេរដេណូនេះគឺដើម្បីកែចំណុចខ្វះខាតទាំងអស់នេះដោយចំណុចទាំងអស់នេះមិនអាចកែប្រែបានទេក្នុងណូដ។ ចំណែកគោលដៅទីពីរគឺដើម្បីធ្វើទំនើបកម្មដើម្បីធ្វើឲ្យវាកាន់តែងាយស្រួលប្រើដូចជា៖
- បន្ថែម Type System ដោយអាចប្រើ TypeScript បានដោយមិនចាំបាច់ត្រូវមាន Transpiler នោះទេ
- Tools ផ្ទាល់របស់ដេណូដូចជា Test Runner, Linter, Formatter និង Bundler
- Browser Compatibilities និងមុខងារជាច្រើនផ្សេងទៀត។
##ចំណុចគួរឲ្យបាច់អារម្មណ៍
- គេត្រូវអនុញ្ញាត្តិសិទ្ធដើម្បីអាចចូលទៅកាន់ Disk, Network បាន។
- ដេណូស្គាល់ TypeScript ស្រាប់តែម្ដង។
- គេអាចប្រើ await បានដោយមិនចាំបាច់មាន async បាន។
- អត់មាន node_modules និង package.json ទៀតទេ ហើយបានចាំបាច់ npm install ទៀតទេ។ យើងគ្រាន់តែរាន់កូដយើងយកតែម្ដង។
- ES6 Import ស្រាប់ចេញពីស្រោម។
- អាចប្រើ Window Object ដូចដែលមាននៅក្នុង Browser បាន។
##លេងជាមួយដេណូ
- បញ្ចូលដេណូ
សម្រាប់ Mac/Linux យើងអាចបញ្ចូលតាម Shell ៖
curl -fsSL https://deno.land/x/install/install.sh | sh
ឫបើប្រើ Mac យើងអាចបញ្ចូលតាម Homebrew ក៏បាន៖
brew install deno
សម្រាប់ Windows
iwr https://deno.land/x/install/install.ps1 -useb | iex
- បង្កើត Server តូចមួយ
បង្កើតហ្វាល់ TypeScript មួយដាក់ឈ្មោះអីក៏បាន ហើយសរសេរកូដដូចខាងក្រោមនេះ
/*
* Simple Server
*/
import { serve } from 'https://deno.land/std@0.57.0/http/server.ts'
const s = serve({ port: 8080 })
console.log('http://localhost:8080/')
for await (const req of s) {
req.respond({ body: 'Hello World! Hello Daseveny!\n' })
}
បន្ទាប់មករាន់
deno run --allow-net play-deno.ts
គ្រាន់តែបែបនេះ យើងបានបង្កើត Web Server តូចមួយបានហើយ។ ហើយបើយើងចូលទៅកាន់ http://localhost:8080 នោះយើងនឹងឃើញ Response ដែលបញ្ចូនត្រលប់មកពី Deno Server របស់យើង។
##សរុបសេចក្ដី
ក្នុងអត្ថបទនេះ យើងបានដឹងត្រួសៗហើយពីដេណូ។ សំណួរសួរថា
បើដេណូកែរាល់កំហុសឆ្គងរបស់ណូដយ៉ាងនេះ តើវាពិតជាល្អជាងណូដមែនដែរទេ?
សម្រាប់ខ្ញុំ ខ្ញុំអាចនិយាយបានថា ពិត និងមិនពិត។ ពិតនៅត្រង់ថាវាត្រូវបានគិតសារជាថ្មី ហើយបន្ថែមចំណុចដែលល្អៗជាច្រើន។ ចំពោះមិនពិតនៅត្រង់ថា វាមិនល្អសម្រាប់ការងារផ្លូវការនៅឡើយទេដោយសារវានៅថ្មីពេក និងត្រូវការពេលបន្តិចទៀតដើម្បីឲ្យ Ecosystem របស់វារីកធំជាងនេះបន្តទៀត។ ហើយបើកំពុងសម្រេចចិត្តថាត្រូវរៀនមួយណា ខ្ញុំក៏នៅតែណែនាំឲ្យរៀនណូដ ព្រោះថាណូដស្ថិតក្នុងកម្រិតល្អមួយដែលយើងអាចយកវាមកប្រើការផ្លូវការ និងមានការងារជាច្រើនសម្រាប់ណូដ។ ហើយម្យ៉ាងទៀតបើចេះណូដហើយប្ដូរមកដេណូវិញក៏វាមានភាពងាយស្រួលដែរ គ្រប់យ៉ាងដែលអ្នកធ្វើក្នុងណូដនឹងមិនផ្លាស់ប្ដូរច្រើនទេនៅក្នុងដេណូ។ តែវាក៏មិនខាតអីដែរបើអ្នកសាកលេងជាមួយដេណូ។
####ស្វែងយល់បន្ថែម៖