Programu ya polepole hugharimu pesa kwa njia ambazo ni rahisi kuzikosa. Wageni huacha kurasa zinazochukua muda mrefu kupakia, wafanyakazi hupoteza uvumilivu na dashibodi zinazochelewa, injini za utafutaji hupendelea tovuti na seva za haraka zinazofanya kazi kwa bidii kuliko inavyopaswa kuongeza bili za upangishaji. Laravel ni mfumo wenye uwezo na unaweza kuendesha programu za haraka sana, lakini haifanyi kila programu iwe haraka kiotomatiki. Kasi hutokana na maamuzi mazuri, na makosa machache ya kawaida husababisha kupungua kwa kasi kwa programu.
Mwongozo huu unapitia njia kumi na nne za vitendo za kuboresha utendaji wa Laravel, kwa mpangilio ambao kwa kawaida hulipa: pima kwanza, rekebisha hifadhidata, kisha ongeza uhifadhi wa data na usindikaji wa mandharinyuma, kisha rekebisha mfumo na miundombinu. Imeandikwa kwa ajili ya watengenezaji na watu wanaoisimamia, kwa hivyo kila sehemu inaelezea kwa nini kitu ni muhimu na cha kufanya. Ikiwa huna uhakika kama programu yako ina matatizo makubwa zaidi, makala yetu kuhusu signs your Laravel application inahitaji ukaguzi wa kiufundi ni rafiki mzuri, na ukurasa wetu wa Laravel development unaelezea jinsi tunavyoshughulikia aina hii ya kazi.
Hatua ya sifuri: pima kabla ya kubadilisha chochote
Kosa la kawaida la utendaji ni kuboresha kitu kibaya. Kukisia hupoteza muda na huongeza ugumu. Kabla ya kubadilisha msimbo, tafuta mahali ambapo wakati unaenda.
1. Tafuta kurasa na maswali ya polepole
Zana muhimu ni pamoja na:
- Upau wa Utatuzi wa Laravel katika uundaji, ambao unaonyesha maswali, muda na kumbukumbu kwa kila ukurasa.
- Darubini ya Laravel, kwa ajili ya kukagua maombi, maswali, kazi na vighairi katika uundaji na upangaji.
- Kumbukumbu ya maswali ya polepole ya hifadhidata, ambayo hurekodi maswali kwa muda uliochaguliwa.
- Huduma za ufuatiliaji wa utendaji wa programu kwa ajili ya uzalishaji, kuonyesha uzoefu halisi wa mtumiaji.
- Zana za msanidi programu wa kivinjari, ili kutenganisha muda wa seva na muda wa kupakia wa mbele.
Anza na kurasa ambazo watumiaji hulalamika kuhusu, au zile zenye trafiki nyingi. Kumbuka muda wa majibu, idadi ya maswali na kumbukumbu iliyotumika. Hizo huwa msingi wako, ili uweze kujua kama mabadiliko yalisaidia.
Mara nyingi jibu ni la kushangaza. Ukurasa unaohisi polepole kwa sababu ya picha kubwa au JavaScript nzito hautasaidiwa na urekebishaji wa hifadhidata, na ukurasa wenye hoja mia moja hautasaidiwa na seva yenye kasi zaidi.
Hifadhidata: ambapo matatizo mengi yanaishi
Katika programu za kawaida za biashara, ucheleweshaji mwingi hutoka kwenye hifadhidata, na kwa kawaida hutoka kwenye mifumo michache.
2. Rekebisha tatizo la hoja ya N+1
Hili ndilo tatizo la kawaida la utendaji wa Laravel. Hutokea wakati msimbo unapopakia orodha ya rekodi na kisha kuendesha swali la ziada kwa kila moja ili kupata data inayohusiana. Kuonyesha oda 100 na wateja wao kunaweza kuwa hoja 101 kimya kimya.
Irekebishe kwa kupakia kwa hamu data inayohusiana mapema na na(), kwa hivyo Laravel huleta kila kitu katika hoja chache badala ya mamia. Unaweza pia kusanidi Laravel ili kutoa hitilafu wakati wa uundaji wakati wowote upakiaji wa uvivu unapotokea, ambao unapata tatizo kabla halijawafikia watumiaji.
3. Ongeza faharasa sahihi
Bila faharasa, hifadhidata husoma kila safu ili kupata ulichoomba. Kwenye jedwali dogo hili halionekani; kwenye jedwali kubwa ni polepole sana. Ongeza faharasa kwenye safu wima unazochuja, kupanga au kujiunga nazo mara kwa mara, kama vile funguo za kigeni, sehemu za hali na tarehe.
Tumia zana za uchambuzi wa hoja za hifadhidata, kwa mfano ELEZA, ili kuthibitisha hoja hutumia faharasa. Usiorodheshe kila kitu: kila faharasa hupunguza kasi huandika na hutumia hifadhi, kwa hivyo ziongeze pale zinapopatikana.
4. Chagua tu unachohitaji
Kupakia rekodi nzima na kila safu wima, ikiwa ni pamoja na sehemu kubwa za maandishi, wakati unahitaji jina na barua pepe pekee hupoteza kumbukumbu na wakati. Chagua safu wima maalum. Kwa seti kubwa za matokeo, changanua data vipande vipande au tumia mikusanyiko ya lazy ili programu isipakie mamia ya maelfu ya rekodi kwenye kumbukumbu mara moja.
5. Paji na uweke kikomo
Usipakie orodha isiyo na mipaka. Tumia paji kwa orodha zinazoonyeshwa kwa watumiaji, na mipaka kwa kila kitu kingine. Fikiria paji rahisi, ambayo huepuka hesabu ya jumla ya gharama kubwa, kwenye majedwali makubwa sana.
6. Sukuma kazi kwenye hifadhidata
Kupanga, kuchuja, kupanga na kujumlisha ni mambo ambayo hifadhidata hufanya vizuri sana. Kuzifanya katika PHP baada ya kupakia rekodi zote kwa kawaida ni polepole zaidi. Tumia hoja, mkusanyiko na, inapobidi, mionekano ya hifadhidata au jedwali za muhtasari kwa ripoti nzito.
Kuhifadhi: fanya kazi mara moja
7. Hifadhi matokeo ya gharama kubwa
Ikiwa swali au hesabu ni ghali na jibu lake halibadiliki kwa kila ombi, kama vile jumla ya dashibodi, orodha ya bidhaa au utafutaji wa usanidi, hifadhi matokeo kwenye kashe kwa muda mfupi badala ya kuikokotoa tena kila wakati.
- Tumia kiendeshi cha kashe cha haraka kama vile Redis katika uzalishaji badala ya kiendeshi cha faili.
- Chagua muda wa mwisho unaofaa na ubatilishe kashe wakati data ya msingi inabadilika.
- Hifadhi kwa uangalifu. Data iliyopitwa na wakati inaweza kuwa mbaya kuliko data ya polepole wakati usahihi ni muhimu, kwa mfano katika viwango vya hisa au mizani.
8. Tumia hifadhi ya HTTP na ukurasa mahali panapofaa
Kurasa za umma ambazo hazibadiliki mara nyingi zinaweza kuwekwa kwenye kashe kwenye seva ya wavuti au mtandao wa uwasilishaji wa maudhui (CDN), kwa hivyo wageni wengi hawafikii PHP kabisa. Weka vichwa vya habari vya akiba sahihi kwa mali tuli ili vivinjari vitumie tena faili badala ya kuzipakua tena.
Usiwafanye watumiaji wasubiri
9. Sogeza kazi polepole kwenye foleni
Chochote kinachochukua zaidi ya muda na kisichohitaji kumalizika kabla ya mtumiaji kuona jibu ni la kazi ya usuli: kutuma barua pepe na arifa, kutoa PDF na ripoti, kuchakata picha na faili, kupiga simu huduma za watu wengine polepole na kusawazisha na mifumo mingine.
Mfumo wa foleni wa Laravel hufanya hili kuwa rahisi. Mtumiaji hupata jibu la haraka, na wafanyakazi hushughulikia kazi hiyo usuli kwa majaribio mengine ikiwa kitu kitashindwa. Tumia Redis au sehemu ya nyuma ya foleni inayoaminika, na ufuatilie foleni ili hitilafu zisipotee. Laravel Horizon inatoa dashibodi kwa foleni za Redis.
10. Panga kazi nzito nje ya kilele
Ripoti, usafi, uagizaji na usawazishaji zinaweza kuendeshwa wakati wa vipindi vya utulivu kupitia kipanga ratiba cha Laravel, badala ya kushindana na watumiaji wakati wa saa zenye shughuli nyingi.
Mfumo na seva
11. Tumia amri za uboreshaji zilizojengewa ndani za Laravel katika uzalishaji
Laravel inaweza kuhifadhi vitu kadhaa kwa hivyo haifanyi kazi nyingi kwa kila ombi.
- Cache ya usanidi (
php artisan config:cache) inachanganya usanidi katika faili moja. - Cache ya njia (
php artisan route:cache) huharakisha usajili wa njia. - Tazama cache (
php artisan view:cache) hukusanya violezo. - Cache ya tukio huhesabu ugunduzi wa tukio mapema.
php artisan optimizehuendesha hatua kuu za kuhifadhi pamoja.
Endesha hizi kama sehemu ya uwasilishaji wako, na Kumbuka kuzifuta au kuzijenga upya wakati usanidi unabadilika. Pia sakinisha vitegemezi vya uzalishaji kwa kutumia kipakiaji otomatiki kilichoboreshwa (composer install --optimize-autoloader --no-dev).
12. Rekebisha PHP na seva
Mipangilio ya msingi ya miundombinu hufanya tofauti kubwa.
- Tumia toleo la sasa la PHP. Kila toleo huleta maboresho ya utendaji.
- Washa OPcache, ambayo huhifadhi msimbo wa PHP uliokusanywa kwenye kumbukumbu. Huu ni mojawapo ya ushindi mkubwa zaidi.
- Weka ukubwa wa wafanyakazi wa PHP na kumbukumbu ipasavyo kwa trafiki yako na seva yako.
- Tumia seva ya hifadhidata yenye kasi yenye kumbukumbu ya kutosha, na uisanidi kwa busara.
- Weka hifadhidata karibu na programu ili kupunguza ucheleweshaji wa mtandao.
- Fikiria Laravel Octane, ambayo huweka programu kwenye kumbukumbu kati ya maombi yanayotumia Swoole au RoadRunner. Inaweza kuongeza kwa kiasi kikubwa upitishaji kwa programu zinazofaa, lakini inahitaji uangalifu kuhusu hali inayoendelea kati ya maombi, kwa hivyo sio chaguo chaguo-msingi.
13. Boresha sehemu ya mbele na mali
Kasi ya seva ni sehemu tu ya kile watumiaji wanahisi.
- Bana na ubadilishe ukubwa wa picha, na utumie miundo ya kisasa kama vile WebP.
- Minify na uunganishe CSS na JavaScript na zana yako ya ujenzi, na upakie tu kile kila ukurasa unahitaji.
- Ahirisha hati zisizo muhimu na upakie picha kwa uvivu chini ya folda.
- Hudumia mali kupitia CDN karibu na watumiaji wako.
- Epuka hati nzito za wahusika wengine zinazochelewesha utoaji.
- Wezesha mgandamizo kama vile gzip au Brotli kwenye seva.
Kazi ya mbele mara nyingi ndiyo njia ya haraka zaidi ya kuboresha jinsi ukurasa unavyohisi haraka, na pia huathiri nafasi za utafutaji.
14. Weka utegemezi na msimbo ukiwa mwembamba
- Ondoa vifurushi visivyotumika. Kila kimoja huongeza upakiaji na utunzaji.
- Epuka kufanya kazi nzito katika watoa huduma, programu za kati au wigo wa kimataifa unaoendeshwa kwa kila ombi.
- Kuwa mwangalifu na mikusanyiko mikubwa kwenye kumbukumbu; tumia shughuli za hifadhidata au mikusanyiko ya uvivu.
- Wasifu mara kwa mara. Utendaji huteleza vipengele vinapoongezwa, kwa hivyo angalia kama sehemu ya uundaji unaoendelea, sio tu wakati watumiaji wanalalamika.
Jedwali la marejeleo la haraka
| Dalili | Huenda ikawa sababu | Jambo la kwanza kujaribu |
|---|---|---|
| Ukurasa hufanya mamia ya maswali | Tatizo la N+1 | Upakiaji wa hamu na na() |
| Hoja moja inachukua sekunde | Kukosa faharasa au swali zito | ELEZA, ongeza faharasa, andika upya hoja |
| Dashibodi ni polepole | Mahesabu ya gharama kubwa yanayorudiwa | Matokeo ya akiba au tumia majedwali ya muhtasari |
| Uwasilishaji wa fomu hutegemea | Kazi polepole katika ombi | Hamisha hadi kazi iliyopangwa |
| Kila ombi ni polepole kidogo | Ushuru wa mfumo | Sanidi, elekeza na uangalie akiba, OPcache |
| Hitilafu za kumbukumbu kwenye orodha kubwa | Inapakia nyingi sana kwa wakati mmoja | Kukata, mikusanyiko ya uvivu, upangaji wa kurasa |
| Seva ya haraka, ukurasa wa polepole | Sehemu nzito ya mbele | Bandika picha, punguza hati, tumia CDN |
| Polepole chini ya ongezeko la trafiki | Wafanyakazi wachache sana, hakuna hifadhi ya data | Kuhifadhi akiba, wafanyakazi zaidi, fikiria Octane |
Makosa ya kawaida
- Kuboresha bila kupima. Unaweza kurekebisha kitu kibaya.
- Kuhifadhi kila kitu. Data iliyopitwa na wakati au isiyolingana husababisha hitilafu ambazo ni vigumu kufuatilia.
- Kuongeza faharasa bila kujua, kupunguza kasi ya kuandika bila kusaidia kusoma.
- Kupuuza tatizo la N+1 kwa sababu halionekani na data ndogo ya majaribio.
- Kujaribu tu na seti ndogo za data. Matatizo ya utendaji yanaonekana kwa kiwango halisi.
- Kuendesha uzalishaji na hali ya utatuzi au mipangilio ya uundaji.
- Kutumia akiba ya faili na foleni ya usawazishaji katika uzalishaji.
- Kuchukulia utendaji kama mradi wa mara moja badala ya tabia.
- Kusahau sehemu ya mbele.
- Kuongeza kasi ya vifaa kabla ya kurekebisha msimbo. Seva kubwa huficha tatizo kwa gharama kubwa.
Utendaji na picha pana
Kasi si suala la kiufundi tu. Inaathiri ubadilishaji, mwonekano wa utafutaji, gharama za upangishaji na tija ya wafanyakazi. Pia inahusiana na utunzaji: msimbo safi, uliojaribiwa wenye muundo mzuri ni rahisi kuboresha kwa usalama. Hiyo ni sababu moja tunayohimiza kuwekeza katika ubora mapema, kama ilivyoelezwa katika gharama za matengenezo ya programu, na kuchagua teknolojia sahihi kwa kazi hiyo, ambayo tunaijadili katika Laravel dhidi ya Node.js.
Ikiwa unapanga programu kubwa, utendaji unapaswa kuwa sehemu ya muundo tangu mwanzo: kufikiria kuhusu ujazo wa data, trafiki inayotarajiwa na kile kinachoweza kuhifadhiwa kwenye akiba au kuwekwa kwenye foleni. [Mwongozo wetu wa gharama ya programu ya wavuti] (web-application-development-cost.php) na [Laravel-cost-guide] (laravel-development-cost.php) zinaonyesha jinsi mahitaji ya ukubwa na utendaji yanavyoathiri bajeti.
Utaratibu rahisi wa utendaji
- Weka lengo, kwa mfano kurasa chini ya sekunde mbili kwa watumiaji wengi.
- Pima kurasa muhimu na urekodi msingi.
- Rekebisha tatizo kubwa kwanza, kwa kawaida tatizo la hifadhidata.
- Pima upya ili kuthibitisha uboreshaji.
- Ongeza akiba na foleni ambapo huondoa kazi inayorudiwa au ya polepole.
- Tumia uboreshaji wa uzalishaji katika mchakato wako wa uwasilishaji.
- Fuatilia mfululizo na uhakiki baada ya kila toleo kuu.
Mawazo ya mwisho
Matatizo mengi ya utendaji wa Laravel hutoka kwenye orodha fupi ya sababu: maswali mengi sana, faharasa zinazokosekana, kazi ya polepole inayofanywa wakati mtumiaji anasubiri na kukosa uboreshaji wa uzalishaji. Pima, rekebisha hifadhidata kwanza, hifadhi kashe na uweke foleni unachoweza, rekebisha mfumo na seva, na weka taa ya mbele. Mabadiliko madogo, yaliyochaguliwa vizuri, mara kwa mara hufanya programu kuwa haraka mara kadhaa bila kuandika upya.
Ikiwa programu yako ni polepole na hujui ni kwa nini, wasiliana nasi. Tunaweza kuipitia, kupata vikwazo halisi na kupendekeza mpango uliopewa kipaumbele, au, ikiwa unahitaji mikono ya ziada kila mara, unaweza kuajiri watengenezaji wa Laravel kufanya kazi pamoja na timu yako.