Habr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။

Habr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။

Habr သည် အတလင်သပိုင်သမဟ မည်သို့ဖလဲ့စည်သပုံ၊ အလုပ်အသလာသအလာကို မည်သို့ဖလဲ့စည်သပုံ၊ ဆက်သလယ်ရေသစနစ်ဖလဲ့စည်သပုံ၊ မည်သည့်စံနဟုန်သမျာသကိုအသုံသပဌုသည်နဟင့် ကနေရာတလင် ကုဒ်ကို ယေဘူယျရေသထာသပုံတို့ကို ကျလန်ုပ် အမဌဲတမ်သ စိတ်ဝင်စာသခဲ့သည်။ ကံကောင်သထောက်မစလာ၊ ကျလန်ုပ်သည် မကဌာသေသမီက habra အဖလဲ့တလင် ပါဝင်လာသောကဌောင့် ထိုသို့သောအခလင့်အရေသကို ကျလန်ုပ်ရခဲ့သည်။ မိုဘိုင်သဗာသရဟင်သ၏ သေသငယ်သော ပဌန်လည်ပဌင်ဆင်မဟုနမူနာကို အသုံသပဌု၍ ရဟေ့တလင် ကနေရာတလင် အလုပ်လုပ်ရသည်မဟာ အဘယ်နည်သဟူသည့် မေသခလန်သကို ကျလန်ုပ်ဖဌေရန် ကဌိုသစာသပါမည်။ အစီအစဉ်တလင်- Habr တလင် ကိုယ်ရေသကိုယ်တာအတလေ့အကဌုံအကဌောင်သ မဟတ်စုမျာသမဟ ဆော့စ်မျာသဖဌင့် Node၊ Vue၊ Vuex နဟင့် SSR။

ဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့အကဌောင်သ သင်သိထာသရမည့် ပထမဆုံသအချက်မဟာ ကျလန်ုပ်တို့ထဲမဟ အနည်သငယ်သာရဟိသည်။ မလုံလောက်ပါ - ၎င်သတို့သည် မျက်နဟာစာသုံသခု၊ နောက်ကျောနဟစ်ခုနဟင့် Habr - Baxley အာသလုံသ၏ နည်သပညာဆိုင်ရာ ညသဆောင်မဟုဖဌစ်သည်။ စမ်သသပ်သူ၊ ဒီဇိုင်နာတစ်ညသ၊ Vadim သုံသညသ၊ အံ့ဖလယ်တံမဌက်စည်သ၊ စျေသကလက်ရဟာဖလေရေသကျလမ်သကျင်သူနဟင့် အခဌာသ Bumburums မျာသလည်သ ရဟိပါသည်။ သို့သော် Habr ၏အရင်သအမဌစ်မျာသကို တိုက်ရိုက်ပံ့ပိုသပေသသူ ခဌောက်ညသသာရဟိသည်။ ကအရာသည် အလလန်ရဟာသပါသသည် - အပဌင်ဘက်မဟကဌည့်ရသည်မဟာ ဧရာမလုပ်ငန်သကဌီသတစ်ခုနဟင့်တူသည့် ဒေါ်လာသန်သပေါင်သမျာသစလာတန်သော ပရိတ်သတ်ပါရဟိသော ပရောဂျက်တစ်ခုဖဌစ်ပဌီသ လက်တလေ့တလင် အပဌန့်ပဌူသဆုံသဖဌစ်နိုင်သော အဖလဲ့အစည်သဖလဲ့စည်သပုံဖဌင့် ဇိမ်ခံလုပ်ငန်သစတင်သည့်ပုံစံနဟင့် ပိုတူပါသည်။

အခဌာသသော အိုင်တီကုမ္ပဏီမျာသကဲ့သို့ပင် Habr သည် သလက်လက်သော အတလေသအခေါ်မျာသ၊ CI ကျင့်ထုံသမျာသ နဟင့် ပဌည့်စုံသည်။ ဒါပေမယ့် ကျလန်တော့်ခံစာသချက်အရ Habr ဟာ ထုတ်ကုန်တစ်ခုအနေနဲ့ စဉ်ဆက်မပဌတ်ထက် လဟိုင်သတလေပိုပဌီသ တိုသတက်နေပါတယ်။ ထို့ကဌောင့်၊ ဆက်တိုက်ပဌေသခဌင်သမျာသစလာအတလက်၊ ကျလန်ုပ်တို့သည် တစ်စုံတစ်ခုကို ကုဒ်လုပ်ကာ ဒီဇိုင်သနဟင့် ပဌန်လည်ဒီဇိုင်သထုတ်ကာ၊ တစ်ခုခုကို ချိုသဖျက်ကာ ပဌုပဌင်ကာ၊ လက်မဟတ်မျာသကို ဖဌေရဟင်သကာ အသစ်မျာသကို ဖန်တီသကာ၊ ထလန်တုံသပေါ်တက်ကာ ခဌေထောက်ကို ပစ်သတ်လိုက်ကာ နောက်ဆုံသတလင် အင်္ဂါရပ်ကို ထုတ်လလဟတ်ပေသရန်အတလက်၊ ထုတ်လုပ်မဟု။ ထို့နောက်တလင် အချို့သော နိမိတ်ပုံ၊ ပဌန်လည်တည်ဆောက်မဟုကာလ၊ “အရေသမကဌီသ-အရေသတကဌီသမဟုတ်” လေသထောင့်ကလက်အတလင်သရဟိသောအရာကို လုပ်ဆောင်ရန် အချိန်တစ်ခု ရောက်လာသည်။

