Cele mai importante lecții învățate în timpul optimizării WordPress (pentru succesul clienților)
Publicat: 2022-09-15Când a fost ultima dată când ai avut un moment de nor nouă?
Trecând cu brio de școală.. sau când prietena/iubitul tău a acceptat propunerea ta?
Am avut un nor de nouă clipă acum două săptămâni! Am vorbit la WordCamp Mumbai 2017 – cel mai mare WordCamp din India.
Subiectul a fost ceva aproape de inima mea și ceva cu care mă ocup de zi cu zi - lecții învățate, optimizarea WordPress pentru succesul clienților.
Este vorba despre problemele cu care m-am confruntat cu bazele de date mari WordPress și despre modul în care le-am abordat.
Ce m-a încurajat să vorbesc la WordCamp Mumbai?
Dezvoltarea unui plugin WordPress este o experiență excelentă de învățare. Puteți extinde un cadru superb, vă concentrați pe scrierea de cod care rezolvă problemele clienților și lucrați cu membri extraordinari ai echipei.
La StoreApps, dezvoltatorii nu numai că scriu cod, ci și susțin clienții. Rezolvarea întrebărilor clienților mi-a oferit unele dintre cele mai mari lecții.
Deci tot asta este rutina mea zilnică și este destul de interesant.
Dar știi ce este mai interesant pentru mine? Lucrul cu baze de date mari și rezolvarea problemelor complexe ale bazelor de date!
Pluginurile noastre sunt folosite de peste 35000 de utilizatori. Și am văzut o mulțime de provocări în lucrul cu magazine WooCommerce mari și site-uri WordPress populare.
Din fericire, am reușit să rezolv aceste provocări și am învățat multe.
Dar stai, la fel ca mine, ar exista sute de alți dezvoltatori care se confruntă cu probleme similare care lucrează cu WordPress și WooCommerce.
Așa că am decis să împărtășesc lecțiile mele cu alții.
Și ce platformă mai bună decât o oportunitate de vorbire la cel mai mare WordCamp din India!
Cele trei probleme care mi-au dat nopți nedormite (cu soluții și lecții învățate de la ele)
În sfârșit, iată cele trei probleme despre care vorbeam. Deci, să începem cu ele unul câte unul.
Se reduce timpul de încărcare a paginii de la 3 minute la milisecunde...
Problemă
M-am confruntat cu o situație cu pluginul Smart Coupons, în care o funcționalitate simplă de afișare a cupoanelor pe paginile cruciale ale magazinului (adică coșul de cumpărături, paginile de finalizare a comenzii și paginile contului meu) a blocat procesul de plată.
Smart Coupons este un plugin pentru crearea și gestionarea de cupoane și certificate cadou în vrac pentru un magazin WooCommerce.
Soluţie
Acum, utilizarea WP Query ar fi dus la mai multe JOIN-uri , deoarece afișarea cupoanelor disponibile pentru un anumit utilizator necesită evaluarea mai multor meta condiții.
Deci, în loc să folosesc modul ideal de a interoga baza de date, adică WP Query, am scris interogări SQL personalizate .
De asemenea, în interogările personalizate, ceea ce am făcut a fost:
- În loc să verific toate meta-condițiile într-o singură interogare MySQL, am evaluat pur și simplu prima meta-condiție
- După aceea, am stocat lista de post_id-uri separate prin virgulă (ID-uri cupon) în tabelul de opțiuni
- Și apoi, pur și simplu am redus același set de post_id-uri evaluând fiecare dintre celelalte meta condiții
Am făcut asta până când am primit un set final de post_id-uri care trebuiau afișate pentru utilizatorul specific.
Îmbunătățirea soluției
Acest lucru a rezolvat problemele de încărcare a paginii. Cu toate acestea, pentru a obține încărcarea paginii sub milisecunde, așa cum a sugerat prietenul nostru, a trebuit să redefinim problema.
În loc să afișați toate cupoanele pentru care utilizatorul este eligibil,
Am stabilit o limită pentru numărul de cupoane care ar fi afișate utilizatorilor în paginile de coș și de plată.
Cum o eroare de timeout a devenit cea mai bine vândută caracteristică a pluginului nostru?
Problemă
Pentru a procesa o actualizare foarte mare a bazei de date, am scris interogări personalizate, deoarece utilizarea funcțiilor de bază WordPress ar putea deveni o suprasolicitare uriașă.
Exemplu: Dacă cineva a trebuit să reducă prețurile tuturor produselor din magazinul său cu 40%, atunci trebuie pur și simplu să selecteze „Preț”, „scădere cu 40%” și să apese butonul de actualizare. Acest lucru este ușor posibil folosind pluginul nostru Smart Manager, conceput pentru a face actualizările în bloc pentru magazinele dvs. WooCommerce mai ușoare.
Însă, procesul de actualizare în serie a început să se blocheze și să dea erori de timeout ori de câte ori cineva încerca să actualizeze 1k produse sau întregul magazin odată .
Inițial am început să mă uit la optimizarea interogărilor, dar asta nu a ajutat.
Situația mea a fost similară cu cea a unui concurent la Castelul lui Takeshi. Oricât am încercat, am tot căzut în apă.
Soluţie
Se spune că uneori trebuie să ieși din problema și să analizezi problema pentru a găsi cauza exactă.
Am făcut același lucru și mi-am dat seama că problema reală este
nu la nivel de interogare ci la nivel de cerere .
Deci, ceea ce am făcut a fost în loc de o singură solicitare care face toate actualizările, am împărțit același lucru în mai multe apeluri AJAX succesive făcând un lot mai mic de actualizări și care au eliminat complet erorile de timeout.
Îmbunătățirea soluției
Acum, această abordare de defalcare a unei singure cereri în mai multe solicitări AJAX mai mici nu numai că a rezolvat eroarea de timeout, ci și a îmbunătățit actualizarea UX în lot .
Acum, managerul magazinului era informat despre progresul actualizării, ceea ce pur și simplu le-a sporit încrederea în produs.
De asemenea, aceeași abordare a permis Smart Manager să se ocupe de actualizări în loturi pentru magazinul WooCommerce de orice formă și dimensiune și a făcut ca Smart Manager să devină unul dintre pluginurile cele mai vândute ale StoreApps.
Cum ne-au forțat mediile de găzduire partajată să ne rescriem pluginul?
Problemă
Pentru orice plugin de raportare, este foarte important să ofere nu numai o raportare precisă, ci și rapidă a statisticilor. Acum, obținerea statisticilor de raportare a necesitat mai multe interogări care implică unirea a 2 tabele WordPress majore, adică postări și postmeta.
După cum am văzut deja mai sus, JOIN-urile sunt atât de scumpe .
În Smart Reporter (soluția noastră de raportare pentru WooCommerce), arătam 20 de statistici de raportare diferite într-o singură vizualizare de pagină și asta și la încărcarea paginii.
Soluţie
Deci, am urmat aceeași abordare pe care o urmează majoritatea soluțiilor de raportare, care a fost crearea unui tabel rezumat, adică un tabel personalizat cu structură plată.
Acest tabel ar conține un rezumat al tuturor datelor solicitate de plugin și, astfel, va elimina utilizarea asocierilor și va îmbunătăți timpul de încărcare a paginii.
De asemenea, pentru a menține actualizate aceste tabele rezumative, am folosit acțiuni și filtre WordPress.
Rezumatul lecțiilor
- Urmați cele mai bune practici pe cât posibil
- Fără interogări în buclă
- Evitați îmbinările complexe mari
- Faceți mai mult la nivel MySQL decât la nivel PHP
- Aprofundați codul
- Tabelele Rezumat / Personalizate / Temp
- Atenție la UX – receptivitate, notificări…
- Rezolvi problema corectă?
Care este alegerea ta?
Sunt sigur că te-ai confruntat cu unele probleme uriașe și ai găsit soluții. Spune-ne despre asta în secțiunea noastră de comentarii de mai jos. Ar fi cu adevărat valoros pentru cititori.