Jūs varat efektīvi izmantot Laravel Debugbar, lai savā laravel lietojumprogrammā identificētu N+1 vaicājuma problēmas, veicot šīs darbības un izprotot tās piedāvātās funkcijas:
Kāda ir n+1 vaicājuma problēma?
N+1 vaicājuma problēma rodas, ja jūsu lietojumprogramma vada vienu vaicājumu, lai iegūtu ierakstu kopu (N), un pēc tam katram ierakstam tiek veikts papildu vaicājums, lai iegūtu saistītus datus, kā rezultātā kopumā ir N+1 vaicājumi. Tas noved pie veiktspējas degradācijas pārmērīgu datu bāzes vaicājumu dēļ [4] [5].Izmantojot Laravel Debugbar, lai noteiktu n+1 vaicājumus
- Instalēšana un iestatīšana: vispirms instalējiet Laravel Debugbar, izmantojot komponistu, ja tas vēl nav instalēts. Tas nemanāmi integrējas ar Laravel un nodrošina vizuālu saskarni, lai uzraudzītu vaicājumus, kas izpildīti pieprasījuma laikā [1] [5].
- Reāllaika vaicājuma uzraudzība: Laravel Debugbar parāda visus SQL vaicājumus, kas izpildīti pieprasījumā, ieskaitot vaicājumu skaitu un to izpildes laiku. Tas ļauj jums pamanīt, kad vairāki līdzīgi vaicājumi tiek veikti atkārtoti, n+1 problēmu iezīme [1] [5].
- Sīkāka vaicājumu informācija: Debugbar sniedz detalizētu informāciju par katru vaicājumu, ieskaitot faila un rindas numuru jūsu kodā, kur tika aktivizēts vaicājums. Tas palīdz precīzi noteikt kodu, kas izraisa n+1 vaicājumus, kas ir nenovērtējami lielākos projektos [8].
- Pielāgoti ziņojumi N+1 vaicājumiem: Apvienojot ar Laravel vaicājumu detektora paketi (kas ir integrēta ar Debugbar), tas var skaidri izcelt N+1 vaicājumu, pievienojot brīdinājumus vai ziņojumus Debugbar interfeisā. Šī pakete tiek atklāta, ja attiecību vaicājums tiek izpildīts vairāk nekā sliekšņa reizes, un paziņo, ka jūs pievienojat dedzīgu ielādi [2] [3].
Kā izmantot Debugbar, lai identificētu N+1 vaicājumus
1. Iespējot atkļūdošanas jomu attīstībā: pārliecinieties, vai atkļūdošana ir iespējota jūsu vietējā vai attīstības vidē, lai izvairītos no vaicājuma informācijas atklāšanas ražošanā.
2. Ielādējiet lapu vai maršrutu, kuru vēlaties pārbaudīt: dodieties uz lapu, kurai ir aizdomas par N+1 problēmu.
3. Atveriet atkļūdošanas joslu paneli: Atkļūdošanas interfeisā (parasti pārlūkprogrammas apakšā) dodieties uz cilni "Vaicājumi".
4. Ievērojiet vaicājumu skaitu: meklējiet atkārtotus vaicājumus, kas ir līdzīgi, bet atšķiras pēc parametru vērtībām, norādot uz vairākiem vaicājumiem, iegūstot saistītos datus pa vienam.
5. Pārbaudiet vaicājuma izcelsmi: noklikšķiniet uz atsevišķiem vaicājumiem, lai redzētu kaudzes pēdas vai faila/līnijas numuru, kur vaicājums tika izpildīts. Tas palīdz noteikt precīzu cilpu vai koda sadaļu, kas izraisa n+1 problēmu.
6. Brīdinājumiem izmantojiet laravel vaicājumu detektoru: pēc izvēles instalējiet Laravel vaicājumu detektora paketi, kas var pievienot brīdinājumus atkļūdošanas jomā, kad tiek atklāti n+1 vaicājumi, padarot to vieglāku pamanīšanu, manuāli skaitot vaicājumus [3].
paraugprakse pēc identifikācijas
- Lai iepriekš ielādētu saistītos modeļus, un samazināt vaicājumu skaitu izmantojiet dedzīgu ielādi (`ar ()`).
-Izmantojiet Laravel iebūvēto profilaksi, pievienojot “modeli :: Prevenlazyloading (! App ()-> isProduction ())` savā `AppServiceProvider`, lai izņēmumi no slinkās slodzes attīstības laikā varētu noķert N+1 vaicājumus [4] [9].
- Nepārtraukti uzraudzīt vaicājumus ar atkļūdošanu attīstības laikā, lai saglabātu optimālu vaicājuma veiktspēju.
Izmantojot Laravel Debugbar vaicājuma vizualizāciju un integrējošus rīkus, piemēram, Laravel vaicājumu detektoru, varat efektīvi noteikt un novērst N+1 vaicājuma problēmas, ievērojami uzlabojot jūsu lietojumprogrammas datu bāzes veiktspēju [1] [2] [3] [5].
Atsauces:
[1] https://www.luckymedia.dev/blog/laravel-for-beginners-query-performance-isues
[2] https://github.com/beyondcode/laravel-query-detector
[3] https://beyondco.de/docs/laravel-query-detector/usage
[4] https://laravel-news.com/laravel-n1-query-problems
[5] https://www.linkedin.com/pulse/handling-n1-query-problem-laravel-developers-haseeb-mushtaq-udusf
[6] https://laraveldaily.com/lesson/laravel-eloquent-expert/n1-query-packages-examples
[7] https://laraveldaily.com/lesson/eloquent-performance/n1-query-debugbar-eager-blading
[8] https://www.reddit.com/r/laravel/comments/5f7y9f/debugging_the_amount_of_database_queries_per/
[9] https://planetscale.com/blog/what-is-1-1-query-problem-and-how-to-st-it