DEV Community

Davy CHHOUK
Davy CHHOUK

Posted on

ចាវ៉ាស្ក្រីបត៍ក្នុងប្រៅស៍ស័រ

ភាសាចាវ៉ាស្ក្រីបត៍ (JavaScript)

ភាសាចាវ៉ាស្ក្រីបត៍តាំងពីដំបូងមកត្រូវបានគេសរសេរឡើងមកដើម្បីតែដំណើរការក្នុងប្រៅស៍ស័រតែប៉ុណ្ណោះ។ ចាវ៉ាស្ក្រីបត៍ត្រូវបានគេសរសេរឡើងមកដោយប្រើពេលតែដប់ថ្ងៃប៉ុណ្ណោះកាលពីជំនាន់ឆ្នាំ 90។ ប្រការនេះហើយដែលនាំឲ្យវាមិនមែនជាភាសារដែលមានមុខងារ និងគុណសម្បត្តិល្អគ្រប់គ្រាន់ប៉ុន្មាននោះទេ។ ដោយហេតុបែបហ្នឹងហើយបានជាគេព្យាយាម​ប្រើភាសាផ្សេងមកជំនួសវិញសម្រាប់សរសេរវែបសាយដូចដែលយើងបានឃើញមានមកដូចជា Flash, Java។ តែយ៉ាងណាការធ្វើបែបនេះក៏មិនបានធ្វើឲ្យការ​អភិវឌ្ឍន៍វែបសាយប្រសើរជាងមុនដែរ។ តែវាជាកត្តាជួយជំរុញឲ្យចាវ៉ាស្ក្រីបត៍បានវិវត្តន៍ជារឿយៗជារាងរាល់ឆ្នាំរហូតបានក្លាយជាភាសាដ៏មានឥទ្ធិពលដូចសព្វថ្ងៃនេះ។

Alt Text

ចាវ៉ាស្ក្រីបត៍ក្នុងប្រៅស៍ស័រ

ការព្យាយាមប្រើភាសាផ្សេងជំនួសចាវ៉ាស្ក្រីបត៍ក្នុងការសរសេរវែបសាយ

បញ្ហាធំមួយដែលគេជួបប្រទះជាញឹកញាប់នោះគឺថាគេត្រូវសរសេរកូដពីដងសម្រាប់មុខងារដែលដូចគ្នា ព្រោះថាដំបូងឡើយចាវ៉ាស្ក្រីបត៍មិនអាចប្រើសរសេរកូដ Server បានទេ។ ឧទាហរណ៍៖ យើងធ្វើ Form Validation ក្នុងលើវែបសាយហើយ ហើយយើងត្រូវធ្វើវាម្ដងទៀតនៅលើ Server។

ដើម្បីដោះស្រាយបញ្ហានេះ គេមានគំនិតមួយនោះគឺ Generate កូដចាវ៉ាស្ក្រីបត៍ទៅតាមកូដដែលគេសរសេរលើ Server
តែការធ្វើបែបនេះនាំឲ្យជួបបញ្ហាកាន់តែច្រើន ដោយសារកូដដែលបានមកវា inflexible ពិបាកកែ និង debug ហើយកាន់តែយ៉ាប់នោះវាដើរយឺតទៅទៀត។

វិធីមួយទៀតដែលគេប្រើនោះគឺ សរសេរជាភាសាផ្សេងហើយ compile/transpile ជាភាសាចាវ៉ាស្ក្រីបត៍។ Gmail សរសេរ Front-End ដោយប្រើចាវ៉ាហើយប្រើ Compiler មក compile កូដចាវ៉ានេះជាចាវ៉ាស្ក្រីបត៍។ Typescript ដោះស្រាយ Static/Dynamic Typing ក្នុងភាសាចាវ៉ាស្ក្រីបត៍ដោយបង្កើតភាសាមួយទៀតពីលើចាវ៉ាស្ក្រីបត៍ដែលមាន ប្រព័ន្ធ type រួច transpile ជាចាវ៉ាស្ក្រីបត៍។ តែយ៉ាងណាគេនៅតែពិបាកក្នុងការ debug កូដដែល compile/transpile មកនេះដោយវាត្រូវមាន compile/transpile សិនទើបអាចបានជាកូដចាវ៉ាស្ក្រីបត៍ដែលវាត្រូវចំណាយពេល និងអាចមិនដឹងថា bug កើតមកនៅផ្នែកណាមួយ។ អ៊ីចឹងហើយមួយចំនែកធំនៃវែបសាយដែលដំណើរការលើអ៊ីនធឺណិតសព្វថ្ងៃនៅតែត្រូវបានគេសរសេរដោយប្រើភាសាចាវ៉ាស្ក្រីបត៍ដដែល។

