Wordpress 定时任务 wp-cron 的性能优化

2022-04-23 15:15:44 +08:00
 imdgr886

wordpress 的定时任务,比如定时发布文章,依赖的是自带的 wp-cron 来实现,这个需要用户访问来触发

由此引发了一个问题:

那么最好是禁用自动触发的功能

禁用 wp-cron

wp-config.php 里加上:

define('DISABLE_WP_CRON', true);

这样就不会每个用户访问都来检测定时任务了

通过 crontab 触发 wp-cron

如果是 linux 系统,并且可以登录服务器,那么用系统自带的 crontab 来触发任务是比较理想的选择

crontab -e

然后添加

* * * * *   curl   https://example.com/wp-cron.php >> /dev/null 2>&1

这样,每分钟系统都会访问 wp-corn.php 这个文件,然后 wp-cron 会判断何时执行任务

通过外部第三方系统触发(可选)

如果是 windows 系统,或者没有权限操作系统的 crontab ,那么还可以选择第三方的服务,这里我就要推一下我自己的服务了: URLCron

URLCron 会根据设定的频率或者表达式,按时去访问,与 crontab 的行为一致。不过使用 URLCron 会更加的方便,因为配置更简单,不需要 Linux 服务器的知识,同时可以保存访问记录,所以不用担心有没有触发定时任务,都记着呢

PC 和手机浏览器都有很好的体验,免费套餐也够 WordPress 用了

1310 次点击
所在节点    WordPress
4 条回复
ZE3kr
2022-04-23 21:34:50 +08:00
你可以看下源代码

https://github.com/WordPress/WordPress/blob/master/wp-includes/cron.php#L923

cron 是通过发起 curl 异步执行的,所以并不会严重影响性能,而且最长只阻塞 0.01 秒。
NewYear
2022-04-24 10:43:07 +08:00
@ZE3kr

这个事情是一直以来存在的误会吗,还是说后面 WP 做了改善,又或者是 wp-cron.php 被执行多多少少影响性能,所以一规律的时间执行避免执行次数过多呢……疑惑中。
ZE3kr
2022-04-24 10:56:39 +08:00
@NewYear 几年前从我刚接触 WP 开发,WP 就是这样实现的了。总之这样搞是 PHP 程序很常见的 workaround 。但换成 crontab 可以使用 PHP-CLI 无运行时间 /内存上限的执行确实是更优的。
imdgr886
2022-04-24 14:12:33 +08:00
@ZE3kr 因为是异步请求,0.01 秒其实不足以完成一个请求,只是客户端断开,服务器还会继续运行的。
其实对小站性能影响不大,但是时间不可靠;对大站会有明显影响

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX