Các công việc cron WordPress có làm chậm tải trang không?


8

Nếu người dùng truy cập một trang web và lượt truy cập của anh ta kích hoạt một công việc định kỳ khá chuyên sâu, tốc độ tải trang sẽ chậm hơn đối với anh ta phải không? Theo tôi hiểu, trang không chờ công việc cron thực thi trước khi tải, nhưng vì công việc cron sẽ chạy song song, nên vẫn có thể trang tải chậm hơn vì máy chủ đang bận phải không?


Hãy đọc spawn_cron có thể giúp bạn: codex.wordpress.org/Function_Reference/spawn_cron
TomC

Nếu công việc định kỳ của bạn đủ nặng để làm cho máy chủ bận thì nó đủ nặng để làm cho máy chủ bận. Tôi không hoàn toàn làm theo câu hỏi của bạn là gì - để xác nhận điều đó?
Hết

Có, tôi chỉ muốn xác nhận rằng, vì tôi đã đọc rằng tải trang và công việc định kỳ chạy độc lập và do đó tải trang không bị ảnh hưởng. Tuy nhiên nếu như bạn nói công việc định kỳ đủ nặng thì nó sẽ ảnh hưởng đến tải trang như một tác dụng phụ.
urok93

Câu trả lời:


10

Câu trả lời ngắn gọn - Không . Bất kỳ yêu cầu trang nào khởi tạo hàng đợi theo lịch trình. Nó chỉ là một yêu cầu khởi tạo. Yêu cầu Wp-cron là một yêu cầu độc lập.

Vì vậy, yêu cầu URL /somepagebạn chỉ cần khởi tạo yêu cầu/wp-cron.php

Tuy nhiên - Nếu sự kiện cron không hoạt động thực sự tốt (nó có 1000 truy vấn db, ví dụ: hoặc yêu cầu tài nguyên phản hồi thực sự dài) hoặc cả hai hoặc lập lịch lại sự kiện cron cho mỗi yêu cầu ... giống như bất kỳ yêu cầu http khác nó sẽ ăn tài nguyên, hiệu suất CPU, bộ nhớ, v.v ... nếu nó ăn đủ tài nguyên, trang của bạn sẽ trở nên chậm hơn.


9

Câu trả lời ngắn thực sự là , trong hầu hết các trường hợp.

Thứ nhất, trên hầu hết các thiết lập, sinh ra một công việc định kỳ phát sinh độ trễ 1 giây khi tải trang, bởi vì nó được thực hiện thông qua yêu cầu HTTP loopback với thời gian chờ 1 giây - xem https://wordpress.org/support/topic/save -a-full-second-on-cron-exec / .

Thứ hai, công việc được sinh ra bây giờ sẽ cạnh tranh với tải trang để truy cập cơ sở dữ liệu (cũng như các tài nguyên khác). Nhiều quy trình có thể đọc cơ sở dữ liệu đồng thời; tuy nhiên, bất cứ khi nào một quy trình được ghi vào cơ sở dữ liệu, theo mặc định, nó bị khóa để ngăn truy cập ghi hoặc đọc đồng thời bởi bất kỳ quy trình nào khác - xem /programming/1005206/does-sqlite-lock-the-database -file-on-read # answer-1005218 . Tác động của điều này phụ thuộc vào mức độ cập nhật cơ sở dữ liệu của cron phức tạp và thời gian cơ sở dữ liệu thực sự bị khóa trong bao lâu và có thể không đáng kể. Tất nhiên, nó cũng sẽ là một vấn đề nếu một công việc định kỳ tình cờ chạy khi một trang được yêu cầu, nhưng có các công việc định kỳ xuất hiện trên đảm bảo tải trang chúng sẽ ảnh hưởng đến ít nhất là tải trang đó.

Nếu máy chủ / lưu trữ của bạn cho phép, bạn nên thiết lập một công việc định kỳ theo lịch để chạy mỗi vài giờ, với lệnh

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

và vô hiệu hóa cron sinh sản khi tải trang với mục sau trong wp-config.php:

define('DISABLE_WP_CRON', true);

1
Đây là câu trả lời thực sự.
ILikeTurtles

Theo bài báo, độ trễ 1 giây xảy ra trên các phiên bản cURL dưới 7.15.5. Nó hoạt động tốt trên các phiên bản curl từ 7.15.5 trở lên. 7.15.5 được phát hành vào tháng 8 năm 2006. Không còn thời gian chờ 1 giây nữa ngoại trừ các thiết lập thực sự cũ.
dùng63350


@ user63350 Điều đó đúng với cURL nhưng không đúng với WordPress. Từ bài viết: "lớp WP_Http_Curl điều chỉnh thời gian chờ phân đoạn thành một giây đầy đủ (ngay cả khi cURL sẽ hỗ trợ nó)". Ngay cả trong WordPress mới nhất (5.2.2), thời gian chờ vẫn là 1 giây, vì vậy vấn đề này xuất hiện trong tất cả các thiết lập bao gồm cả mới nhất.
Jake

Trên thực tế, thời gian chờ 1 giây đã được sửa trong WordPress 4.6 bằng # 33055 . (Nhìn vào cơ sở mã là khó hiểu vì mã cũ vẫn còn đó, bao gồm privatecác phương thức WP_Http::_dispatch_requestmà bây giờ không bao giờ được gọi.)
Jake
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.