ក្រោយមកទៀតគេបានបង្កើត asm.js ដែលវាជា subset របស់ភាសាចាវ៉ាស្ក្រីបត៍មួយដែលអាចឲ្យភាសាផ្សេងទៀតអាចចាប់យក subset ទាំងនេះដែលវាមានន័យថាកូដដែលដំណើរការជាភាសាផ្សេងដែលវាអាចដំណើរការបានលឿនជាងភាសាចាវ៉ាស្ក្រីបត៍។ គំនិតនេះបានវិវត្តន៍ជាស្តង់ដារមួយនោះគឺ WebAssembly ដែលវាអាចដំណើរការបានលឿនតែវាមិនអាចទៅកែ DOM របស់វែបសាយបានទេ។ អ៊ីចឹងហើយវានៅតែមិនអាចជំនួយចាវ៉ាស្ក្រីបត៍បានដដែល។

Package ឬ Module ក្នុងភាសាចាវ៉ាស្ក្រីបត៍

ជាយូរមកហើយភាសាចាវ៉ាស្ក្រីបត៍មិនដែលមាន package ឬ module ទេ។ ដើម្បីដោះស្រាយបញ្ហានេះគេប្រើវិធី transpile ដើម្បី transpile កូដចាវ៉ាស្ក្រីបត៍ដែលសរសេរក្នុងទម្រង់មួយឲ្យក្លាយជាកូដចាវ៉ាស្ក្រីបត៍ស្ដង់ដា។ AMDs (Asynchronous Module Definitions) ជា specification ដំបូងគេដែលព្យាយាមដោះស្រាយបញ្ហា package ឫ module ក្នុងភាសាចាវ៉ាស្ក្រីបត៍។ ផ្សេងទៀតមាន RequireJS ហើយណូដប្រើ CommonJS តែដែលពេញនិយមសព្វថ្ងៃនេះគឺ ES6 Modules ដែលសរសេរជាទម្រង់ import/export។

កូដដែលសរសេរខុសពីកូដដំណើរការក្នុងប្រៅស័រ

យើងនឹងសង្កេតមើលឃើញថាកូដដែលដំណើរការក្នុងប្រៅស័រខុសពីកូដដែលយើងសរសេរក្នុង TextEditor/IDE របស់យើងដោយសារកូដត្រូវបាន transpile/compile សិនមុននឹងអាចយកទៅដំណើរការបាន។ បើយើងបើក devtools របស់ប្រៅស័រដើម្បីមើលកូដចាវ៉ាស្ក្រីបត៍នោះ យើងពិបាកនឹងយល់កូដនេះខ្លាំងណាស់ វារញ៉េរញ៉ៃខុសពីអ្វីដែលយើងបានសរសេរបានអស់ហើយ ឈ្មោះ variable ត្រូវបានដូរ គ្មាន indentation ជាដើម។

ហើយកត្តាមួយទៀតដែលធ្វើឲ្យមានបញ្ហានេះដែរតាំងពីដើមមកនោះ minifying កូដចាវ៉ាស្ក្រីបត៍ដោយប្រើ tools ផ្សេងៗដើម្បីបង្រួមកូដចាវ៉ាស្ក្រីបត៍ទាំងអស់ដក space/indentation ចេញហើយបញ្ចូលជា file តែមួយដើម្បីកាត់បន្ថយទំហំកូដដើម្បីឲ្យវាដើរលឿន។ គេបានដោះស្រាយបញ្ហា minify នេះដោយប្រើ source maps ដែលគេអាចប្រើដើម្បី map កូដដែល minify ហើយឲ្យក្លាយជាកូដដូចដើមវិញ។

Polyfill​ - វិរះបុរសរបស់ Internet Explorer

បើទោះជារាល់ថ្ងៃមានអ្នកប្រើប្រៅស័រជំនាន់ចុងក្រោយច្រើនដោយសារប្រៅស័រមានមុខងារអាប់ដេតដោយស្វ័យប្រវត្តិក៏ដោយ នៅតែមានអ្នកប្រើជាច្រើនដែលនៅតែប្រើប្រៅស័រជំនាន់ចាស់ដោយសារឧបករណ៍មិនអាចអាប់ដេតបាន ឫគាត់មិនចង់អាប់ដេតក៏ថាបាន។ អ្នកប្រើខ្លះគាត់ត្រូវបានគេតម្រូវឲ្យប្រើប្រៅស័រជនាន់មួយតែម្ដងក៏មាន។​ មកទល់សព្វថ្ងៃនៅតែមានអ្នកប្រើ Internet Explorer (IE) មួយភាគដដែល។

ពេលមានមុខងារថ្មីក្នុងប្រៅស័រ ឫក្នុងភាសាចាវ៉ាស្ក្រីបត៍ ជាទូទៅយើងចង់ប្រើវា។ តែថា! ពេលខ្លះយើងត្រូវ support ប្រៅស័រច្រើនជាពិសេស IE តែម្ដង។ កូដដែលយើងសរសេរដោយប្រើ API ឫមុខងារថ្មីៗទាំងនោះនឹងមិនដើរទេនៅលើប្រៅស័រចាស់ៗ។ នេះជាបញ្ហា! គេមានវិធីមួយដែលគេហៅថា Polyfill។ វាជាវិធីមួយដែលគេជំនួសឲ្យកូដដែលប្រើ API ឫមុខងារថ្មីៗនោះដោយកូដចាវ៉ាស្ក្រីបត៍សុទ្ធដែលវាអាចដើរបានសម្រាប់ប្រៅស័រចាស់ៗ។ ប្រៅស័រថ្មីប្រើកូដថ្មី តែបើជាប្រៅស័រចាស់ៗវិញ វានឹងឡូដកូដជំនួុសនោះវិញ។

