liam-wiltshire / laravel-jit-loader este o extensie a modelului implicit Laravel Eloquent la relatii de „incarcare dornica foarte lenesa” cu performante comparabile cu incarcarea dornica.

liam-wiltshire / laravel-jit-loader este disponibil ca pachet compozitor: compozitorul necesita liam-wiltshire / laravel-jit-loader

Odata instalat, utilizati caracteristica \ LiamWiltshire \ LaravelJitLoader \ Concerns \ AutoloadsRelationships in modelul dvs. sau solicitati modelelor dvs. sa extinda clasa \ LiamWiltshire \ LaravelJitLoader \ Model in loc de modelul elocvent implicit, iar incarcarea JIT va fi activata automat.

Pentru a evita problemele N + 1, in mod normal, veti incarca relatiile necesare in timp ce creati colectia:

$ carti = App \ Book :: cu ([‘autor’, ‘editor’]) -> get ();

Sau altfel dupa fapt, dar inainte de utilizare:

$ carti = App \ Book :: all (); if ($ someCondition) {$ books-> load (‘autor’, ‘editor’); }

Cu toate acestea, in unele situatii, acest lucru nu este posibil – poate ca dezvoltatorii front-end sunt capabili sa faca modificari la sabloane fara a atinge codul sau poate, in timpul dezvoltarii, nu stiti ce relatii veti avea nevoie oricum. Aceasta modificare va urmari daca modelele dvs. apartin unei colectii si, daca apar, si se numeste o relatie care nu a fost deja incarcata, relatia va fi incarcata in intreaga colectie exact la timp pentru utilizare.

Acesta este utilizat in mai multe aplicatii de productie fara probleme. De asemenea, a fost testat impotriva unui test (destul de construit), extragand personalul, companiile si adresele – desi aceasta nu este o reprezentare „din viata reala”, ar trebui sa dea o idee despre ceea ce poate face:

handle functie publica () {// Numarati numarul de interogari $ querycount = 0; DB :: ascultati (functia ($ query) use (& $ querycount) {$ querycount ++;}); $ startTime = microtime (adevarat); $ staff = Staff :: where (‘name’, ‘LIKE’, ‘E%’) -> orWhere (‘name’, ‘LIKE’, ‘P%’) -> get (); / ** * @var Staff $ st * / foreach ($ staff as $ st) {/ ** * @var Company $ company * / $ company = $ st-> company; ecou “\ n \ nNume: {$ st-> nume} \ n”; ecou “Nume companie: {$ companie-> nume} \ n”; foreach ($ companie-> adresa ca $ adresa) {echo “Adrese: {$ adresa-> adresa_1},”; }} $ endTime = microtime (adevarat); ecou “\ n \ n ========================= \ n \ n”; ecou “Executare interogari: {$ querycount} \ n”; ecou „Timp de executie:”. ($ endTime – $ startTime).

jovencitas folladoras me follo a mi vecina
pareja española follando descargar peliculas porno completas
tragando semen xxx tangas xxx
videos porno caseros españoles maduros en pajilleros
paja en publico nonude model
carne de mercado xxx españolas follando por dinero
cincuentona española follando maduras españolas amater
madura tetona viejas mexicanas follando
penes grandes porno en cine convencional
heidi porno miriam sanchez videos porno
follando con abuelas porno gay cerdo
follada a traicion revistas xxx
videos de travestis en español necrofilia xxx
porno gitanas españolas tetas saltarinas
me corro en la boca de mama feet hentai
ana marco primer anal follada en tanga
chicas masturbando a chicos porno friki
trio con mi esposa vidio xxxx
maduras corriendose paja en publico
brazzers videos completos porno violacion gay

“\ n”; ecou „Memorie:”. memory_get_peak_usage (true) / 1024/1024. „MiB”; ecou “\ n \ n”; }

Rularea locala impotriva unei baze de date cu 200 de companii, 1157 de adrese si 39685 de angajati:

Fara incarcare JIT:

Executare interogari: 10739

Timp de executie: 17.090859889984

Memorie: 70MiB

Cu incarcare JIT:

Interogari Executare: 3

Timp de executie: 1.7261669635773

Memorie: 26MiB

Incarcare dornica „adecvata”:

Interogari Executare: 3

Timp de executie: 1.659285068512

Memorie: 26MiB

Dupa cum puteti vedea, diferenta dintre incarcarea JIT si incarcarea traditionala dornica este mica (c. 0,067 secunde in testul nostru de mai sus), deci va puteti baza probabil pe incarcatorul JIT pentru a va proteja.

Cu toate acestea, daca doriti sa va conectati cand se foloseste incarcatorul JIT, astfel incat sa le puteti face inapoi si sa le corectati ulterior, puteti adauga o proprietate $ logChannel la modelele dvs. pentru a cere caracteristicii sa se conecteze la acel canal asa cum este configurat in Laravel

clasa Address extinde Model {use AutoloadsRelationships; / ** * @var string * / protected $ logChannel = ‘jit-logger’; companie de functii publice () {return $ this-> appartineCarei (Companie :: clasa); }}

Aceasta este o versiune timpurie bazata pe cazuri de utilizare specifice. In acest moment, incarcarea automata va fi utilizata numai atunci cand relatia este incarcata ca o proprietate, de exemplu $ user-> company-> name in loc de $ user-> company () -> first () -> name. Lucrez la sustinerea relatiilor incarcate in moduri alternative, cu toate acestea exista o mai mare complexitate, deci nu exista inca o perioada de timp fixa!

Cu orice incarcare dornica, o colectie suficient de mare poate cauza probleme de memorie. Modelul JIT specifica un prag pentru incarcare automata. Aceasta este setata la 6000 in mod implicit, dar poate fi modificata prin suprascrierea proprietatii $ autoloadThreshold pe baza de model.