PHP ဘာကြောင့်မကြိုက်တာလဲ
php ကိုဟိုနားတစ ဒီနားတစ တိပ်နဲ့ဖာထားတဲ့ language လို့ပြောရင် စိတ်ဆိုးကြမလားမသိဘူး။ ကျွန်တော် project ၂ ခု ၃ ခုလောက် Laravel သုံးဖူးတယ်။ React, Vue တို့လို SPA မတိုင်ခင် ဟိုးအရင် Blade template ခေတ်တုန်းကပါ။ Laravel ကိုတော့ အတော်လေး သဘောကျမိပေမယ့် php ကို language တခုအနေနဲ့ လုံးဝမကြိုက်ဘူး။ php ဆိုတာ ဟိုနားဒီနားပေါက်ပြဲနေတာတွေကို တိပ်နဲ့ လျှောက်ကပ်ပြီး ဆက်ထားသလိုပဲလို့ php နဲ့ပတ်သက်တဲ့ ကိုယ့်အမြင်ကို ပြောဖြစ်တယ်။
ဒါပေမယ့် မျှတအောင် ပြောရရင် php ဆိုတာ Rust တို့ Go တို့လို စလုံးရေးစကတည်းက application programming အတွက် ရည်ရွယ်ပြီးရေးခဲ့တာလည်း ဟုတ်မှမဟုတ်တာပဲ။ ပြောချင်တာက php ကသိပ် literal ဆန်တယ်။ client ဆီက request တခု ရောက်လာရင် ဘာလုပ်မလဲဆိုတဲ့ code တွေကို C နဲ့ရေးပြီး compile ထားလို့ရတယ်။ ဒါပေမယ့် C ဆိုတဲ့အတိုင်း productivity မကောင်းဘူး။ code အပြောင်းအလဲတွေကို hot swap မရဘူးစသဖြင့်ပေါ့။
ဒီတော့ ရိုးရှင်းတဲ့ (စစချင်းမှာ ခေါက်ဆွဲဖြစ်ခဲ့တဲ့ php ကို ရိုးရှင်းတဲ့လို့ ပြောရမှာကိုလည်း ရီတော့ရီချင်သား xD) syntax မျိုးရေးပြီး သူ့ကို interpret လုပ်ပေးနိုင်မယ့် program တခုကို C နဲ့ရေးတယ်။ နောက် CPU intensive ဖြစ်မယ့် routine တွေ ဥပမာ multibyte string တို့ file IO ဘာညာတွေကို C နဲ့ရေးတယ်။ TCP port ဆီကို request တခု ရောက်လာရင် web server က php interpreter process တကြောင်း ထွက်ပြီး လိုအပ်တဲ့ php file ကိုလှမ်း execute ခိုင်းလိုက်မယ်ပေါ့။ ဥပမာ index.php စသဖြင့်။ အဲဒါပြီးရင် စောစောက web server ဆီ response ပြန် dump ပြီး interpreter ရဲ့အလုပ်ပြီးပြီ။
ဒါပေမယ့် maintainable ဖြစ်စေမယ့် OO လို paradigm နဲ့ application မျိုးတွေဆောက်ချင်လာတဲ့အခါ php ကတခုပြီးတခု လိုက် patch ရင်းနဲ့ အဲမှာ ပျားတုပ်တော့တာပဲ။ နဂိုက ရိုးရိုးပဲ တွေးပြီး လုပ်ခဲ့တဲ့ language ခမျာမှာ runtime လည်းမရှိ။ မရှိတော့ classpath တောင် on demand ရှာရတော့ performance ကစုတ်။ နောက်ပြီး request ရောက်လာမှ web server က process တကြောင်းစီ ထွက်ခိုင်းနေရတဲ့ပုံစံကလည်း process တွေအချင်းချင်း ဘာ coordination မရှိတဲ့အတွက် reuse လုပ်လို့မရပြန်ဘူး။
ဥပမာ ဆိုပါတော့ Java တို့ Go တို့တွေမှာ MYSQL ကိုလှမ်းချိတ်ဖို့အတွက် database connection pool ဆောက်ထားပြီး application ဖက်မှာလည်း non-blocking style ကိုသုံးမယ်ဆိုရင် total connection အရေအတွက် 100 ပဲထားပါစေဦး။ concurrent request 100 မကအောင် လက်ခံလို့ရတယ်။ ဒါပေမယ့် php မှာ process တခုချင်းစီက သူ့ context နဲ့သူမို့ အကုန်လုံး ပေါင်းလိုက်ရင် limit ရောက်ပြီလား၊ မရောက်သေးဘူးလား မသိနိုင်ဘူး။ အဲတော့ process အရေအတွက်ကို ကန့်သတ်လိုက်ရတာတို့ proxy ခံတာတို့ လုပ်ရတယ်။ အဲလိုမျိုးတွေပေါ့ တိပ်နဲ့ဟိုဖာဒီကပ်ဆိုတာ။ ပြင်တာတော့ တခုပြီးတခု လိုက်ပြင်၊ လိုက်ထည့်တာပဲ တိပ်ကပ်ဖြစ်နေတာဆိုးတယ်။