JQuery - ដំណោះស្រាយរឿង​ compatibility

តាំងពីមុនភាសាស្ក្រីបត៍សម្រាប់ប្រៅស័រមិនមានស្តង់ដារនៅឡើយ វាអាស្រ័យទៅតាមប្រៅស័រនីមួយៗ។ មកដល់សព្វថ្ងៃនៅតែមានបញ្ហានេះដដែលទេគ្រាន់តែតិចជាងមុន។ ឧទាហរណ៍៖ Chrome, Firefox និង Internet Explorer មាន event model ខុសៗគ្នា។ Safari របស់ប៉ោមមិនស្គាល់រូបភាពប្រភេទ WebP ដែលជាប្រភេទរូបភាព optimized សម្រាប់វែបសាយជាដើម និងមានច្រើនទៀត។ វាមានន័យថាកូដដើរនៅក្នុងប្រៅស័រមួយអាចនឹងមិនដើរនៅក្នុងប្រៅស័រមួយទៀតក៏ថាបាន។

ដោយហេតុដូច្នេះហើយបានជា jQuery បានក្លាយជា library ដ៏ពេញនិយមបំផុតមូយក្នុងប្រវត្តិសាស្ដ្រចាវ៉ាស្ក្រីបត៍។ វាជា interface សម្រាប់ប្រៅស័រទាំងអស់។ ហើយបន្ថែមលើនឹង វាមានមុខងារដែលជួយឲ្យការសរសេរវែបសាយមានភាពងាយស្រួលជាងមុនផងដែរ ឧទាហរណ៍ select element ជាដើម។

តែដោយសារក្រោយៗមកនេះភាសាស្ក្រីបត៍របស់ប្រៅស័រមានចុះស្ដង់ដារ ECMAScript ហើយមួយវិញទៀតមុខងារដែល jQuery ផ្ដល់ឲ្យនោះត្រូវបានគេបញ្ចូលក្នុងភាសាស្តង់ដារច្រើនសឹងតែទាំងអស់ហើយនេះ វាបានធ្វើឲ្យ jQuery បាត់បង់ប្រជាប្រិយភាពជារឿយៗសឹងតែថាយើងមិនត្រូវការ jQuery ទៀតទេ ហើយការប្រើ jQuery បង្ករទៅជាបញ្ហាទៅទៀតនៅពេលព្យាយាម Optimize Performance វែបសាយដែលយើងសរសេរ។ អ៊ីចឹងហើយមុននឹងប្រើ jQuery សូមអ្នកទាំងអស់គ្នាគិតឲ្យច្បាស់សិន។

ចាវ៉ាស្ក្រីបត៍បានចេញពីផុតពីប្រៅស័រទៅហើយ

ណូដបានអនុញ្ញាត្តិឲ្យយើងអាចដំណើរការកូដចាវ៉ាស្ក្រីបត៍ក្រៅប្រៅស័របាន ដែលវាបានបង្កើតភាពអាចទៅបានរបស់ចាវ៉ាស្ក្រីបត៍យ៉ាងច្រើនមែនទែន។ Transpilation/Compilation បានអនុញ្ញាត្តិឲ្យគេអាចសរសេរកូដដោយប្រើ API ថ្មីឫវិធីថ្មីបានងាយស្រួល។ ដោយសារតែមាន transpile ហ្នឹងហើយទៀបមាន TypeScript, JSX ចាវ៉ាស្ក្រីបត៍បែប XML របស់ហ្វ្រេមវើរ៍ក React.j និងច្រើនទៀតកើតឡើងមកបាន។ Tools និង utilities ជាច្រើនក៏កើតឡើងច្រើនដែរទៅតាមភាសាដែរវាកាន់តែពេញនិយមពីមួយថ្ងៃទៅមួយថ្ងៃ។ សព្វថ្ងៃនេះយើងអាចសរសេរបានសឹងតែគ្រប់ផ្នែកទៅហើយដោយគ្រាន់តែប្រើភាសាចាវ៉ាស្ក្រីបត៍មួយ។ យើងអាចប្រើចាវ៉ាស្ក្រីបត៍សរសេរវែបសាយ កម្មវិធីទូរស័ព្ទ កម្មវិធីកុំព្យូទ័រដេស្គថប់ ឫផ្សេងៗទៀតបានទាំងអស់។ និយាយជាខ្លី៖ JavaScript is taking the world

👉 អត្ថបទច្រើនទៀតសូមចូលទៅកាន់៖ www.daseveny.com

Discussion (0)