页面确实需要快速加载,但是DB很慢,所以我们将它分成两个db调用,一个更快,一个更慢,第一个更快运行,我们可以提供页面的一部分非常有用。
但是我们希望第二个请求消失,我们知道每当第一个请求响起时,它总是必要的。所以现在页面的第一部分包含一个脚本,它触发http请求,然后我们进行数据库调用,最后加载。
但这是一个串行操作,这意味着页面加载的第一部分需要完成其db,返回http,在浏览器中呈现,运行脚本,请求http然后等待db并最终返回整个页面
你如何在PHP中解决这个问题?我们没有memcache,我查看了fifo,但我们也没有posix_mkfifo函数。
我想在第一个请求上进行两次db调用,提供第一个请求和部分页面,让第二个db调用继续运行,当它完成时我想将它保存在/ tmp /或缓冲区或者快速的地方 - 在内存中 - 当脚本要求它时 - 也许脚本http req需要再等一下,也许它很幸运,并且已经从内存中提供它。
但是在内存中你保留它,跨请求和php实例?不在全局,不在会话中,不在memcached中。哪里?套接字?我应该叉和管吗?
编辑:谢谢大家。我使用了两个async-http-requests路由。答案 0 :(得分:1)
我认为你可以使用AJAX。 第一次发送带有2个javascript AJAX调用的HTML页面,每个sql查询一个,由页面加载触发。 然后使用这些结果加载页面异步。
答案 1 :(得分:1)
问题在于,如果没有像memcache这样的额外解决方案,解决问题就很复杂。使用PHP中的Direkt,您可以在SHM中保存短数据。但那不是最佳解决方案。
最佳解决方案是构建更好的数据库结构,以便从数据库中获得更好的结果和更快的响应。
为了在数据库中获得更好的性能,您可以查看MySQL内存表。但要小心重启后表将被清除。因此,您可以使用数据填充表格以进行缓存。
您可以使用Ajax一次发送多个请求。