# 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](https://hub.hellowp.io/hu/plugins/gravityforms/hogyan-bekuldes-teljesitmeny/) fejezetben találod.

## Előkészület

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](https://hub.hellowp.io/hu/plugins/gravityforms/hibaelharitas-naplozas/) fejezet szól.

## 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

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

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

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

### 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)

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.`).

### É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(): 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.
```

### 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

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.`).
