如果用户访问某个站点并且他的访问触发了一项非常繁重的Cron作业,那么页面加载速度对他来说会较慢吗?据我了解,页面在加载之前不会等待cron作业执行,但是由于cron作业将并行运行,因此由于服务器繁忙,页面加载速度仍然可能会变慢吗?
如果用户访问某个站点并且他的访问触发了一项非常繁重的Cron作业,那么页面加载速度对他来说会较慢吗?据我了解,页面在加载之前不会等待cron作业执行,但是由于cron作业将并行运行,因此由于服务器繁忙,页面加载速度仍然可能会变慢吗?
Answers:
简短回答- 不。任何页面请求都会初始化计划的队列。这只是一个初始化请求。WP-CRON请求是一个独立的请求。
因此,请求URL
/somepage
只需初始化请求即可/wp-cron.php
但是-如果cron事件不能很好地工作(例如有1000个数据库查询,或者它请求一个真正响应时间很长的资源),或者两者兼而有之,或者为每个请求重新安排cron事件……其他http请求将占用资源,CPU性能,内存等...如果它占用了足够的资源,则您的页面会变慢。
在大多数情况下,简短的答案实际上是肯定的。
首先,在大多数设置中,生成cron作业会导致页面加载延迟1秒,因为它是通过具有1秒超时的回送HTTP请求完成的-请参阅https://wordpress.org/support/topic/save一个完整的第二次执行cron /。
其次,生成的作业现在将与页面加载争夺数据库访问权限(以及其他资源)。多个进程可以同时读取数据库;但是,无论何时将进程写入数据库,默认情况下都会将其锁定以防止任何其他进程同时进行写或读访问-请参见/programming/1005206/does-sqlite-lock-the-database -file-on-reads#answer-1005218。这的影响取决于cron作业的数据库更新的复杂程度以及数据库实际锁定的时间(可能不重要)。当然,如果在请求页面时恰好正在运行cron作业,那也将是一个问题,但是保证在页面加载时产生cron作业 它们至少会影响该页面的加载。
如果您的服务器/主机允许,建议您使用以下命令将计划的cron作业设置为每隔几个小时运行一次
php -q /path/to/wp-cron.php
并在页面加载中禁用cron生成,并在中输入以下内容wp-config.php
:
define('DISABLE_WP_CRON', true);