0

该页面确实需要快速加载,但 DB 很慢,因此我们将其拆分为两个 db 调用,一个更快,一个更慢,第一个运行速度更快,我们可以为页面的一部分提供相当可用的服务本身。

但是我们希望第二个请求停止,并且我们知道每当第一个请求停止时总是需要这样做。所以现在页面的第一部分包含一个触发 http 请求的脚本,然后我们进行 db 调用,最后加载。

但这是一个串行操作,这意味着页面加载的第一部分需要完成它的db,返回http,在浏览器中渲染,运行脚本,请求http然后等待db,最后将整个页面返回给我们。

你如何在 PHP 中解决这个问题?我们没有 memcache,我查看了 fifo,但我们也没有 posix_mkfifo 函数。

我想对第一个请求进行两次 db 调用,为第一个请求和部分页面提供服务,让第二个 db 调用继续运行,当它完成时我想将它保存在 /tmp/ 或缓冲区或任何快速的地方 - 在内存中- 当脚本要求它时 - 也许脚本 http req 需要再等待一段时间,也许它很幸运,并且已经从内存中得到了它。

但是你将它保存在内存中的什么地方,跨请求和 php 实例?不在全局中,不在会话中,不在 memcached 中。在哪里?插座??我应该分叉和管道吗?

编辑:谢谢大家。我选择了两条异步 http-requests 路线。

4

2 回答 2

1

我认为你可以使用 AJAX。第一次发送带有 2 个 javascript AJAX 调用的 HTML 页面,每个 sql 查询一个,由页面加载触发。然后与这些结果异步加载页面。

于 2013-09-25T14:19:29.517 回答
1

问题是您的问题在没有像 memcache 这样的额外解决方案的情况下解决起来很复杂。在 PHP 中的 Direkt 您可以将短数据保存在SHM中。但这不是最好的解决方案。

最好的解决方案是构建更好的数据库结构,以便从数据库中获得更好的结果和更快的响应。

为了在您的数据库中获得更好的性能,您可以查看 MySQL 内存表。但请注意,重新启动后表格将被清除。因此,您可以用数据填充表以进行缓存。

您可以使用 Ajax 一次发送多个请求。

于 2013-09-25T14:19:58.247 回答