Az űrlapbeküldés lassúságának keresése a naplóból
Hogyan olvasd ki a magnaplóból, hogy a beküldés melyik szakasza lassú: ellenőrzés, mentés, integrációk, bejegyzéslétrehozás, értesítések, visszaigazolás.
Az űrlapbeküldés sebessége a látogatók élményének fontos része. A sebességet sok minden befolyásolja:
- a látogató böngészője, eszköze és internetkapcsolata;
- a hálózat a látogató és a kiszolgáló között;
- a kiszolgáló szabad erőforrásai;
- az adatbázis (MySQL vagy MariaDB) verziója és beállítása;
- a PHP és a WordPress verziója, beállítása;
- az aktív téma (és gyermektéma), valamint az aktív bővítmények;
- az oldal látogatóinak és az űrlapot egyidejűleg beküldőknek a száma;
- az űrlap bonyolultsága: mezők, oldalak, feltételes logika, számítások száma;
- a kapcsolt szolgáltatások (hírlevélküldő, CRM, fizetési átjáró) sebessége.
Ez a fejezet a Gravity Forms részét vizsgálja. A WordPress, a téma és a többi bővítmény is végez saját műveleteket a beküldés előtt, közben és után. Az általános gyorsítási tippeket az Az űrlapbeküldés teljesítményének javítása fejezetben találod.
Előkészület
Szekció neve “Előkészület”- Kapcsold be a naplózást az Űrlapok → Beállítások oldalon, és mentsd a beállításokat.
- A naplózás oldalán kapcsold be a naplózást a Gravity Forms magjához és az összes kiegészítőhöz.
- Nyisd meg az oldalt, ahol az űrlap be van ágyazva, töltsd ki és küldd be, hogy a naplóbejegyzések és az idejük rögzüljön.
- Nézd meg a naplót a naplózás oldalán vagy az Űrlapok → Rendszerállapot oldalon.
A naplózásról a Naplózás és hibakeresés fejezet szól.
A magnapló olvasása
Szekció neve “A magnapló olvasása”A lassú szakasz megtalálásához hasonlítsd össze a naplóbejegyzések elején álló időbélyegeket. Formátuma: Év-Hónap-Nap Óra:Perc:Másodperc.Mikromásodperc, például 2023-01-16 16:26:31.894715. Az alábbi bejegyzések csak a legfontosabbak, ennél sokkal több is lehet a naplóban, és néhány közülük a Gravity Forms 2.7-es vagy újabb verziójára jellemző.
A feldolgozás kezdete
Szekció neve “A feldolgozás kezdete”Az első bejegyzés megmutatja a feldolgozott űrlap azonosítóját, utána jön a forrás- és a célként megadott oldalszám:
GFFormDisplay::process_form(): Starting to process form (#[Form ID]) submission.GFFormDisplay::process_form(): Source page number: 1. Target page number: 0.A 0 célként megadott oldalszám azt jelenti, hogy az űrlapot a bejegyzés mentésének szándékával küldték be, ha az érvényes.
Ellenőrzés
Szekció neve “Ellenőrzés”Az ellenőrzés időtartamát befolyásolja a mezők száma, a számítások, a feltételes logika és a mező- vagy űrlapellenőrző szűrőket használó kiegészítők (például a fizetési átjárókkal kommunikáló fizetési kiegészítők).
Először az űrlap beállításaiban megadott korlátozásokat nézi (például ütemezés, bejegyzések száma), majd a mezőket:
GFFormDisplay::validate(): Starting for form #[Form ID].GFFormDisplay::validate(): Checking restrictions.GFFormDisplay::validate(): Completed restrictions. Starting field validation.Field validation completed in [number] seconds.Ezután a gform_validation szűrő futhat (például fizetési kiegészítők ellenőrzése), végül az eredmény:
Executing functions hooked to gform_validation.Completed gform_validation.GFFormDisplay::process_form(): After validation. Is submission valid? Yes.GFFormDisplay::process_form(): Submission is valid. Moving forward.A bejegyzés mentése
Szekció neve “A bejegyzés mentése”Az időt a mezők száma, a számítások, a feltételes logika, valamint az adatbázist és a kiszolgálót kiszolgáló gépek befolyásolják. Először a bejegyzés tulajdonságai (például a dátum) kerülnek a gf_entry táblába, majd az adatbázistól kapott azonosítóval a mezőértékek sorba állnak, hogy kötegelve kerüljenek a gf_entry_meta táblába:
GFFormsModel::save_entry(): Saving entry.GFFormsModel::save_entry(): Entry record created in the database. ID: [Entry ID].GFFormsModel::save_entry(): Saving entry fields.GFFormsModel::queue_save_input_value(): Queued field operation: [Field Label](#[Field ID] - [Field or Input Type]).GFFormsModel::save_entry(): Finished saving entry fields.GFFormsModel::save_entry(): Saving entry completed in [number] secondsGFFormsModel::set_entry_meta(): Saving meta for entry (#[Entry ID]) completed in [number] seconds.Integrációk
Szekció neve “Integrációk”Először a spamszűrés fut, utána a kiegészítők feedjei. A legtöbb kiegészítő nem dolgozza fel a spamnek jelölt bejegyzést. Ezt a szakaszt a beállított integrációk és a feltételes logikát használó feedek száma, valamint a kapcsolt szolgáltatások sebessége befolyásolja.
GFCommon::is_spam_entry(): Executing functions hooked to gform_entry_is_spam.GFCommon::is_spam_entry(): Spam checks completed in [number] seconds. Is submission considered spam? No.GFFormDisplay::handle_submission(): Executing functions hooked to gform_entry_created.GFFormDisplay::handle_submission(): Executing functions hooked to gform_entry_post_save.GF_Background_Process::dispatch(): Running for gf_feed_processor.Minden kiegészítőnek saját naplója van, azokban is nézd meg a bejegyzések időpontjait.
Bejegyzéslétrehozás (a régi bejegyzésmezőkkel)
Szekció neve “Bejegyzéslétrehozás (a régi bejegyzésmezőkkel)”Ezt az űrlapon lévő mezők száma és a médiatárba másolandó feltöltések száma befolyásolja. Ha az űrlapon nincs bejegyzésmező, ennyit látsz:
GFFormsModel::create_post(): Starting.GFFormsModel::create_post(): Stopping. The form doesn't have any post fields.Ha van, a következő lépések következnek:
- A bejegyzés létrehozása: az adatok begyűjtése és
wp_insert_post()hívás. - Média: a Bejegyzés képe mezők fájljai a médiatárba kerülnek, és a bejegyzéshez csatolódnak. Ha a mezőn a kiemelt kép beállítás be van kapcsolva, a kiemelt kép beállítása is megjelenik a naplóban.
- Egyéni mezők: a Bejegyzés egyéni mezője mezők értékei a bejegyzés metaadataiba kerülnek.
- Sablonok: ha valamelyik bejegyzésmezőn tartalomsablon van, a naplóban a sablon feldolgozása és a bejegyzés frissítése látszik (
process_post_template(),Updating post.). - A bejegyzés frissítése a létrehozott bejegyzés azonosítójával (
Updating entry with post id.).
Értesítések
Szekció neve “Értesítések”Itt keletkezik a legtöbb késés. Az időt az értesítések száma, az útválasztás és a feltételes logika használata, a csatolt fájlok, a WordPress beállítása, a kiszolgáló és az SMTP- vagy e-mail-szolgáltató bővítmények befolyásolják.
Kikapcsolt háttérértesítésekkel a beküldés megvárja az e-mail elküldését. Példa a naplóból:
2023-01-16 16:26:31.895328 - DEBUG --> GFCommon::send_email(): Sending email via wp_mail().2023-01-16 16:26:46.920707 - DEBUG --> GFCommon::send_email(): Result from wp_mail(): 12023-01-16 16:26:46.923607 - DEBUG --> GFCommon::send_notifications(): Sending notifications for entry (#[Entry ID]) completed in 15.021593 seconds.Ebben a példában a WordPressnek és a kiszolgálónak 15-16 másodpercbe telt az e-mail elküldése, és csak utána látja a felhasználó a visszaigazolást. Több értesítésnél ez még hosszabb lenne.
Bekapcsolt háttérértesítésekkel az értesítések csak bekerülnek a sorba, ezért a beküldés nem várja meg az elküldésüket:
GFAPI::send_notifications(): Adding [count] notification(s) to the async processing queue for entry #[Entry ID].GF_Background_Process::save(): Saving batch [batch_id]. Tasks: [task_count].GF_Background_Process::dispatch_on_shutdown(): Dispatch delayed until shutdown for gf_notifications_processor.A visszaigazolás előkészítése
Szekció neve “A visszaigazolás előkészítése”Itt a visszaigazolások száma és a feltételes logikájuk számít. Több visszaigazolás esetén a rendszer sorban kiértékeli a feltételeket, és ha egyik sem teljesül, az alapértelmezettet használja. Ha a téma vagy egy bővítmény a gform_confirmation szűrőt használja (például a fizetési oldalra átirányító fizetési kiegészítők), az is megjelenik a naplóban. Végül a használt visszaigazoló üzenet vagy átirányítás kerül a naplóba.
GFFormDisplay::handle_confirmation(): Preparing confirmation (#[Confirmation ID] - [Confirmation Name]).GFFormDisplay::handle_confirmation(): Confirmation to be used => ...A feldolgozás vége
Szekció neve “A feldolgozás vége”Ha a téma vagy egy bővítmény a gform_after_submission kampót használja, az is látszik. Az utolsó bejegyzés a teljes futásidőt mutatja:
GFFormDisplay::process_form(): Processing completed in [number] seconds.Mindez azelőtt történik, hogy a WordPress, a téma és a bővítmények eldöntenék, melyik sablonnal jelenítsék meg az oldalt. Az oldal szkriptjeinek kiadásakor a kettős beküldést megakadályozó szkriptek sorba állítása is látszhat (GF_Duplicate_Submissions_Handler::is_valid_submission()), az oldal tartalmának feldolgozásakor pedig a visszaigazolás előkészítésének ideje (GFFormDisplay::get_form(): Preparing form (#[Form ID]) confirmation completed in [number] seconds.).
Készült: