在缓存页面中调用动态内容(当前使用ajax)的正确方法是什么?

Hos*_*ssj 8 javascript php ajax cpu jquery

我们有一个新闻网站,我们缓存一个完整的文章页面.

该页面上有4个区域需要继续保持动态:

  1. 查看计数器:我们在页面加载时向该文章的view_counts添加+1.
  2. 标题:在网站的标题上,我们检查是否存在session-> id,如果是,我们显示欢迎[名称],我的个人资料/注销,如果不存在,我们会显示注册/登录.
  3. 评论:我们显示为该文章所做的评论.
  4. 跟踪用户行为:我们跟踪用户在网站上所做的每一个操作

现在,我们想到这样做的唯一方法是通过AJAX调用:

$('#usercheck').load(<?php echo "'" . base_url() . "ajax/check_header'"; ?>);
Run Code Online (Sandbox Code Playgroud)

等等.

这对CPU产生了巨大的负担,但是接近这个的正确/替代方式是什么?

请参照附件:

负载在60分钟

网站上的高交易

Spy*_*yto 1

首先,您不必对所有可能的动态内容都使用 AJAX,特别是在评论的情况下,您也可以通过iframe. 这样,您就不再依赖 Javascript 来发出请求。它甚至可能适用于柜台。

但是,根据我从你的图表中看到的情况,你的问题不是 Javascript,也不是数据库服务器。在我看来,你有一些沉重的 PHP 控制器,也许你正在加载一个沉重的框架只是为了进行$session->id检查。

此外,“我们跟踪每一个行动”是什么意思?你如何追踪他们?您是否从每件小事中发送 AJAX 请求,或者您是否使用 JS 对它们进行反跳并仅每 30 秒左右发送一次?

我的建议是,您考虑所调用的 PHP 代码的大小,并尽可能地缩小它,如果可行的话甚至可以缩小到零(通过在localStorage第一次登录后跟踪您的用户会话),并且也许可以用其他方式加载计数器和评论。

例如,我推断您每次页面加载时只检查一次计数器,而在当前用户正在阅读文章时忽略其他用户的后续加载,因此您的计数器可能会碰巧过时一次,具体取决于您的交通。

我要更好地解释一下:你的页面有n 个视图,所以当我加载它时,你请求n,然后向我显示n+1 。当我阅读时,同一页面被其他用户请求并查看了x次。您服务器上的计数器肯定已更新为n+x,但我页面上的计数器仍然显示“n 次浏览”。那么,挑剔并向我显示n+1而不更新它,从而被x关闭有什么意义呢?

所以,首先计数器控制器应该尽可能的薄,如果你将它加载到 iframe 中,无需 AJAX 自动更新,会怎么样?

如何不使用 javascript 刷新 iframe?

这将使计数器保持最新状态,您可以在每个页面视图中使用 PHP 渲染一次,然后静态地提供生成的 HTML 文件。