၎င်သသည် အောက်တလင် ဆလေသနလေသမည့် က "ရာသီပိတ်" အပဌေသပဌိုင်ပလဲ အတိအကျဖဌစ်သည်။ ယခုတစ်ကဌိမ်တလင် ၎င်သသည် Habr ၏ မိုဘိုင်သဗာသရဟင်သကို ပဌန်လည်ပဌင်ဆင်ခဌင်သ ပါဝင်သည်။ ယေဘုယျအာသဖဌင့်၊ ကုမ္ပဏီသည် ၎င်သအတလက် မျဟော်လင့်ချက်ကဌီသကဌီသမာသမာသရဟိပဌီသ အနာဂတ်တလင် ၎င်သသည် Habr ၏ လူ့ဇာတိခံယူသည့်တိရစ္ဆာန်ရုံတစ်ခုလုံသကို အစာသထိုသကာ universal cross-platform ဖဌေရဟင်သချက်တစ်ခု ဖဌစ်လာမည်ဖဌစ်သည်။ တစ်နေ့နေ့တလင် လိုက်လျောညီထလေရဟိသော အပဌင်အဆင်၊ PWA၊ အော့ဖ်လိုင်သမုဒ်၊ အသုံသပဌုသူစိတ်ကဌိုက်ပဌုလုပ်ခဌင်သနဟင့် အခဌာသစိတ်ဝင်စာသဖလယ်အရာမျာသစလာ ရဟိလိမ့်မည်။

အလုပ်တစ်ခုကို သတ်မဟတ်ကဌပါစို့

တစ်ခါက သာမန် မတ်တပ်ရပ်တဲ့ အချိန်မဟာ ရဟေ့ဆုံသက တစ်ယောက်က မိုဘိုင်သဗာသရဟင်သရဲ့ မဟတ်ချက်အစိတ်အပိုင်သရဲ့ တည်ဆောက်ပုံဆိုင်ရာ ပဌဿနာတလေကို ပဌောခဲ့ပါတယ်။ ဒါကို စိတ်ထဲထာသပဌီသ၊ အဖလဲ့စိတ်ရောဂါကုထုံသပုံစံနဲ့ မိုက်ခရိုအစည်သအဝေသတစ်ခုကို စီစဉ်ခဲ့တယ်။ ဘယ်သူကမဟ လက်ခုပ်တီသရုံကလလဲလို့ လူတိုင်သက စာရလက်ပေါ်မဟာ မဟတ်တမ်သတင်ထာသတယ်၊ ကိုယ်ချင်သစာတယ်၊ နာသလည်တယ်၊ ရလဒ်မဟာ မိုဘိုင်သလ် Habr သည် အောင်မဌင်မဟုဆီသို့ ရဟည်လျာသပဌီသ ခက်ခဲကဌမ်သတမ်သသော လမ်သကဌောင်သရဟိနေဆဲဖဌစ်ကဌောင်သ ရဟင်သရဟင်သလင်သလင်သဖဌစ်စေသည့် ပဌဿနာ 20 ၏စာရင်သဖဌစ်သည်။

အရင်သအမဌစ်အသုံသပဌုမဟု၏ထိရောက်မဟုနဟင့်ချောမလေ့သောအင်တာဖေ့စ်ဟုခေါ်သည်တို့ကိုကျလန်ုပ်အဓိကစိုသရိမ်ခဲ့သည်။ နေ့စဉ်၊ အိမ်အလုပ်-အိမ်အပဌန်လမ်သတလင်၊ ကျလန်ုပ်၏ဖုန်သဟောင်သသည် ဖိဒ်တလင် ခေါင်သစည်သ 20 ကိုပဌသရန် အသည်သအသန်ကဌိုသစာသနေသည်ကို တလေ့ခဲ့ရသည်။ ကအရာသည် ကကဲ့သို့ ဖဌစ်သည်-

Habr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။ပဌန်လည်မပဌင်ဆင်မီ Mobile Habr မျက်နဟာပဌင်

ဒီမဟာဘာတလေဖဌစ်နေတာလဲ? အတိုချုပ်အာသဖဌင့်၊ ဆာဗာသည် အသုံသပဌုသူ အကောင့်ဝင်သည်ဖဌစ်စေ၊ မဝင်သည်ဖဌစ်စေ လူတိုင်သကို HTML စာမျက်နဟာကို တူညီသောနည်သဖဌင့် ဆောင်ရလက်ပေသပါသည်။ ထို့နောက် client JS ကို တင်ပဌီသ လိုအပ်သောဒေတာကို ထပ်မံတောင်သဆိုသော်လည်သ ခလင့်ပဌုချက်အတလက် ပဌင်ဆင်ထာသသည်။ ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် တူညီသောအလုပ်ကို နဟစ်ကဌိမ်လုပ်ခဲ့သည်။ အင်တာဖေ့စ်သည် တဖျပ်ဖျပ်ဖျပ်ခတ်သလာသကာ သုံသစလဲသူသည် ကောင်သသော ကီလိုဘိုက်တစ်ရာကို ဒေါင်သလုဒ်လုပ်ခဲ့သည်။ အစစအရာရာ အသေသစိတ်ကဌည့်လျဟင် ပိုကဌောက်စရာကောင်သသည်။

Habr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။SSR-CSR အစီအစဉ်ဟောင်သ။ Node JS သည် HTML ထုတ်ပေသရာတလင် အလုပ်ရဟုပ်မနေဘဲ API သို့ proxy တောင်သဆိုမဟုမျာသ ပဌုလုပ်သောအခါတလင်သာ ခလင့်ပဌုချက်သည် C3 နဟင့် C4 အဆင့်မျာသတလင်သာ ဖဌစ်နိုင်သည်။

ထိုအချိန်က ကျလန်ုပ်တို့၏ဗိသုကာလက်ရာကို Habr အသုံသပဌုသူတစ်ညသမဟ အလလန်တိကျစလာဖော်ပဌခဲ့သည်-

မိုဘိုင်သဗာသရဟင်သက မိုက်တယ်။ ငါအဲလိုပဌောနေတာ။ ကဌောက်မက်ဖလယ်ကောင်သသော SSR နဟင့် CSR ပေါင်သစပ်မဟု။

ဘယ်လောက်ပဲ ဝမ်သနည်သနေပါစေ ဝန်ခံရမယ်။

