# ဘဏ်အက်ပ်တည်ဆောက်ခြင်း အပိုင်း ၁: HTML Template နှင့် Web App အတွင်း Route များ Apollo 11 ရဲ့ လမ်းညွှန်ကွန်ပျူတာက 1969 ခုနှစ်မှာ လမင်းကိုသွားရောက်တဲ့အခါမှာ စနစ်တစ်ခုလုံးကို ပြန်စမလုပ်ဘဲ အစီအစဉ်အမျိုးမျိုးကို ပြောင်းလဲရင်း လမ်းညွှန်ခဲ့ရပါတယ်။ ခေတ်သစ် Web Application တွေကလည်း အတူတူပဲ – အရာအားလုံးကို အစမှပြန်တင်မထားဘဲ သင်မြင်ရတဲ့အရာတွေကို ပြောင်းလဲပေးပါတယ်။ ဒါက အသုံးပြုသူတွေ မျှော်လင့်ထားတဲ့ ချောမွေ့ပြီး တုံ့ပြန်မှုမြန်တဲ့ အတွေ့အကြုံကို ဖန်တီးပေးပါတယ်။ ရိုးရာ Website တွေက တစ်ခါတစ်ခါ အပြောင်းအလဲအတွက် စာမျက်နှာအားလုံးကို ပြန်တင်ရတာဖြစ်ပေမယ့် ခေတ်သစ် Web App တွေက ပြောင်းလဲဖို့လိုအပ်တဲ့ အပိုင်းတွေကိုသာ Update လုပ်ပေးပါတယ်။ ဒါဟာ Mission Control က အမြဲတမ်းဆက်သွယ်မှုကို ထိန်းသိမ်းထားရင်း အမျိုးမျိုးသော Display တွေကို ပြောင်းလဲသုံးစွဲတဲ့နည်းလမ်းနဲ့ တူပါတယ်။ ဒီနည်းလမ်းက ခေတ်သစ် Web App တွေမှာ ချောမွေ့တဲ့ အတွေ့အကြုံကို ဖန်တီးပေးပါတယ်။ ဒီနည်းလမ်းက ဘာကြောင့် အလွန်ထူးခြားသလဲဆိုတာကို ကြည့်ပါ။ | ရိုးရာ Multi-Page App | ခေတ်သစ် Single-Page App | |----------------------------|-------------------------| | **Navigation** | Screen တစ်ခုစီအတွက် စာမျက်နှာအားလုံးကို ပြန်တင် | Content ကို ချက်ချင်းပြောင်း | | **Performance** | HTML အားလုံးကို Download လုပ်ရလို့ နှေး | အပိုင်းပိုင်း Update လုပ်လို့ မြန် | | **User Experience** | စာမျက်နှာပြန်တင်မှုကြောင့် အဆက်မပြေ | App လို ချောမွေ့တဲ့ အပြောင်းအလဲ | | **Data Sharing** | စာမျက်နှာတွေကြားမှာ ဒေတာမျှဝေဖို့ ခက်ခဲ | State Management လွယ်ကူ | | **Development** | HTML ဖိုင်များစွာကို ထိန်းသိမ်းရ | Dynamic Template ပါတဲ့ HTML တစ်ခု | **အဆင့်ဆင့်တိုးတက်မှုကို နားလည်ခြင်း:** - **ရိုးရာ App တွေ**က Navigation အတွက် Server Request လိုအပ်တယ် - **ခေတ်သစ် SPA တွေ**က တစ်ခါ Load လုပ်ပြီး Content ကို JavaScript အသုံးပြု Update လုပ်တယ် - **User မျှော်လင့်ချက်**တွေက ချက်ချင်းတုံ့ပြန်မှုကို သဘောကျတယ် - **Performance အကျိုးကျေးဇူး**တွေက Bandwidth လျော့နည်းပြီး တုံ့ပြန်မှု မြန်တယ် ဒီသင်ခန်းစာမှာ ဘဏ်အက်ပ်တစ်ခုကို စာမျက်နှာများစွာကို ချောမွေ့စွာ ဆက်စပ်ထားတဲ့ပုံစံနဲ့ တည်ဆောက်ပါမယ်။ သိပ္ပံပညာရှင်တွေက အမျိုးမျိုးသော စမ်းသပ်မှုအတွက် ပြန်လည်ဖွဲ့စည်းနိုင်တဲ့ ကိရိယာတွေကို အသုံးပြုသလိုပဲ၊ HTML Template တွေကို လိုအပ်တဲ့အခါ ပြန်လည်အသုံးပြုနိုင်တဲ့ အစိတ်အပိုင်းတွေ အဖြစ် အသုံးပြုပါမယ်။ သင် HTML Template (စာမျက်နှာအမျိုးမျိုးအတွက် ပြန်လည်အသုံးပြုနိုင်တဲ့ Blueprints), JavaScript Routing (စာမျက်နှာတွေကြား ပြောင်းလဲမှုစနစ်), နဲ့ Browser ရဲ့ History API (Back Button ကို သင့်တော်အောင် ထိန်းသိမ်းပေးတဲ့စနစ်) တွေနဲ့ အလုပ်လုပ်ရပါမယ်။ ဒီနည်းလမ်းတွေဟာ React, Vue, Angular စတဲ့ Framework တွေမှာ အသုံးပြုတဲ့ အခြေခံနည်းလမ်းတွေပါ။ သင်ခန်းစာအဆုံးမှာ Professional Single-Page Application Principles တွေကို ပြသတဲ့ ဘဏ်အက်ပ်တစ်ခုကို ရရှိမှာပါ။ ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/41) ### သင်လိုအပ်မယ့်အရာများ ဘဏ်အက်ပ်ကို စမ်းသပ်ဖို့ Local Web Server တစ်ခုလိုအပ်ပါမယ် – စိုးရိမ်စရာမလိုပါဘူး၊ အလွန်လွယ်ကူပါတယ်! သင်မှာ Setup လုပ်ထားတာမရှိသေးရင် [Node.js](https://nodejs.org) ကို Install လုပ်ပြီး Project Folder မှာ `npx lite-server` ကို Run လုပ်ပါ။ ဒီ Command က Local Server တစ်ခုကို ဖန်တီးပြီး Browser မှာ App ကို အလိုအလျောက်ဖွင့်ပေးပါမယ်။ ### ပြင်ဆင်မှု သင့်ကွန်ပျူတာမှာ `bank` လို့ Folder တစ်ခုဖန်တီးပြီး `index.html` လို့ File တစ်ခုထည့်ပါ။ HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code) ကို အစပြုပါ: ```html Bank App ``` **ဒီ Boilerplate ရဲ့ အကျိုးကျေးဇူး:** - **HTML5 Document Structure** ကို DOCTYPE ကြေညာချက်နဲ့ တည်ဆောက်ပေးတယ် - **Character Encoding** ကို UTF-8 အဖြစ် Configure လုပ်ပြီး အပြည်ပြည်ဆိုင်ရာစာသားတွေကို ထောက်ပံ့ပေးတယ် - **Responsive Design** ကို Viewport Meta Tag နဲ့ Mobile Compatibility ရရှိအောင် Enable လုပ်တယ် - **Title** ကို Browser Tab မှာ ဖော်ပြတဲ့အတိုင်း Set လုပ်တယ် - **Clean Body Section** ကို ဖန်တီးပြီး Application ကို တည်ဆောက်ဖို့ အဆင်ပြေစေတယ် > 📁 **Project Structure Preview** > > **ဒီသင်ခန်းစာအဆုံးမှာ Project ရဲ့ ဖွဲ့စည်းမှု:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **File ရဲ့ တာဝန်များ:** > - **index.html**: Template အားလုံးကို ထည့်ပြီး App Structure ကို ပံ့ပိုးပေးတယ် > - **app.js**: Routing, Navigation, Template Management ကို Handle လုပ်တယ် > - **Templates**: Login, Dashboard နဲ့ အခြား Screen တွေ အတွက် UI ကို Define လုပ်တယ် --- ## HTML Template Template တွေက Web Development မှာ အခြေခံပြဿနာတစ်ခုကို ဖြေရှင်းပေးတယ်။ Gutenberg က 1440s မှာ Movable Type Printing ကို တီထွင်တဲ့အခါမှာ စာမျက်နှာအားလုံးကို Carve လုပ်တာမဟုတ်ဘဲ Reusable Letter Block တွေကို ဖန်တီးပြီး လိုအပ်သလို Arrange လုပ်နိုင်တာကို သိရှိခဲ့တယ်။ HTML Template တွေကလည်း ဒီနည်းလမ်းနဲ့ တူပါတယ် – Screen တစ်ခုစီအတွက် HTML File သီးသန့်တွေ ဖန်တီးတာမဟုတ်ဘဲ Reusable Structure တွေကို Define လုပ်ပြီး လိုအပ်တဲ့အခါ Display လုပ်တယ်။ Template တွေကို App ရဲ့ အပိုင်းအမျိုးမျိုးအတွက် Blueprint အဖြစ် စဉ်းစားပါ။ Architect တစ်ဦးက Blueprint တစ်ခုကို ဖန်တီးပြီး အခန်းတစ်ခန်းစီကို ပြန်လည်ရေးဆွဲတာမဟုတ်ဘဲ Template တွေကို တစ်ခါဖန်တီးပြီး လိုအပ်သလို Instantiation လုပ်တယ်။ Browser က Template တွေကို JavaScript က Activate လုပ်တဲ့အထိ Hidden ထားတယ်။ Web Page အတွက် Screen အမျိုးမျိုးကို ဖန်တီးချင်ရင် Screen တစ်ခုစီအတွက် HTML File တစ်ခုစီ ဖန်တီးတာက Solution တစ်ခုဖြစ်နိုင်ပါတယ်။ ဒါပေမယ့် ဒီ Solution က အခက်အခဲတစ်ချို့နဲ့ ရင်ဆိုင်ရတယ်။ - Screen ပြောင်းတဲ့အခါ HTML အားလုံးကို ပြန်တင်ရတာနှေးတယ်။ - Screen တွေကြားမှာ ဒေတာမျှဝေဖို့ ခက်ခဲတယ်။ အခြားနည်းလမ်းတစ်ခုက HTML File တစ်ခုသာရှိပြီး `