Tovább a tartalomhoz

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.

  1. Kapcsold be a naplózást az Űrlapok → Beállítások oldalon, és mentsd a beállításokat.
  2. 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.
  3. 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.
  4. 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 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ő.

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.

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.

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] seconds
GFFormsModel::set_entry_meta(): Saving meta for entry (#[Entry ID]) completed in [number] seconds.

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:

  1. A bejegyzés létrehozása: az adatok begyűjtése és wp_insert_post() hívás.
  2. 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.
  3. Egyéni mezők: a Bejegyzés egyéni mezője mezők értékei a bejegyzés metaadataiba kerülnek.
  4. 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.).
  5. A bejegyzés frissítése a létrehozott bejegyzés azonosítójával (Updating entry with post id.).

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(): 1
2023-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.

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 => ...

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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások