该页面确实需要快速加载,但 DB 很慢,因此我们将其拆分为两个 db 调用,一个更快,一个更慢,第一个运行速度更快,我们可以为页面的一部分提供相当可用的服务本身。
但是我们希望第二个请求停止,并且我们知道每当第一个请求停止时总是需要这样做。所以现在页面的第一部分包含一个触发 http 请求的脚本,然后我们进行 db 调用,最后加载。
但这是一个串行操作,这意味着页面加载的第一部分需要完成它的db,返回http,在浏览器中渲染,运行脚本,请求http然后等待db,最后将整个页面返回给我们。
你如何在 PHP 中解决这个问题?我们没有 memcache,我查看了 fifo,但我们也没有 posix_mkfifo 函数。
我想对第一个请求进行两次 db 调用,为第一个请求和部分页面提供服务,让第二个 db 调用继续运行,当它完成时我想将它保存在 /tmp/ 或缓冲区或任何快速的地方 - 在内存中- 当脚本要求它时 - 也许脚本 http req 需要再等待一段时间,也许它很幸运,并且已经从内存中得到了它。
但是你将它保存在内存中的什么地方,跨请求和 php 实例?不在全局中,不在会话中,不在 memcached 中。在哪里?插座??我应该分叉和管道吗?
编辑:谢谢大家。我选择了两条异步 http-requests 路线。