不同的文件缓存方法,优点和缺点缺点

时间:2011-11-10 15:37:51

标签: php javascript css caching networking

我目前是一名在大学工作的安置学生(网络开发人员),我被分配了一些大型网络项目。这些项目包括对i.t.大学进行全面改造。帮助网站每月在大学校园内提供大约14k次点击,外部大约4k。我还有第二个项目,它是第一个项目的移动版本。这些项目将分享一些资源。

概括这个问题,以便答案对更多人有用:

  • 我有两个网站可以共享一些资源,比如index.php,functions.js和style.css,这些脚本几乎可以在网站的所有页面上使用。
  • 我有两个受众群体(根据下载速度),网站托管在同一网络中的用户(100mb / s aprx)和外部用户。

我想知道什么是缓存每种脚本(.js,.css,.php)的最佳方法,以及如何在可能的情况下如何利用其优点和缺点完成其他方法的示例。通过缓存,我的意思是本地,网络和服务器缓存。

注意:index.php是一个动态页面,应该每2小时从缓存中刷新一次。如果你用.js,.css,.php或它的组合开始你的答案会很酷,所以我可以很容易地看到你在谈论缓存的脚本类型。

全部谢谢!

3 个答案:

答案 0 :(得分:7)

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

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

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

  1. 安装APC扩展名,这将通过所谓的操作码缓存使您的PHP更快。没有特殊的配置,它会默默地为你工作。
  2. 使用这个简单的Pear库PEAR::Cache_Lite将整个页面缓存两个小时。
  3. 对于每个数据库SELECT查询缓存APC中的结果,TTL为5 Min,md5散列SELECT语句并将其用作APC缓存的密钥。 Docs
  4. 将来如果你有多台服务器并且在此之前性能变得至关重要,你需要看一下:

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

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

答案 1 :(得分:3)

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

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

如果我们谈论静态文件,您可以采取一些措施来提高网络速度:

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

  2. 如果您正在使用Apache + mod_php ...即使对于静态内容(css,js)的请求,apache也会启动一个php interpeter。如果您之前放置nginx,那么http服务器本身可以缓存 - 更快,或者,转到步骤3(下面)

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

  4. 另一个常见的“微观” - 优化......这通常影响更大的网站..没有什么我会担心你的~20K ..但如果你想,是将静态文件移动到一个不同的域,如某些大学-static.com(不是子域)..这样,cookie头不会随静态文件的请求一起发送,从而减少了传入带宽和用户的快速响应。 (较小的请求发送 - 快速到达目的地 - 它返回的速度更快)

    首页,这给了你一些初步的指示。

答案 2 :(得分:1)

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

至于.php,有几种选择。

您可以将memcache用于特定事物,例如,如果您从数据库中反复加载相同的用户列表,并使用特定的过期时间缓存结果,例如: 2个小时。

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