Apakah pekerjaan cron WordPress memperlambat pemuatan halaman?

8

Jika pengguna mengunjungi situs dan kunjungannya memicu tugas cron yang cukup intensif, kecepatan memuat halaman akan lebih lambat baginya, bukan? Seperti yang saya mengerti halaman tidak menunggu pekerjaan cron untuk dieksekusi sebelum memuat, tetapi karena pekerjaan cron akan berjalan secara paralel, mungkin masih terjadi bahwa halaman memuat lebih lambat karena server sibuk kan?

urok93
sumber
Baca di spawn_cron yang mungkin membantu Anda: codex.wordpress.org/Function_Reference/spawn_cron
TomC
Jika pekerjaan cron Anda cukup berat untuk membuat server sibuk maka cukup berat untuk membuat server sibuk. Saya tidak cukup mengikuti apa pertanyaan Anda - untuk mengonfirmasi itu?
Jarang,
Ya, saya hanya ingin mengonfirmasi itu, karena saya telah membaca bahwa pemuatan halaman dan tugas cron berjalan secara independen sehingga pemuatan halaman tidak terpengaruh. Namun jika seperti yang Anda katakan pekerjaan cron cukup berat itu akan mempengaruhi memuat halaman sebagai efek samping.
urok93

Jawaban:

10

Jawaban singkat - Tidak . Setiap permintaan halaman menginisialisasi antrian yang dijadwalkan. Ini hanya permintaan inisialisasi. Permintaan Wp-cron adalah permintaan mandiri.

jadi meminta URL /somepageAnda baru saja menginisialisasi permintaan/wp-cron.php

Namun - Jika acara cron tidak berfungsi dengan baik (memiliki kueri 1000 db misalnya atau meminta sumber daya yang sangat lama merespons), atau keduanya, atau menjadwalkan ulang acara cron untuk setiap permintaan ... sama seperti permintaan http lain akan memakan sumber daya, kinerja CPU, memori, dll ... jika memakan sumber daya yang cukup, halaman Anda akan menjadi lebih lambat.

Oleg Butuzov
sumber
9

Jawaban singkatnya sebenarnya ya , dalam banyak kasus.

Pertama, pada sebagian besar pengaturan, menelurkan tugas cron menimbulkan penundaan 1 detik pada pemuatan halaman, karena ini dilakukan melalui permintaan HTTP loopback dengan waktu tunggu 1 detik - lihat https://wordpress.org/support/topic/save -a-full-second-on-cron-eksekusi / .

Kedua, pekerjaan spawned sekarang akan bersaing dengan pemuatan halaman untuk akses basis data (serta sumber daya lainnya). Beberapa proses dapat membaca database secara bersamaan; namun, setiap kali suatu proses menulis ke database, secara default terkunci untuk mencegah akses tulis atau baca secara simultan oleh proses lain - lihat /programming/1005206/does-sqlite-lock-the-database -file-on-reads # answer-1005218 . Dampak dari ini tergantung seberapa kompleks pembaruan basis data pekerjaan cron dan berapa lama basis data itu benar-benar dikunci, dan mungkin tidak signifikan. Tentu saja, itu juga akan menjadi masalah jika pekerjaan cron sedang berjalan ketika halaman diminta, tetapi memiliki pekerjaan cron menelurkan jaminan pemuatan halaman mereka akan memengaruhi setidaknya pemuatan halaman itu.

Jika server / hosting Anda mengizinkan, Anda disarankan untuk mengatur tugas cron terjadwal untuk dijalankan setiap beberapa jam, dengan perintah

php -q /path/to/wp-cron.php

dan nonaktifkan pemijahan cron pada pemuatan halaman dengan entri berikut di wp-config.php:

define('DISABLE_WP_CRON', true);
Jake
sumber
1
Inilah jawaban sebenarnya.
ILikeTurtles
Menurut artikel itu, penundaan 1 detik terjadi pada versi CURL di bawah 7.15.5. Ini berfungsi dengan baik pada versi ikal dari 7.15.5 dan di atas. 7.15.5 dirilis Agustus 2006. Tidak ada lagi timeout 1 detik kecuali pada pengaturan yang benar-benar lama.
user63350
@ user63350 Itu benar dari CURL tetapi bukan dari WordPress. Dari artikel: "kelas WP_Http_Curl menyesuaikan batas waktu fraksional menjadi satu detik penuh (bahkan jika CURL akan mendukungnya)". Bahkan di WordPress terbaru (5.2.2) batas waktu masih 1 detik, jadi masalahnya ada di semua pengaturan termasuk yang terbaru.
Jake
Sebenarnya timeout 1 detik diperbaiki di WordPress 4.6 oleh # 33055 . (Melihat basis kode itu membingungkan karena kode lama masih ada, termasuk privatemetode seperti WP_Http::_dispatch_requestyang sekarang tidak pernah dipanggil.)
Jake