နိဒါန်း
အင်တာနက်လျင်မြန်စွာဖွံ့ဖြိုးတိုးတက်မှုနှင့်အတူဝက်ဘ်ဆိုက်သတင်းအချက်အလက်ဝယ်လိုအားလည်းကြီးထွားလာသည်။ ထိရောက်သောကွန်ယက်အချက်အလက်ရယူရန်ကိရိယာတစ်ခုအနေဖြင့်, ကျယ်ကျယ်ပြန့်ပြန့်အသုံးများသောဖွံ့ဖြိုးရေးဘာသာစကားတစ်ခုအနေဖြင့် PHP တွင် developer များစွာသည်တွား 0 င်ရေးရန်ရွေးချယ်ရန်ရွေးချယ်ရန်ပြောင်းလွယ်ပြင်လွယ်နှင့်အင်အားကြီးသောစွမ်းရည်များရှိသည်။ သို့သော် Reptile application များသည်အထူးသဖြင့်သယံဇာတသုံးစွဲမှုနှင့်အချိန် overhead ၏စွမ်းဆောင်ရည်မြှင့်တင်မှုများနှင့်ရင်ဆိုင်နေရလေ့ရှိသည်။ ဤဆောင်းပါးသည် Php Brawlers ၏စွမ်းဆောင်ရည်အကောင်းဆုံးနည်းလမ်းများကို developer များကတွားသွားသူများ၏အကောင်အထည်ဖော်မှုကိုတိုးတက်စေရန်နှင့်စွမ်းဆောင်ရည်မြင့်တွားတတ်သောတိရစ္ဆာန်စနစ်ကိုဖန်တီးရန်ကူညီရန်စွမ်းဆောင်ရည်အကောင်းဆုံးနည်းစနစ်များကိုလေ့လာလိမ့်မည်။
1 ။ IO စစ်ဆင်ရေး optimization
Crawler applications များတွင် IO စစ်ဆင်ရေး (ထိုကဲ့သို့သော network compacen and disk နှင့်ရေးခြင်းနှင့်ရေးသားခြင်းနှင့်ရေးသားခြင်းကဲ့သို့သော) များသောအားဖြင့်အဓိကစွမ်းဆောင်ရည်မြှင့်တင်ခြင်းဖြစ်သည်။ IO စစ်ဆင်ရေးများကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းအားဖြင့်တွားတတ်သောတိရစ္ဆာန်များ၏စစ်ဆင်ရေးထိရောက်မှုသိသိသာသာတိုးတက်လာနိုင်ပါတယ်။
1 ။ asynchronous တောင်းဆိုမှုကိုစာကြည့်တိုက်ကိုသုံးပါ
ရိုးရာ HTTP တောင်းဆိုမှုများသည်ညှိနှိုင်းမှုများပြုလုပ်နေပြီးတောင်းဆိုမှုတစ်ခုစတင်ပြီးနောက်, လာမည့်တောင်းဆိုမှုကိုဆက်လက်မစတင်မှီသင်တုန့်ပြန်ရန်လိုအပ်သည်။ asynchronous တောင်းဆိုမှုစာကြည့်တိုက်ကို အသုံးပြု. တုန့်ပြန်မှုကိုစောင့်ဆိုင်းနေစဉ်အခြားတောင်းဆိုမှုများကိုဆက်လက်ပေးပို့နိုင်သည်, PHP တွင်အလွန်အမင်းပြတ်သားသောတောင်းဆိုမှုဆိုင်ရာစာကြည့်တိုက်များစွာရှိပြီး, နမူနာကုဒ်:
$ client = new buasthtttplient ();
$ ကတိပေး = [
$ client-> getasync (http://example.com/page1),
$ client-> getasync (http://example.com/page2),
$ client-> getasync (http://exampe.com/page3),
];
$ ရလဒ်များ = guasthttppromise :: Unwrap ($ ကတိ),
foreach ($ တုံ့ပြန်မှုအဖြစ် $ ရလဒ်များ) {
// ဖြစ်စဉ်ကိုတုံ့ပြန်မှုရလဒ်}
2 ။ ကျိုးကြောင်းဆီလျော်စွာတောင်းဆိုမှုအချိန်ကိုအချိန်သတ်မှတ်ထားပါ
ကွန်ယက်တောင်းဆိုမှုများသည်အချိန်ကုန်ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်း, တောင်းခံမှုအချိန်မီအချိန်သတ်မှတ်ခြင်းအားဖြင့်လျင်မြန်စွာပျက်ကွက်မှုနှင့်အချိန်မီပြန်လည်ထူထောင်ရေးအတွက်ပြန်လည်ထူထောင်ရေးကိုသေချာစေခြင်းအားဖြင့်ခြုံငုံဖြတ်သန်းသွားနိုင်မှုကိုတိုးတက်စေနိုင်သည်။ နမူနာကုဒ်:
$ client = new buastehttpClient (['timeoutout' => 3]);
$ တုံ့ပြန်မှု = $ client-get ('http://exampe.com/page1');
3 ။ မကြာခဏဖတ်ခြင်းနှင့်စစ်ဆင်ရေးရေးရန်မကြာခဏ disk ကိုရှောင်ကြဉ်ပါ
Disk IO သည်စွမ်းဆောင်ရည်မြှင့်တင်ရေးဖြစ်လာနိုင်သည်။ မကြာခဏဖတ်ခြင်းနှင့်ရေးခြင်းလုပ်ငန်းများကိုရှောင်ရှားရန်အချက်အလက်များကိုမှတ်ဉာဏ်တွင်သိမ်းဆည်းထားနိုင်ပြီးမှတ်ဉာဏ်တစ်ခုသည်စွမ်းဆောင်ရည်တစ်ခုသို့ရောက်ပြီးသို့မဟုတ် cache နည်းပညာကို Disk IO ကိုလျှော့ချရန်အသုံးပြုသည်။ ထို့အပြင်ချည်ပေါင်းစုံသို့မဟုတ်ဘက်စုံသုံးနည်းပညာကိုအသုံးပြုခြင်းသည် disk ကိုဖတ်ရန်နှင့်ရေးရန်လုပ်ငန်းစဉ်များကိုလည်းအရှိန်မြှင့်နိုင်သည်။
2 ။ တစ်ပြိုင်နက်တည်း struning optimization
တစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်းသည်တွား 0 န်ဆောင်မှုပေးသောစွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်အတွက်သော့ချက်ဖြစ်သည်။ တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်းနှင့်ပြန်လည်ပြုပြင်ခြင်းများကိုအသုံးပြုပြီးပြုပြင်ပြောင်းလဲမှုများကိုစတင်လုပ်ဆောင်ခြင်းအားဖြင့်,
1 ။ MultInded / Multi-process processing
လုပ်ငန်းစဉ်မျိုးစုံသို့မဟုတ်ချည်မျိုးစုံ သုံး. threads များကိုအသုံးပြုခြင်းသည်အပြိုင်တောင်းဆိုမှုများကိုအကောင်အထည်ဖော်နိုင်သည်။ PHP တွင် PCNTL (သို့) SWOOLE extension ကိုသုံးနိုင်သည်။ နမူနာကုဒ် (SWOOLE Multi-process extension ကိုသုံးခြင်း):
$ Pool = အသစ် swooleprocesspool (10);
$ pool-> အတွက် ('အလုပ်သမားတင်တော်', function ($ pool, $ workyid) {
// ယုတ္တိဗေဒ $ client = အသစ်သော growehttpcient ();
$ တုံ့ပြန်မှု = $ client-get ('http://example.com/page' ။ ($ workerid + 1));
// ဖြစ်စဉ်ကိုတုံ့ပြန်မှုရလဒ်};
$ pool-> စတင် ();
2 ။ Task Queue ကိုသုံးပါ
တွား 0 တ္တရားနှင့်လုပ်ငန်းစဉ်ကိုခွဲခြားရန်နှင့်လုပ်ငန်းစဉ်များကိုခွဲခြားရန် Task Queue များကိုအသုံးပြုပါ။ URL ကို URL ကိုတန်းစီသို့ထည့်ခြင်းအားဖြင့်အလုပ်သမားများသည်လူတန်းစားမှ URL များကိုရယူပြီး၎င်းတို့အားတန်းစီရန်, နမူနာကုဒ် (task ague အဖြစ် redis ကိုအသုံးပြုခြင်း):
$ redis = အသစ် (Redis);
$ Redis-> Connect ('127.0.0.1), 6379,
$ workerid = getMypid ();
နေစဉ် (စစ်မှန်တဲ့) {
// Queue မှ URL ကိုရယူပါ
$ URL = $ Redis-> LPOP ('task_queue');
// ယုတ္တိဗေဒ $ client = အသစ်သော growehttpcient ();
$ တုံ့ပြန်မှု = $ client-> get ($ URL);
$ တုံ့ပြန်မှု: = $ တုံ့ပြန်မှု -> GetBery () -> GetContents ();
// ...
}
3 ။ Memory Management Optimization
တွား 0 န်ဆောင်မှုများတွင်တည်ငြိမ်မှုနှင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်ကျိုးကြောင်းဆီလျော်သောမှတ်ဉာဏ်စီမံခန့်ခွဲမှုသည်အလွန်အရေးကြီးသည်။
1 ။ မှတ်ဉာဏ်ယိုစိမ့်မှုကိုလျှော့ချပါ
ရှည်လျားသောပြေးနေသောတွားသမားများသည်မှတ်ဥာဏ်ယိုစိမ့်မှုများကိုတွေ့ကြုံခံစားနိုင်ပြီးဆင်းရဲသောစနစ်တည်ငြိမ်မှုကိုဖြစ်ပေါ်စေသည်။ ထို့ကြောင့် developer များကမှတ်ဉာဏ်ကိုအချိန်တိုအတွင်းလွတ်မြောက်ရန်နှင့်ကမ္ဘာလုံးဆိုင်ရာ variable များနှင့်မြို့ပတ်ရထားကိုးကားချက်များကိုရှောင်ရှားရန်သေချာစေသင့်သည်။
2 ။ မှတ်ဥာဏ်အသုံးပြုမှုကိုအကောင်းဆုံးလုပ်ပါ
ဒေတာအမြောက်အများလိုအပ်သည့်အခြေအနေများအတွက်အချက်အလက်များကိုတစ်ချိန်တည်းတွင်အလွန်အကျွံတင်ရန်အလွန်အကျွံမှတ်ဥာဏ်အသုံးပြုမှုကိုရှောင်ရှားရန်အတွက်အချက်အလက်များသို့မဟုတ်မီးစက်များဖြင့်ဒေတာများကိုအစုအဝေးတွင်အချက်အလက်များကိုဖြည့်ဆည်းပေးနိုင်သည်။ နမူနာကုဒ် (Generator ကိုသုံးခြင်း):
function getpages () {)
$ စာမျက်နှာ = 1;
နေစဉ် (စစ်မှန်တဲ့) {
$ client = new buasthtttplient ();
$ တုံ့ပြန်မှု = $ client-get ('http://example.com/page' ။ $ စာမျက်နှာ);
$ Response-> GetBude () -> GetContents (),
$ စာမျက်နှာ ++;
}
}
foreach (getpages () $ pagecontent အဖြစ်) {
// လုပ်ငန်းစဉ်စာမျက်နှာအကြောင်းအရာ}
ကောက်ချက်
ဤဆောင်းပါးသည် IO စစ်ဆင်ရေးပိုမိုကောင်းမွန်စေရန်, ကျိုးကြောင်းဆီလျော်စွာဤနည်းစနစ်များကိုကျင့်သုံးခြင်းအားဖြင့်တွားမြင်လွှာများ၏စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်လာပြီးအချက်အလက်များတွားသွားနိုင်မှုကိုတိုးတက်စေနိုင်သည်။ သို့သော် Performance optimization ကိုတစ်ညလုံးမပြည့်စုံနိုင်ပါ, တွား 0 န်ထမ်းအပလီကေးရှင်းတစ်ခုချင်းစီသည်မတူညီသောစွမ်းဆောင်ရည်ပြောင်ပြောင်တင်းတင်းနှင့်ရင်ဆိုင်ရနိုင်သဖြင့်သတ်သတ်မှတ်မှတ်လိုအပ်ချက်များကိုဖြည့်ဆည်းရန်စဉ်ဆက်မပြတ်ညှိရန်လိုအပ်သည်။ ဤဆောင်းပါးသည်သင်၏ PHP တွားမြင်ကွင်းဖွံ့ဖြိုးတိုးတက်မှုတွင်သင့်အားလှုံ့ဆော်ပေးနိုင်ရန်နှင့်ကူညီနိုင်လိမ့်မည်ဟုမျှော်လင့်ပါသည်။