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

时间:2016-08-29 15:11:37

标签: javascript php jquery ajax cpu

我们有一个新闻网站,我们会在其中缓存完整的文章页面。

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

  1. 查看计数器:我们在页面加载时为该文章的view_counts添加+1。
  2. 标题:在网站的标题上,我们检查是否存在session-> id,如果存在,我们会显示欢迎[名称],我的个人资料/退出,如果不存在,我们会显示注册/登录。
  3. 评论:我们会显示为该文章发表的评论。
  4. 跟踪用户行为:我们跟踪用户在网站上发布的每一个操作
  5. 现在我们想到这一点的唯一方法是通过AJAX调用:

    $('#usercheck').load(<?php echo "'" . base_url() . "ajax/check_header'"; ?>);
    

    等等。

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

    请参阅附件:

    The load in 60 minutes

    The high transactions on the site

1 个答案:

答案 0 :(得分:0)

首先,您不必为每个可能的动态内容使用AJAX,尤其是在评论的情况下,您也可以通过iframe加载它们。 这样,您不依赖于Javascript来发出请求。 它甚至可能适用于柜台。

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

此外,您是什么意思&#34;我们跟踪每一个动作&#34;?你如何追踪它们?你是从每一个小东西发送一个AJAX请求,还是你用JS去掉它们,并且每隔30秒就发送一次?

我的建议是你考虑你正在调用的PHP代码的大小,并尽可能地减少它,如果看起来可行则为零(通过利用localStorage来跟踪你的用户第一次登录后的会话),也许可以用其他方式加载计数器和评论。

例如,我推断您只是在每页加载时检查一次计数器,忽略当前用户正在阅读文章时其他用户的后续加载,因此您的计数器可能恰好在某个时候过时了,取决于您的流量。

我会更好地解释一下:你的页面有 n 个视图,所以当我加载它时,你要求 n 然后显示 n + 1 < / em>给我。在我阅读的同时,其他用户会同时请求和查看 x 次。您在服务器上的计数器肯定已更新为 n + x ,但我页面上的计数器仍然显示&#34; n views&#34; 。 那么,挑剔并向我展示 n + 1 并且没有更新它的重点是什么,因此被 x 关闭了?

所以,首先,计数器控制器应该尽可能小,如果你在iframe中加载它,如果没有AJAX自动更新怎么办?

How to refresh an iframe not using javascript?

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