Puncte:0

Cum să optimizați livrarea javascript pe wordpress / apache / AWS?

drapel cv

Sunt în pragul optimizării vitezei site-ului. Am un site care primește note groaznice de la toți suspecții obișnuiți (în special PageSpeed ​​și GT Metrics; arată OK pe instrumentele Pingdom).

Configurația mea este un singur server T3-Medium care rulează Apache și Wordpress, în spatele unui AWS ELB, cu implementare în CloudFront ca CDN.

Primele mele încercări de a îmbunătăți performanța au inclus

  • actualizat la mediu (serverul rulează aproximativ 1/2 duzină de site-uri web, dar sunt mici – traficul colectiv în toate acestea este de doar câteva mii de vizite pe zi – cu toate acestea, o instanță „mică” a fost prea lent chiar și la o singură lovitură, din cauza constrângerilor de memorie),
  • a instalat pluginul WP Super Cache (am rulat deja în spatele CloudFront, dar am instalat pluginul pentru a stoca în cache paginile în sine)
  • S-au adăugat anteturi de control cache la comportamentul CloudFront
  • S-au eliminat șirurile de interogare din cheia de cache (acesta nu este un site tradițional de comerț electronic, iar anunțurile Twitter adăugau un șir unic per utilizator, ceea ce, practic, făcea ca fiecare vizualizare a paginii să fie ratată de cache)

Cu toate acestea, chiar și cu asta, performanța implicită este inacceptabilă. Vinovatul pare să fie livrarea (și execuția) javascript-ului. Iată câteva rezultate de la GT Metrics, bazate pe cât de multă intervenție manuală efectuez:

            Cache-Miss Cache-Hit Cache-Miss Cache-Hit Cache-Miss Cache-Hit
            Default Default Hammer YouTube Hammer Youtube Baros Hammer Baros Hammer
TTFB 1.100 91 75 66 75 72 | 74 74 122 74 54 75 | 76 86 104 86 63 45
FCP 2.200 1.100 4.200 494 519 383 | 1.100 2.700 1.400 710 415 622 | 1.200 1.200 1.200 388 338 256
LCP 3.300 2.000 6.300 1.900 1.700 1.800 | 1.800 3.500 2.000 2.700 881 1.600 | 1.900 2.000 2.500 684 617 490
Încărcare 4.600 3.200 7.600 2.300 3.000 2.700 | 2.900 4.900 2.700 3.100 1.500 2.500 | 2.000 2.000 2.400 766 824 489
TTI 4.700 3.300 7.600 2.500 2.900 3.200 | 3.000 8.000 2.800 3.400 1.700 3.000 | 8.000 6.800 1.200 6.700 6.700 6.400

După cum puteți vedea, dacă nu fac nimic (primele două, subtabele „implicite”), site-ul durează aproape 3 secunde să se încarce cu o accesare în cache și, adesea, la nord de 4, la o pierdere de cache.

Aceasta este cu adevărat rădăcina întrebării. Ce ar trebui să fac de aici? Voi descrie mai jos ceea ce fac acum, dar nu cred că ceea ce voi descrie este o practică standard pe Internet și, în mod clar, Internetul nu suferă, în general, de pe urma acestui tip de performanță. .

Aplicarea unui baros

Nu sunt sigur care dintre aceste valori contează cel mai mult din perspectiva experienței utilizatorului, dar bănuiesc că în cazul meu este LCP și onload (îmi pot imagina că pentru unele site-uri web este TTI, dar în cazul meu nu e nimic de făcut deasupra foldului, deci vechea măsurătoare First CPU Idle ar fi fost grozavă, dacă Lighthouse ar fi raportat-o ​​în continuare).

Ceea ce fac acum este ceea ce am în secțiunea „Sledge Hammer” a tabelului. Am scris un script care elimină toate etichetele javascript src neesențiale și le pune înapoi numai după 5 secunde sau după prima interacțiune a utilizatorului. Puteți vedea rezultatele. Chiar și într-o pierdere a memoriei cache, site-ul se încarcă în aproximativ 2 secunde, iar la o accesare în cache, este cu mult sub 1 secundă (putem ignora numărul TTI, deoarece aceasta este întârzierea mea de 5 secunde și nu afectează mai sus- aspectul pliului sau interactivitatea).

OK, site-ul „funcționează”, dar într-adevăr, nu numai că se pare că nu ar trebui să facă asta în abstract, dar există și niște javascript pe care mi-ar plăcea foarte mult să funcționeze de la început.

Săpând, toate problemele par să fie JavaScript terță parte (adică, lucruri care nu sunt/nu pot fi pe CDN-ul meu). Unele dintre acestea sunt pur și simplu flagrante și mă pot descurca în interior (de exemplu, pot spune oamenilor de marketing: „Folosiți HotJar doar când aveți nevoie, apoi dezactivați-l â adaugă o secundă completă la încărcarea paginii timp"). Dar unele dintre ele sunt doar „standard de internet” – Stripe și Google Analytics adaugă fiecare aproximativ 500 ms între timpul de încărcare și timpul de rulare.

Pot continua să-mi ajustez barosul, așa cum a sugerat Tim în comentarii, dar acest lucru încă nu mi se pare corect. Trebuie să fie ceva ce îmi lipsește în ceea ce privește această configurare și JavaScript (în special terți).

Tim avatar
drapel gp
Tim
Citind actualizarea dvs., toată chestia cu întârzierea de 5 secunde este cu adevărat neobișnuită. Puteți descărca js găzduit oriunde și îl puteți pune pe serverul dvs. / CDN dacă doriți. Vă sugerez să încercați ideea mea, deoarece nu ne-ați oferit suficiente informații pentru a vă ajuta cu adevărat.Dacă doriți cu adevărat ajutor, postați adresa URL.
philolegein avatar
drapel cv
@Tim, nu găsesc postarea în care am primit ideea inițială pentru întârziere, dar cred că ideea a fost: „Așteptați mult să începeți încărcarea, dar faceți-o mai devreme dacă utilizatorul derulează/clic/etc.. ". Cu toate acestea, am acceptat sugestia dvs. și am redus întârzierea la 650 ms, pe baza datelor pe care le-am introdus în revizuire. Puteți vedea pagina în cauză aici: [link](https://www.chrisrichardson.info/lp/prague-b/)
Tim avatar
drapel gp
Tim
Prima încărcare a durat câteva secunde pentru mine în Noua Zeelandă, a doua încărcare și cele ulterioare au fost foarte, foarte rapide, așa că CDN-ul funcționează. Testul paginii web spune că este în regulă. https://www.webpagetest.org/result/220531_BiDcPJ_7TB/ . GTMetrix este puțin cam lentă la prima încărcare https://gtmetrix.com/reports/www.chrisrichardson.info/8JdbxgoE/, dar odată ce este stocată în cache pe nodul CDN din apropierea site-ului de testare, este super rapid https://gtmetrix.com/reports/ www.chrisrichardson.info/4jXER8rm/ . Deci cred că prima încărcare este problema ta. Nu cred că aceasta este o problemă de infrastructură. Variația se datorează probabil geografiei. Aș pierde cu totul întârzierea
Tim avatar
drapel gp
Tim
Aș elimina întârzierea de încărcare JS de cinci secunde și aș asigura că anteturile de cache pentru resursele statice (js / jpg / etc) sunt setate, astfel încât acestea să poată fi stocate în cache de CloudFront.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.