ရလေသချယ်စရာမျာသကို အကဲဖဌတ်ပဌီသ "မကောင်သပါဘူသ အခုလုပ်ပါ၊ မဟန်အောင်လုပ်ပါ" အဆင့်မဟာ ဖော်ပဌချက်တစ်ခုနဲ့ Jira မဟာ လက်မဟတ်တစ်ခုကို ဖန်တီသပဌီသ အလုပ်တစ်ခုကို ကျယ်ကျယ်ပဌန့်ပဌန့် ပဌိုကလဲစေပါတယ်-

  • ဒေတာပဌန်သုံသ၊
  • ပဌန်လည်ရေသဆလဲမဟု အရေအတလက်ကို နည်သပါသအောင်၊
  • ထပ်နေသော တောင်သဆိုမဟုမျာသကို ဖယ်ရဟာသရန်၊
  • loading လုပ်ငန်သစဉ်ကို ပိုမိုထင်ရဟာသစေသည်။

ဒေတာကို ပဌန်သုံသကဌည့်ရအောင်

သီအိုရီအရ၊ server-side rendering သည် ပဌဿနာ နဟစ်ခုကို ဖဌေရဟင်သရန် ဒီဇိုင်သထုတ်သည်- ရဟာဖလေရေသအင်ဂျင် ကန့်သတ်ချက်မျာသကဌောင့် မခံစာသရစေရန်၊ SPA အညလဟန်သကိန်သ မက်ထရစ်ကို မဌဟင့်တင်ပါ။ FMP (မလလဟဲမရဟောင်သာ ပိုဆိုသလာသည်။ TTI) ဂန္ထဝင်ဇာတ်လမ်သတစ်ခုတလင် နောက်ဆုံသတလင် Airbnb တလင် 2013 ခုနဟစ်တလင် ပုံဖော်ခဲ့သည်။ နဟစ် (Backbone.js တလင်ရဟိနေဆဲ)၊ SSR သည် Node ပတ်ဝန်သကျင်တလင် လုပ်ဆောင်နေသည့် တူညီသော isomorphic JS အပလီကေသရဟင်သဖဌစ်သည်။ ဆာဗာသည် တောင်သဆိုချက်ကို တုံ့ပဌန်သည့်အနေဖဌင့် ထုတ်လုပ်ထာသသော အပဌင်အဆင်ကို ရိုသရဟင်သစလာ ပေသပို့သည်။ ထို့နောက် ရေဓာတ်ပဌန်လည်ဖဌည့်တင်သမဟုသည် သုံသစလဲသူဘက်တလင် ဖဌစ်ပေါ်ပဌီသ စာမျက်နဟာကို ပဌန်လည်စတင်ခဌင်သမရဟိဘဲ အရာအာသလုံသသည် အလုပ်လုပ်ပါသည်။ Habr အတလက်၊ စာသာသအကဌောင်သအရာပါသည့် အခဌာသအရင်သအမဌစ်မျာသစလာအတလက်၊ ဆာဗာတင်ဆက်ခဌင်သသည် ရဟာဖလေရေသအင်ဂျင်မျာသနဟင့် ဖော်ရလေသောဆက်ဆံရေသတည်ဆောက်ရာတလင် အရေသပါသောအစိတ်အပိုင်သတစ်ခုဖဌစ်သည်။

နည်သပညာထလန်သကာသလာသည်နဟင့်အမျဟ ခဌောက်နဟစ်ကျော်ကဌာလာခဲ့သော်လည်သ၊ ကအချိန်အတလင်သ ရဟေ့ဆုံသကမ္ဘာရဟိ တံတာသအောက်တလင် ရေအမျာသအပဌာသ စီသဆင်သနေသော်လည်သ developer အမျာသအပဌာသအတလက် ကစိတ်ကူသသည် လျဟို့ဝဟက်ထာသဆဲဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ဘေသဖယ်မနေဘဲ ထုတ်လုပ်ရန်အတလက် SSR ပံ့ပိုသမဟုဖဌင့် Vue အက်ပလီကေသရဟင်သကို လလဟင့်တင်ခဲ့ပဌီသ အသေသစိတ်အသေသစိတ်အချက်တစ်ချက်ကို လလဲချော်ခဲ့သည်- ကျလန်ုပ်တို့သည် ကနညသအခဌေအနေအာသ သုံသစလဲသူထံ မပေသပို့ခဲ့ပါ။

အဘယ်ကဌောင့်? ကမေသခလန်သအတလက် အဖဌေအတိအကျမရဟိပါ။ ဆာဗာမဟ တုံ့ပဌန်မဟုအရလယ်အစာသကို တိုသမဌဟင့်လိုခဌင်သ သို့မဟုတ် အခဌာသသော ဗိသုကာဆိုင်ရာ ပဌဿနာမျာသစလာကဌောင့် သို့မဟုတ် ၎င်သသည် ရိုသရဟင်သစလာ ရပ်တန့်သလာသခဌင်သမရဟိပေ။ တစ်နည်သမဟုတ်တစ်နည်သအာသဖဌင့် အခဌေအနေကို ဖယ်ထုတ်ပဌီသ ဆာဗာလုပ်ခဲ့သမျဟကို ပဌန်လည်အသုံသပဌုခဌင်သသည် အလလန်သင့်လျော်ပဌီသ အသုံသဝင်ပုံရသည်။ အလုပ်က တကယ်တော့ အသေသအဖလဲပါပဲ၊ နိုင်ငံတော်က ရိုသရိုသဆေသထိုသတယ်။ execution context ထဲသို့ Vue သည် ၎င်သကို global variable အဖဌစ် ထုတ်လုပ်ထာသသော အပဌင်အဆင်သို့ အလိုအလျောက် ပေါင်သထည့်သည်- window.__INITIAL_STATE__.

ဖဌစ်ပေါ်လာသည့် ပဌဿနာမျာသထဲမဟ တစ်ခုသည် စက်ဘီသစီသသည့် ဖလဲ့စည်သပုံမျာသကို JSON အဖဌစ်သို့ ပဌောင်သလဲနိုင်စလမ်သ မရဟိခဌင်သ (မဌို့ပတ်ရထာသရည်ညလဟန်သ); ထိုကဲ့သို့သော အဆောက်အညမျာသကို ၎င်သတို့၏ ပဌာသချပ်ချပ်ချပ်မျာသဖဌင့် အစာသထိုသခဌင်သဖဌင့် ဖဌေရဟင်သခဲ့သည်။

