【问题标题】:Caching the website so it doesn't reload缓存网站,使其不会重新加载
【发布时间】:2012-02-27 12:57:06
【问题描述】:

我的网站有一些问题,因为它执行大量 SQL 查询,所以速度很慢,并且单击页面上的一个元素会重新加载整个页面。

这是一个例子: Example

第一次打开页面需要一些时间。然后,当您单击“3Way”、“Over/Under”、“Asian Handicap”等排序选项时,将再次花费相同的时间,因为页面将与左右列和顶部菜单一起重新加载。

但是,如果您再次单击其中一个排序选项,它会非常快,因为页面会被缓存。

我希望不要重新加载静态元素(未更改的元素)。自动,如果可能的话。如果没有,我希望能够手动分配重新加载哪些元素,哪些不重新加载。

此外,当在我给您的示例 URL 上单击“Over/Under”时,向下滚动到 1.75,然后单击“OVER 1.75”旁边的小箭头,页面将重新加载并将您发送到顶部。我不希望它进入顶部,但是应该在不重新加载页面的情况下对结果进行排序。

如果有人可以就这两个问题提供一些帮助,我将不胜感激,因为我不是很有经验,而且我只在 .htaccess 中启用了远期过期标头。

该网站是用 PHP/HTML/CSS 编写的,它是一个使用查询从 3 GB SQL 数据库中获取所有结果的动态网站。

如果有人可以帮助我,请提前感谢,特别是因为我给出的描述非常笼统。如果需要,我可以提供代码,但不知道哪个部分会有所帮助。

【问题讨论】:

    标签: php html caching dynamic web


    【解决方案1】:

    您可以使用Varnish 来缓存网页。 Varnish 是一个位于网络服务器前面的 HTTP 代理。配置它需要一些时间和知识,但它是一个非常好软件。

    或者,您可以使用 shared memorymemcacheredis 将 SQL 结果缓存在内存中。

    为了获得最佳效果,您可以结合使用这两种技术!

    【讨论】:

      【解决方案2】:

      您选择了错误的措辞。
      从而使通常只看标题但从不打扰问题主体的普通so类型做出错误的答案。

      您不需要缓存,但需要一些 AJAX/Javascript。例如,按某个列对表格进行排序对于 javascript 来说是一项微不足道的任务。请注意,这仅适用于整个表在一个屏幕上的情况。否则无论如何你都会重新加载页面。

      另外,您提高网站加载速度的想法是完全错误的。
      首先,对于 static 元素,它们是否重新加载并不重要——两者都会很快。 接下来,优化查询而不是缓存整个站点总是一个更好的主意。 最后,我想说您必须先配置您的网站,找到最慢的元素,然后在速度优化方面采取某些步骤。

      【讨论】:

      • 没有一张表适合一个屏幕,这意味着它将无法正常工作。查询已尽可能优化,唯一的其他解决方案是将它们全部作为 cron 作业运行,然后从 XML 导出结果,并在页面请求时从那里读取。网站最慢的部分是查询,并且页面在重新加载时跳转到顶部的事实令人恼火,因此它增加了问题。不过,我仍然不明白,为什么页面会重新加载所有列——即使是那些未更改的列(尽管它们是动态的)。
      【解决方案3】:
      1. 缓存首先取决于您希望向用户显示数据的频率。
      2. 调试您的脚本并检查您是否真的需要太多的 SQL 查询。尽量减少。
      3. 避免 group by、joins、order by 子句。
      4. 检查您的 MySQL 索引。
      5. 在 MySQL 中完成所有操作后,开始进行缓存。
      6. 使用文件缓存数据,memcache 甚至你可以尝试 mongoDB。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-07
        • 2014-11-24
        • 2013-11-19
        • 2017-09-13
        • 2013-11-02
        • 2023-03-15
        相关资源
        最近更新 更多