我在函数中有一个函数。在save\\u post上调用的php。目前,当用户发布或更新帖子时,将执行此功能,但这将花费大量时间。
使此函数在后台进程中运行的最简单方法是什么-非阻塞?
function export_all_in_json() {
file_put_contents(ABSPATH.\'all.json\', fopen(\'https://example.com/api/all/get_all_content/\', \'r\'));
}
add_action( \'save_post\', \'export_all_in_json\' );
最合适的回答,由SO网友:Tom J Nowell 整理而成
与其联系远程站点以获取昂贵的HTTP请求中的信息,为什么不让远程站点定期向您发送数据?
注册REST API端点以接收该端点中的数据,接收数据并将其保存在all.json
在远程站点上添加一个cron作业获取数据使用此数据向站点发出非阻塞远程请求现在我们有了一个完全异步的非阻塞系统。既然数据可以提供给你,为什么还要提取呢?
这给了我们一些好处:
在save_post
可以完全删除过滤器,使帖子保存更快这通过删除过滤器修复了过滤器中的许多错误,即使没有创建帖子,文件更新也可能发生,现在文件更新是可预测的和常规的,例如每5分钟更新一次,或者每小时一次,这样可以避免多个请求同时发送到API的竞争条件,从而导致额外的服务器负载和损坏的JSON文件。您的API端点需要一点时间来计算JSON数据,因此可以控制它发生的频率,例如,如果站点正在努力将cron作业从5分钟改为10分钟以减轻负载,您可以ping API并告诉它在保存帖子时触发将数据发送到端点,而不是执行完整的获取和保存。这将允许您使用fetch范式,并且仍然具有优势。这与一些支付和身份验证流程的工作方式类似