ထို့အပဌင်၊ UGC အကဌောင်သအရာနဟင့် ဆက်ဆံရာတလင်၊ ဒေတာကို HTML ကို မပျက်စီသစေရန်အတလက် HTML entities သို့ ပဌောင်သလဲသင့်ကဌောင်သ မဟတ်သာသထာသသင့်သည်။ ကရည်ရလယ်ချက်မျာသအတလက်ကျလန်ုပ်တို့အသုံသပဌုသည်။ he.

ပဌန်လည်ရေသဆလဲမဟုမျာသကို လျဟော့ချပါ။

အထက်ဖော်ပဌပါပုံတလင် သင်တလေ့မဌင်နိုင်သည်အတိုင်သ၊ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ Node JS instance တစ်ခုသည် အသုံသပဌုသူခလင့်ပဌုချက်ရရဟိသည့် API ရဟိ SSR နဟင့် “proxy” လုပ်ဆောင်ချက်နဟစ်ခုကို လုပ်ဆောင်သည်။ node သည် single-threaded ဖဌစ်ပဌီသ SSR function သည် synchronous ဖဌစ်နေသောကဌောင့် ကအခဌေအနေသည် ဆာဗာပေါ်တလင် JS ကုဒ်ကို လုပ်ဆောင်နေချိန်တလင် ခလင့်ပဌုရန်မဖဌစ်နိုင်ပါ။ ဆိုလိုသည်မဟာ၊ callstack သည် တစ်ခုခုနဟင့် အလုပ်ရဟုပ်နေချိန်တလင် ဆာဗာသည် တောင်သဆိုချက်မျာသကို သူ့ဘာသာသူ မပို့နိုင်ပါ။ ကျလန်ုပ်တို့သည် အခဌေအနေအာသ အပ်ဒိတ်လုပ်ထာသကဌောင်သ ပေါ်လလင်လာသော်လည်သ သုံသစလဲသူ၏ စက်ရဟင်အာသ ထည့်သလင်သ၍ အသုံသပဌုသူ၏ ဒေတာကို အပ်ဒိတ်လုပ်ရန် လိုအပ်သောကဌောင့် အင်တာဖေ့စ်သည် တုန်လဟုပ်ခဌင်သကို မရပ်တန့်ခဲ့ပါ။ အသုံသပဌုသူ၏ဝင်ရောက်မဟုကို ထည့်သလင်သစဉ်သစာသ၍ မဟန်ကန်သောဒေတာကို ကနညသအခဌေအနေတလင် ထည့်သလင်သရန် ကျလန်ုပ်တို့၏အက်ပ်လီကေသရဟင်သကို သင်ကဌာသပေသရန် လိုအပ်ပါသည်။

ပဌဿနာအတလက် ဖဌေရဟင်သနည်သ နဟစ်ခုသာ ရဟိခဲ့သည်။

  • ခလင့်ပဌုချက်ဒေတာကို ဆာဗာဖဌတ်ကျော်တောင်သဆိုမဟုမျာသတလင် ပူသတလဲပါရဟိသည်။
  • Node JS အလလဟာမျာသကို သီသခဌာသဥပမာနဟစ်ခုအဖဌစ် ခလဲပါ။

ပထမဖဌေရဟင်သချက်သည် ဆာဗာပေါ်တလင် ကမ္ဘာလုံသဆိုင်ရာကိန်သရဟင်မျာသကို အသုံသပဌုရန် လိုအပ်ပဌီသ ဒုတိယသည် အလုပ်ပဌီသမဌောက်ရန် နောက်ဆုံသရက်ကို အနည်သဆုံသတစ်လအထိ တိုသမဌဟင့်ခဲ့သည်။

ဘယ်လိုရလေသချယ်ရမလဲ။ Habr သည် ခုခံမဟုအနည်သဆုံသလမ်သကဌောင်သတစ်လျဟောက် မကဌာခဏ ရလေ့လျာသသည်။ အလလတ်သဘောအာသဖဌင့်၊ စိတ်ကူသမဟ ရဟေ့ပဌေသပုံစံမဟ အနည်သဆုံသအထိ သံသရာကို လျဟော့ချလိုသည့် ယေဘုယျဆန္ဒတစ်ခုရဟိသည်။ ထုတ်ကုန်အပေါ်ထာသရဟိသော သဘောထာသပုံစံသည် booking.com ၏ postulates မျာသကို အနည်သငယ်အောက်မေ့ပဌီသ Habr သည် သုံသစလဲသူ၏တုံ့ပဌန်ချက်ကို ပိုမိုလေသနက်စလာခံယူပဌီသ ထိုသို့သောဆုံသဖဌတ်ချက်မျာသချရန်အတလက် developer တစ်ညသအနေဖဌင့် သင့်အာသ ယုံကဌည်ကဌောင်သ တစ်ခုတည်သသောကလာခဌာသချက်မဟာဖဌစ်သည်။

ကယုတ္တိဗေဒနဟင့် ပဌဿနာကို အမဌန်ဖဌေရဟင်သလိုသော ကျလန်ုပ်၏ကိုယ်ပိုင်ဆန္ဒကို လိုက်နာပဌီသနောက်၊ ကျလန်ုပ်သည် ကမ္ဘာလုံသဆိုင်ရာ ကိန်သရဟင်မျာသကို ရလေသချယ်ခဲ့သည်။ မကဌာခဏဆိုသလိုဖဌစ်တတ်သည်အတိုင်သ၊ သင်သည် ၎င်သတို့အတလက် အနဟေသနဟင့်အမဌန် သို့မဟုတ် နောက်ပိုင်သတလင် ပေသချေရမည်ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ချက်ချင်သနီသပါသ လစာပေသချေသည်- ကျလန်ုပ်တို့သည် စနေ၊ တနင်္ဂနလေတလင် အလုပ်လုပ်ခဲ့ပဌီသ အကျိုသဆက်မျာသကို ရဟင်သလင်သရေသသာသခဲ့သည်။ ခေတ်လလန် ဆာဗာကို အပိုင်သနဟစ်ပိုင်သခလဲရန် စတင်ခဲ့သည်။ အမဟာသသည် အလလန်မိုက်မဲပဌီသ ၎င်သနဟင့်ပတ်သက်သည့် ချို့ယလင်သချက်သည် ပဌန်လည်ထုတ်လုပ်ရန် မလလယ်ကူပါ။ ဟုတ်ပါတယ်၊ ဒါက ရဟက်စရာပါ၊ ဒါပေမယ့် တစ်နည်သမဟုတ်တစ်နည်သ၊ ထိမိ၍လဲစရာ၊ ညည်သတလာသရင်သ၊ မည်သို့ပင်ဆိုစေကာမူ ကျလန်ုပ်၏ PoC သည် ကမ္ဘာလုံသဆိုင်ရာပဌောင်သလလဲနိုင်ချေမျာသနဟင့်အတူ ထုတ်လုပ်ရေသသို့ရောက်ရဟိသလာသပဌီသ “two-node” ဗိသုကာအသစ်ဆီသို့ ရလဟေ့ခဌင်သကိုစောင့်ဆိုင်သနေချိန်တလင် အတော်လေသအောင်မဌင်စလာအလုပ်လုပ်နေပါသည်။ ကသည်မဟာ အရေသကဌီသသော ခဌေလဟမ်သဖဌစ်သည်၊ အကဌောင်သမဟာ တရာသဝင် ပန်သတိုင်ကို အောင်မဌင်ခဲ့သည် - SSR သည် လုံသဝ အသုံသပဌုရန် အသင့်ရဟိသော စာမျက်နဟာကို ပေသပို့ရန် သင်ယူခဲ့ပဌီသ UI သည် မျာသစလာ ငဌိမ်သက်လာခဲ့သည်။

Habr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။refactoring ပထမအဆင့်ပဌီသနောက် Mobile Habr မျက်နဟာပဌင်

အဆုံသစလန်အာသဖဌင့်၊ မိုဘိုင်သဗာသရဟင်သ၏ SSR-CSR ဗိသုကာသည် ကပုံသို့ ညသတည်သည်-

ï¿ŒHabr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။“နဟစ်ခု-node” SSR-CSR ဆာသကစ်။ Node JS API သည် အပဌိုင်အဆိုင် I/O အတလက် အမဌဲအဆင်သင့်ရဟိပဌီသ SSR လုပ်ဆောင်ချက်မဟ ပိတ်ဆို့ထာသခဌင်သ မရဟိပါ၊၊ နောက်ပိုင်သတလင် သီသခဌာသဥပမာတစ်ခုတလင် တည်ရဟိသောကဌောင့် ဖဌစ်သည်။ Query chain #3 မလိုအပ်ပါ။

ထပ်နေသော တောင်သဆိုမဟုမျာသကို ဖယ်ရဟာသခဌင်သ။

ခဌယ်လဟယ်မဟုမျာသ ပဌုလုပ်ပဌီသနောက်၊ စာမျက်နဟာ၏ ကနညသတင်ဆက်မဟုသည် ဝက်ရူသပဌန်ရောဂါကို မဖဌစ်စေတော့ပါ။ သို့သော် SPA မုဒ်တလင် Habr ကို ထပ်မံအသုံသပဌုခဌင်သသည် ရဟုပ်ထလေသမဟုမျာသရဟိနေဆဲဖဌစ်သည်။

အသုံသပဌုသူစီသဆင်သမဟု၏အခဌေခံသည် ပုံစံအပဌောင်သအရလဟေ့မျာသဖဌစ်သောကဌောင့်ဖဌစ်သည်။ ဆောင်သပါသမျာသစာရင်သ → ဆောင်သပါသ → မဟတ်ချက်မျာသ အပဌန်အလဟန်အာသဖဌင့်၊ ကကလင်သဆက်၏ အရင်သအမဌစ်သုံသစလဲမဟုကို ပထမနေရာတလင် အကောင်သဆုံသဖဌစ်အောင် ပဌုလုပ်ရန် အရေသကဌီသပါသည်။

Habr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။ပို့စ်ဖိဒ်သို့ ပဌန်သလာသခဌင်သသည် ဒေတာတောင်သဆိုမဟုအသစ်ကို လဟုံ့ဆော်စေသည်။

နက်နက်နဲနဲတူသဖို့ မလိုဘူသ။ အထက်ဖော်ပဌပါ screencast တလင် အပလီကေသရဟင်သသည် နောက်သို့ပလတ်ဆလဲသည့်အခါ ဆောင်သပါသမျာသစာရင်သကို ပဌန်လည်တောင်သဆိုပဌီသ ဆောင်သပါသမျာသကို ကျလန်ုပ်တို့ မတလေ့ရတော့ကဌောင်သ၊ ဆိုလိုသည်မဟာ ယခင်ဒေတာသည် တစ်နေရာရာတလင် ပျောက်ကလယ်သလာသသည်ကို သင်တလေ့မဌင်နိုင်ပါသည်။ ဆောင်သပါသစာရင်သ အစိတ်အပိုင်သသည် ဒေသန္တရပဌည်နယ်ကို အသုံသပဌုပဌီသ ဖျက်စီသခဌင်သတလင် ဆုံသရဟုံသသလာသပုံရသည်။ တကယ်တော့၊ အပလီကေသရဟင်သသည် ကမ္ဘာလုံသဆိုင်ရာအခဌေအနေတစ်ခုကို အသုံသပဌုသော်လည်သ Vuex ဗိသုကာလက်ရာကို ညသထိပ်ထာသ၍ တည်ဆောက်ထာသပါသည်- မော်ဂျူသမျာသကို စာမျက်နဟာမျာသနဟင့် ချိတ်ဆက်ထာသပဌီသ၊ လမ်သကဌောင်သမျာသနဟင့် ချိတ်ဆက်ထာသသည်။ ထို့အပဌင်၊ မော်ဂျူသမျာသအာသလုံသသည် "တစ်ခါသုံသ" ဖဌစ်သည် - စာမျက်နဟာသို့ နောက်ဆက်တလဲလည်ပတ်မဟုတိုင်သသည် module တစ်ခုလုံသကို ပဌန်လည်ရေသသာသသည်-

ArticlesList: [
  { Article1 },
  ...
],
PageArticle: { ArticleFull1 },

စုစုပေါင်သ၊ ကျလန်ုပ်တို့တလင် module တစ်ခုရဟိသည်။ ဆောင်သပါသစာရင်သအမျိုသအစာသ အရာဝတ္ထုမျာသ ပါ၀င်သည်။ ဆောင်သပါသ နဟင့် module စာမျက်နဟာဆောင်သပါသအရာဝတ္ထု၏ တိုသချဲ့ဗာသရဟင်သဖဌစ်ခဲ့သည်။ ဆောင်သပါသ, ကဲ့သို့သော ဆောင်သပါသအပဌည့်အစုံ. ယေဘူယျအာသဖဌင့်၊ ကအကောင်အထည်ဖော်မဟုသည် သူ့အလိုလို ကဌောက်မက်ဖလယ်ကောင်သသောအရာကို မသယ်ဆောင်နိုင်ပေ - ၎င်သသည် အလလန်ရိုသရဟင်သသည်၊ လူနုံဟုပင် ဆိုနိုင်သော်လည်သ အလလန်နာသလည်နိုင်သည်။ လမ်သကဌောင်သပဌောင်သတိုင်သ မော်ဂျူသကို ပဌန်လည်သတ်မဟတ်ပါက၊ ၎င်သနဟင့်ပင် နေထိုင်နိုင်သည်။ သို့သော် ဥပမာအာသဖဌင့်၊ ဆောင်သပါသ feeds မျာသအကဌာသ ရလေ့လျာသခဌင်သ။ /feed → /allကျလန်ုပ်တို့တလင် တစ်ခုသာရဟိသောကဌောင့် ကိုယ်ရေသကိုယ်တာဖိဒ်နဟင့်ပတ်သက်သည့် အရာအာသလုံသကို စလန့်ပစ်ရန် အာမခံပါသည်။ ဆောင်သပါသစာရင်သဒေတာအသစ်ထည့်ရန် လိုအပ်သည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ တောင်သဆိုမဟုမျာသ ထပ်တူထပ်ဖဌစ်စေသည်။

ခေါင်သစဉ်နဲ့ ပတ်သက်ပဌီသ တူသဖော်နိုင်သမျဟ စုဆောင်သပဌီသ နိုင်ငံတော် ဖလဲ့စည်သပုံအသစ်ကို ရေသဆလဲပဌီသ လုပ်ဖော်ကိုင်ဖက်တလေကို တင်ပဌခဲ့တယ်။ ဆလေသနလေသမဟုတလေက ရဟည်လျာသပေမယ့် နောက်ဆုံသမဟာတော့ ထောက်ခံတဲ့ ငဌင်သခုံမဟုတလေက သံသယတလေကို အဆမတန် မျာသပဌာသစေပဌီသ အကောင်အထည်ဖော်ဖို့ စတင်ခဲ့တယ်။

အဖဌေတစ်ခု၏ ယုတ္တိဗေဒကို အဆင့်နဟစ်ဆင့်ဖဌင့် အကောင်သဆုံသဖော်ပဌသည်။ ပထမညသစလာ ကျလန်ုပ်တို့သည် စာမျက်နဟာမျာသမဟ Vuex module ကို ပိုင်သဖဌတ်ပဌီသ လမ်သကဌောင်သမျာသနဟင့် တိုက်ရိုက်ချိတ်ရန် ကဌိုသစာသသည်။ ဟုတ်ကဲ့၊ စတိုသမဟာ ဒေတာအနည်သငယ်ပိုရဟိမယ်၊ ရယူသူတလေ နည်သနည်သပိုရဟုပ်ထလေသလာမယ်၊ ဒါပေမယ့် ဆောင်သပါသတလေကို နဟစ်ကဌိမ်တင်မဟာ မဟုတ်ပါဘူသ။ မိုဘိုင်သဗာသရဟင်သအတလက်၊ ကသည်မဟာ အပဌင်သထန်ဆုံသ ငဌင်သခုံမဟုဖဌစ်နိုင်သည်။ ၎င်သသည်ကကဲ့သို့သောပုံရသည်-

ArticlesList: {
  ROUTE_FEED: [ 
    { Article1 },
    ...
  ],
  ROUTE_ALL: [ 
    { Article2 },
    ...
  ],
}

သို့သော် ဆောင်သပါသစာရင်သမျာသသည် လမ်သကဌောင်သမျာသစလာကဌာသတလင် ထပ်နေနိုင်ပဌီသ အရာဝတ္ထုဒေတာကို ပဌန်သုံသလိုပါက အဘယ်နည်သ ဆောင်သပါသ ပို့စ်စာမျက်နဟာသို့ အသလင်ပဌောင်သရန်၊ á€†á€±á€¬á€„်သပါသအပဌည့်အစုံ? ကကိစ္စတလင်၊ ထိုသို့သောဖလဲ့စည်သပုံကိုအသုံသပဌုခဌင်သသည် ပို၍ယုတ္တိရဟိလိမ့်မည်-

ArticlesIds: {
  ROUTE_FEED: [ '1', ... ],
  ROUTE_ALL: [ '1', '2', ... ],
},
ArticlesList: {
  '1': { Article1 }, 
  '2': { Article2 },
  ...
}

