【问题标题】:Different file caching methods, pros & cons [closed]不同的文件缓存方法,利弊[关闭]
【发布时间】:2011-12-26 07:04:37
【问题描述】:
  • 我有两个网站将共享一些资源,比如说 index.php、functions.js 和 style.css,这些脚本将用于网站上的几乎所有页面。
  • 我需要满足两种受众(就下载速度而言),即网站托管在同一网络中的用户(100mb/s aprx)和外部用户。

我正在寻找缓存每种脚本(.js、.css、.php)的最佳方法,以及如何在可能的情况下利用它们的优缺点来完成此操作的示例。缓存是指本地缓存、网络缓存和服务器缓存。

注意:index.php 是一个动态页面,应该每 2 小时从缓存中刷新一次。如果您以 .js、.css、.php 或组合开始您的答案,那就太好了,这样我就可以很容易地看到您在谈论缓存的脚本类型。

谢谢大家!

【问题讨论】:

  • 您应该做的第一件事是研究Responsive Design 并考虑您是否可能只想要一个网站。

标签: php javascript css caching networking


【解决方案1】:

通过缓存进行性能调整可以分为多层:

很好的介绍和实用的代码示例可以在第 9 章(性能)-Developing Large Web Applications 中找到。它将讨论缓存 CSS、Javascript、模块、页面、Ajax 和过期标头。

如果我们需要在服务器端保持简单,请执行以下操作:

  1. 安装APC 扩展,通过所谓的操作码缓存让PHP 更快。无需特殊配置,它会为您静默工作。
  2. 使用这个简单的 Pear 库 PEAR::Cache_Lite 将整个页面缓存两个小时。
  3. 对于每个数据库 SELECT 查询将结果缓存在 APC 中,TTL 为 5 分钟,md5 对 SELECT 语句进行哈希处理并将其用作 APC 缓存的键。 Docs

将来如果您有多个服务器并且性能变得至关重要,那么您将需要查看:

  1. 服务器之间的共享内存缓存。检查Memecache 甚至Membase
  2. 您需要一个反向代理解决方案:这基本上是在您的用户和服务器服务器之间的层,以便它将为 HTTP 请求而不是您的服务器提供服务。您可以使用 VarnishSquidApache Traffic Server
  3. Mysql innoDB 引擎很慢,你可能需要换更快的引擎比如XtraDB
  4. 那么也许你会发现理性数据库对你来说仍然很慢。然后,您将寻求键值解决方案,例如MongoDB

最后作为web应用性能检查的参考:

  1. 前端性能:High Performance Web SitesEven Faster Web SitesHigh Performance JavaScript
  2. 后端性能:Pro PHP Application PerformanceHigh Performance MySQL

【讨论】:

  • 很高兴听到这个消息。如果您将来需要深入了解细节,我将随时为您提供帮助。
【解决方案2】:

缓存是如此广泛,你真的应该更具体一点。

例如,如果您希望降低服务器上的负载,您可能希望使用 APC 缓存 PHP 文件(例如)[降低文件的磁盘读取].. 或使用 memcache/redis/一些其他的内存键值存储,用于减轻数据库服务器的压力(应用程序级缓存)。

如果我们谈论的是静态文件,您可以做很多事情来提高网络速度:

  1. 确保从服务器返回的缓存头是正确的,并且这些文件缓存在客户端中(只要您需要/想要)。 (客户端获得响应速度更快的网站,您获得更少的服务器负载 - 但您仍然会获得点击,您将返回未修改的 304)

  2. 如果您使用的是 Apache+mod_php... Apache 将启动一个 php interpeter,即使是针对静态内容(css、js)的请求。而如果你之前放置nginx,这些可能会被http服务器本身缓存 - 更快,或者,转到第3步(下面)

  3. 您可以将Varnish 放在您的整个(/两个)网站的前面以获取静态内容/半静态内容。

另一种常见的“微”优化...这通常会影响更大的网站..我不会担心你的 ~20K.. 但如果你愿意,可以将静态文件移动到不同的域,例如 some-university -static.com(不是子域).. 这样 cookie 标头就不会随静态文件的请求一起发送,从而导致传入带宽减少并为用户提供快速响应。 (较小的请求发送到目的地的速度更快,返回的速度更快)

首页这为您提供了一些初步的指导。

肯。

【讨论】:

  • 没问题,乔恩。文本编辑器把我的文本弄乱了一点.. 还是修好了。 #3 是清漆 :) 顺便说一句!如果你喜欢我的回答,请批准它是正确的,谢谢!
【解决方案3】:

对于 .js 和 .css 文件,您可以简单地使用 expires HTTP 标头,这将导致浏览器缓存它们。

至于.php,有几种选择。

您可以将 memcache 用于特定的事情,例如,如果您从数据库中一遍又一遍地加载相同的用户列表,并使用特定的过期时间缓存结果,例如2 小时。

或者您可以使用反向代理(例如 varnish)来缓存从 .php 脚本生成的整个静态 html 页面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2010-09-12
    • 1970-01-01
    • 2010-12-17
    • 2017-02-17
    • 2012-02-03
    相关资源
    最近更新 更多