ចាវ៉ាស្ក្រីបត៍ក្នុងប្រៅស៍ស័រ
Tags: javascript, browser
Published: 2020-10-17 07:35:05

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


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

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

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/iisp8mmid9mk43fhc2n8.png)

<div class="text-sm text-center text-gray-500 italic mb-6">ចាវ៉ាស្ក្រីបត៍ក្នុងប្រៅស៍ស័រ
</div>

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

បញ្ហាធំមួយដែលគេជួបប្រទះជាញឹកញាប់នោះគឺថា**គេត្រូវសរសេរកូដពីដងសម្រាប់មុខងារដែលដូចគ្នា** ព្រោះថាដំបូងឡើយចាវ៉ាស្ក្រីបត៍មិនអាចប្រើសរសេរកូដ 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](https://daseveny.com)