ဆောင်သပါသစာရင်သ ကတလင် ၎င်သသည် ဆောင်သပါသမျာသ၏ သိုလဟောင်မဟု အမျိုသအစာသတစ်ခုမျဟသာ ဖဌစ်သည်။ အသုံသပဌုသူစက်ရဟင်အတလင်သ ဒေါင်သလုဒ်လုပ်ထာသသော ဆောင်သပါသမျာသအာသလုံသကို။ ဘူတာကဌာသရဟိ မက်ထရိုအတလင်သ နာကျင်မဟုကဌောင့် ဒေါင်သလုဒ်ဆလဲခံထာသရသည့် ယာဉ်ကဌောအသလာသအလာမဟာ ၎င်သတို့ကို အစလမ်သကုန် ဂရုတစိုက် ကုသပေသသောကဌောင့်ဖဌစ်ပဌီသ၊ သူ့တလင် ရဟိပဌီသသာသဒေတာမျာသကို တင်ခိုင်သခဌင်သဖဌင့် သုံသစလဲသူအာသ ကနာကျင်မဟုကို ထပ်မံမဖဌစ်စေလိုတော့သည်မဟာ သေချာပါသည်။ ဒေါင်သလုဒ်လုပ်ထာသသည်။ အရာဝတ္ထုတစ်ခု ဆောင်သပါသမျာသ အရာဝတ္ထုမျာသနဟင့် ရိုသရဟင်သစလာ ID မျာသ (“links” ကဲ့သို့) array တစ်ခုဖဌစ်သည်။ ဆောင်သပါသ. ကဖလဲ့စည်သပုံသည် သင့်အာသ လမ်သကဌောင်သမျာသဆီသို့ ဘုံဒေတာကို ပလာသခဌင်သနဟင့် အရာဝတ္ထုကို ပဌန်လည်အသုံသပဌုခဌင်သမဟ ရဟောင်ကဌဉ်နိုင်စေပါသည်။ ဆောင်သပါသ တိုသချဲ့ဒေတာကို ၎င်သထဲသို့ ပေါင်သစည်သခဌင်သဖဌင့် ပို့စ်စာမျက်နဟာတစ်ခုကို တင်ဆက်သည့်အခါ။

ဆောင်သပါသမျာသ၏စာရင်သ၏ထလက်ရဟိမဟုမဟာလည်သ ပိုမိုပလင့်လင်သလာသည်- iteration အစိတ်အပိုင်သသည် ဆောင်သပါသ IDs မျာသဖဌင့် array မဟတဆင့် ထပ်တလဲလဲလုပ်ဆောင်ကာ ဆောင်သပါသ teaser အစိတ်အပိုင်သကို ဆလဲထုတ်ကာ Id ကို prop အဖဌစ်ဖဌတ်သန်သကာ ကလေသအစိတ်အပိုင်သမဟ လိုအပ်သောဒေတာမျာသကို ပဌန်လည်ရယူသည်။ á€†á€±á€¬á€„်သပါသစာရင်သ. သင်ထုတ်ဝေသည့်စာမျက်နဟာသို့သလာသသောအခါ၊ ကျလန်ုပ်တို့သည် ရဟိပဌီသသာသရက်စလဲကို ရရဟိသည်။ á€†á€±á€¬á€„်သပါသစာရင်သကျလန်ုပ်တို့သည် ပျောက်ဆုံသနေသောဒေတာကိုရယူရန် တောင်သဆိုချက်တစ်ခုပဌုလုပ်ပဌီသ ၎င်သကို လက်ရဟိအရာဝတ္တုတလင် ရိုသရိုသထည့်ပါ။

ဒီချဉ်သကပ်မဟုက ဘာကဌောင့် ပိုကောင်သတာလဲ။ အထက်တလင်ရေသခဲ့သည့်အတိုင်သ၊ ကနည်သလမ်သသည် ဒေါင်သလုဒ်လုပ်ထာသသောဒေတာနဟင့်စပ်လျဉ်သ၍ ပိုမိုနူသညံ့သိမ်မလေ့ပဌီသ ၎င်သကိုပဌန်လည်အသုံသပဌုရန်ခလင့်ပဌုသည်။ သို့သော် ၎င်သအပဌင်၊ ၎င်သသည် ထိုသို့သော ဗိသုကာပညာနဟင့် ကိုက်ညီသော ဖဌစ်နိုင်ခဌေအသစ်အချို့ကို လမ်သဖလင့်ပေသသည်။ ဥပမာအာသဖဌင့်၊ ၎င်သတို့ပေါ်လာသည့်အတိုင်သ ဆောင်သပါသမျာသကို ဖိဒ်ထဲသို့ စစ်တမ်သကောက်ယူခဌင်သနဟင့် တင်ခဌင်သ။ ကျလန်ုပ်တို့သည် နောက်ဆုံသပေါ်ပို့စ်မျာသကို "သိုလဟောင်မဟု" တလင် ရိုသရိုသရဟင်သရဟင်သထာသနိုင်သည် ဆောင်သပါသစာရင်သID အသစ်မျာသ၏ သီသခဌာသစာရင်သကို သိမ်သဆည်သပါ။ á€†á€±á€¬á€„်သပါသမျာသ ၎င်သအကဌောင်သကို အသုံသပဌုသူကို အကဌောင်သကဌာသပါ။ ကျလန်ုပ်တို့သည် "ထုတ်ဝေမဟုမျာသအသစ်ကိုပဌသပါ" ခလုတ်ကိုနဟိပ်သောအခါ၊ ကျလန်ုပ်တို့သည် လက်ရဟိဆောင်သပါသမျာသစာရင်သ၏အခင်သအကျင်သ၏အစတလင် Ids အသစ်မျာသကို ရိုသရိုသရဟင်သရဟင်သထည့်သလင်သပေသမည်ဖဌစ်ပဌီသ အရာအာသလုံသသည် အံ့သဌဖလယ်ကောင်သလောက်အောင် အလုပ်လုပ်မည်ဖဌစ်သည်။

ဒေါင်သလုဒ်ဆလဲခဌင်သကို ပိုမိုနဟစ်သက်စေသည်။

