【问题标题】:Strategies for Caching on the Web? [closed]网络缓存策略? [关闭]
【发布时间】:2010-09-12 00:32:30
【问题描述】:

在决定何时以及如何进行缓存时,您会考虑哪些问题、流程和问题。总是没有胜利的情况吗?

这假设您被一个已优化的代码库困住了。

【问题讨论】:

    标签: caching


    【解决方案1】:

    我最近一直在使用 DotNetNuke 开发 Web 应用程序,每次实施缓存解决方案时我都会考虑很多事情。

    • 是否所有用户都需要查看缓存内容?
    • 每一位内容多久更改一次?
    • 我可以缓存整个页面吗?
    • 是否需要手动清除缓存?
    • 我可以为整个网站使用单一缓存机制,还是需要多种解决方案?
    • 如果信息以某种方式过时会产生什么影响?

    【讨论】:

      【解决方案2】:

      我会查看您网站/应用程序的每个功能,并为每个功能确定:

      • 应该缓存吗?
      • 应该缓存多长时间?
      • 什么时候应该清除缓存?

      我个人会反对缓存整个页面,而是支持缓存网站/应用程序的部分。

      【讨论】:

        【解决方案3】:

        首先,如果您的代码按照您所说的进行了优化,那么只有在网站受到大量请求的冲击时,您才会看到显着的性能优势。

        但是,从 RAM 中提取资源比从磁盘中提取资源要快,因此如果您有适当的缓存策略,您的 Web 服务器将能够处理更多请求。

        至于知道什么时候需要缓存,考虑到即使是低端的现代网络服务器每秒也可以处理数百个请求,所以除非你期望有相当大的流量,否则缓存是可能你可以跳过。

        此外,如果您要从数据库中提取内容(例如 StackOverflow 可能会这样做),缓存会非常有用,因为数据库操作相对昂贵,并且在大容量情况下可能是一个巨大的瓶颈。

        至于适合缓存或缓存变得困难的场景...如果您尝试缓存显示当前日期和时间的动态页面,您将不断除非您更多地参与缓存策略,否则请查看旧日期/时间。所以这是需要考虑的事情。

        【讨论】:

          【解决方案4】:

          您使用什么语言?使用 ASP,您只需在方法上添加一些属性标记即可进行一些非常简单的缓存,并且值会根据时间进行缓存。

          如果你想对缓存有更多的控制,你可以使用一些流行的系统,比如 MemCached,并通过时间或事件来控制。

          【讨论】:

            【解决方案5】:

            Yahoo 例如 "versions" 他们的 JavaScript,因此您的浏览器会下载 code-1.2.3.js 并在出现新版本时引用该版本。通过这样做,他们可以使他们的 Javascript 代码可以缓存很长一段时间。

            至于一般答案,我认为这取决于您的数据,取决于它多久改变一次。例如,图像不会经常更改,但 html 页面会。 “关于我们”页面不会经常更改,但新闻部分会。

            【讨论】:

            • 是的,雅虎确实写了一本关于前端工程的书——我拥有它,它真的很棒!
            【解决方案6】:

            您可以按时间缓存。这对于快速变化的数据很有用。您可以将时间设置为 30 秒或 1 分钟。当然,这需要一些流量。您拥有的流量越多,您可以玩的时间越多,因为如果您每小时有 1 次访问,则此访问将填充缓存而不使用它...

            您可以按事件进行缓存...如果您的数据发生更改,则更新缓存...如果数据需要非常快速地为用户提供准确的数据,这将非常有用。

            您可以缓存您知道不会经常更改的静态内容。如果您有每天刷新的前 10 名,那么您可以将所有内容存储在缓存中并每天更新。

            【讨论】:

              【解决方案7】:

              如果可用,请注意整个对象的内存缓存。在 ASPNET 中,这是一个内置功能,您可以在 IIS 应用程序中植入业务逻辑对象并从那里访问它们。

              这意味着您可以将生成页面所需的所有内容存储在内存中(持久写入数据库)并生成没有任何数据库IO的页面。

              您仍然需要使用页面构建逻辑来生成页面,但是您在获取数据方面节省了 很多时间。

              其他技术涉及本地化输出缓存,您可以在其中捕获输出,然后再发送并将其保存到文件中。这对于静态部分(例如某些页面上的导航或文本正文)非常有用,并在请求时将它们包括在内。大多数实现会在发生写入时或在一段时间后像这样清除缓存的对象。

              然后是最不“准确”的:整页缓存。它是性能最高的,但除非你有非常简单的页面,否则它毫无用处。

              【讨论】:

                【解决方案8】:

                什么样的缓存?服务器端缓存?客户端缓存?

                客户端缓存对于某些东西来说是不费吹灰之力的,比如静态 HTML、SWF 和图像。找出资产可能更改的频率,并酌情设置“过期”标题。 (2 天?2 周?2 个月?)

                根据定义,动态页面更难缓存。在使用 Javascript 缓存某些块方面已经进行了一些探索(如果 JS 不可用,则降级为 IFrame。)但是,这可能会更难以改造到现有网站。

                数据库和应用程序级别的缓存可能有效,也可能无效,具体取决于您的情况。这真的取决于你的瓶颈在哪里。找出您的应用程序在页面渲染上花费最多时间的位置可能是优先级 1,然后您可以开始查看缓存的位置和方式。

                【讨论】:

                  猜你喜欢
                  • 2013-06-07
                  • 2019-11-11
                  • 2023-03-17
                  • 1970-01-01
                  • 2010-10-06
                  • 1970-01-01
                  • 2021-10-10
                  • 2021-07-26
                  • 1970-01-01
                  相关资源
                  最近更新 更多