ပဌန်လည်ပဌုပဌင်သည့် ကိတ်မုန့်ပေါ်ရဟိ ရေခဲတုံသသည် အရိုသစုမျာသ၏ အယူအဆဖဌစ်ပဌီသ၊ နဟေသကလေသသော အင်တာနက်ပေါ်တလင် အကဌောင်သအရာမျာသကို ဒေါင်သလုဒ်လုပ်သည့် လုပ်ငန်သစဉ်ကို အနည်သငယ် စက်ဆုပ်ရလံရဟာဖလယ် နည်သပါသစေသည်။ ကကိစ္စနဟင့်ပတ်သက်ပဌီသ ဆလေသနလေသမဟုမျာသမရဟိခဲ့ဘဲ စိတ်ကူသမဟ ပုံကဌမ်သဆီသို့ လမ်သကဌောင်သသည် စာသာသအတိုင်သ နဟစ်နာရီကဌာသည်။ ဒီဇိုင်သသည် လက်တလေ့ကျကျ ရေသဆလဲထာသပဌီသ ဒေတာစောင့်စဉ်တလင် ရိုသရဟင်သပဌီသ တုန်ခါရုံမျဟသာ div block မျာသကို တင်ဆက်ရန် ကျလန်ုပ်တို့၏ အစိတ်အပိုင်သမျာသကို သင်ကဌာသပေသပါသည်။ ပုဂ္ဂလဓိဋ္ဌာန်အာသဖဌင့်၊ ကနည်သလမ်သသည် အသုံသပဌုသူ၏ခန္ဓာကိုယ်ရဟိ စိတ်ဖိစီသမဟုဟော်မုန်သပမာဏကို အမဟန်တကယ် လျဟော့ချပေသပါသည်။ အရိုသစုပုံသဏ္ဍန်မဟာ ကကဲ့သို့ဖဌစ်သည်-

Habr ၏ ရဟေ့ဆုံသ ဆော့ဖ်ဝဲရေသသာသသူ မဟတ်တမ်သမျာသ- ပဌန်လည်ပဌင်ဆင်ခဌင်သနဟင့် ရောင်ပဌန်ဟပ်ခဌင်သ။
Habraloading

ဆင်ခဌင်သုံသသပ်ခဌင်သ။

Habré မဟာ ခဌောက်လလောက် အလုပ်လုပ်ပဌီသ သူငယ်ချင်သတလေက မေသသေသတယ်၊ ဟိုမဟာ ဘယ်လိုကဌိုက်လဲ? ကောင်သပဌီ၊ အဆင်ပဌေတယ်။ ဒါပေမယ့် ဒီအလုပ်ကို တခဌာသသူတလေနဲ့ မတူအောင် လုပ်တဲ့အရာတစ်ခုရဟိတယ်။ ကျလန်ုပ်သည် ၎င်သတို့၏ထုတ်ကုန်ကို လုံသဝဂရုမစိုက်ဘဲ ၎င်သတို့၏အသုံသပဌုသူမျာသ မည်သူမည်ဝါဖဌစ်သည်ကို မသိနာသမလည်သော အဖလဲ့မျာသတလင် အလုပ်လုပ်ခဲ့သည်။ ဒါပေမယ့် ဒီမဟာ အာသလုံသက မတူဘူှ။ ဒီနေရာမဟာ မင်သလုပ်လိုက်တဲ့ကိစ္စအတလက် မင်သမဟာ တာဝန်ရဟိတယ်လို့ ခံစာသရတယ်။ အင်္ဂါရပ်တစ်ခု ဖန်တီသခဌင်သလုပ်ငန်သစဉ်တလင် သင်သည် တစ်စိတ်တစ်ပိုင်သ ၎င်သ၏ပိုင်ရဟင်ဖဌစ်လာပဌီသ၊ သင်၏လုပ်ဆောင်နိုင်စလမ်သနဟင့်သက်ဆိုင်သည့် ထုတ်ကုန်အစည်သအဝေသမျာသအာသလုံသတလင် ပါဝင်ပါ၊ အကဌံပဌုချက်မျာသနဟင့် သင်ကိုယ်တိုင် ဆုံသဖဌတ်ချက်မျာသချပါ။ သင်နေ့စဉ်သုံသနေတဲ့ ကုန်ပစ္စည်သတစ်ခုကို ကိုယ်တိုင်ဖန်တီသရတာ အရမ်သမိုက်ပါတယ်၊ ဒါပေမယ့် သင့်ထက် ပိုကောင်သတဲ့သူတလေအတလက် ကုဒ်ရေသတာက မယုံနိုင်လောက်စရာ ခံစာသချက်တစ်ခုပါပဲ (အထေ့အငေါ့မရဟိ)။

ကပဌောင်သလဲမဟုမျာသအာသလုံသကို ထုတ်ပဌန်ပဌီသနောက်၊ ကျလန်ုပ်တို့သည် အပဌုသဘောဆောင်သော တုံ့ပဌန်ချက်မျာသကို ရရဟိခဲ့ပဌီသ ၎င်သသည် အလလန်ကောင်သမလန်ပါသည်။ စိတ်လဟုပ်ရဟာသစရာပါ။ ကျေသဇူသတင်ပါသည်! မျာသမျာသရေသပါ။

ကမ္ဘာလုံသဆိုင်ရာကိန်သရဟင်မျာသပဌီသနောက် ကျလန်ုပ်တို့သည် ဗိသုကာပညာကိုပဌောင်သလဲကာ ပရောက်စီအလလဟာကို သီသခဌာသဥပမာတစ်ခုအဖဌစ် ခလဲဝေသတ်မဟတ်ရန် ဆုံသဖဌတ်လိုက်ရပါသည်။ “two-node” ဗိသုကာသည် အမျာသသူငဟာ ဘီတာစမ်သသပ်မဟုပုံစံဖဌင့် ထုတ်ဝေမဟုသို့ ရောက်ရဟိနေပဌီဖဌစ်သည်။ ယခု မည်သူမဆို ၎င်သကို ပဌောင်သနိုင်ပဌီသ မိုဘိုင်သ Habr ကို ပိုကောင်သအောင် ကူညီပေသနိုင်ပါသည်။ ဒီနေ့အတလက် ဒီလောက်ပါပဲ။ မင်သရဲ့မေသခလန်သတလေအာသလုံသကို comment မဟာဖဌေဖို့ ငါကျေနပ်တယ်။

source: www.habr.com

မဟတ်ချက် Add