【问题标题】:memcache php caching js css and imagesmemcache php 缓存 js css 和图像
【发布时间】:2012-05-18 15:07:41
【问题描述】:

如果可能的话,在一些建议/反馈之后。

我正在处理一个大型项目,开发团队要求我们合并所有 JS/CSS 并将其与 memcache 缓存为一个文件,以加快速度。

我担心这不是我习惯的工作方式,我只想加载每个页面所需的 JS 和 CSS,我认为这是显而易见的原因。

我也一直在寻找其他一些高流量的网站,但似乎没有其他人这样做。

谁能告诉我这种方法的优缺点吗?

提前致谢

理查德

【问题讨论】:

  • 也许你不想把它变成一个真正的问题
  • 似乎您在这里有两个问题 - 我应该使用 memcached 来缓存 js/css,还是应该将所有 js/css 合并到一个文件中。我建议您将这两个问题分开发布,因为它们确实无关。
  • 我想问题是缓存一个巨大的 css 和 js 文件的优缺点是什么和缺点是为了那个?
  • @user989952 如果您将所有内容合并到一个文件中并让浏览器缓存 那个,它会加快速度非常轻微,因为只有每页加载一个GET /whatever.css ... If-Modified-Since:,但我怀疑它在实际收益方面可以忽略不计。即使这样,我也看不出 memcache 对单个静态文件有多大帮助,而且每次新客户端到达/缓存副本过期时,您都必须再次传输整个文件。总的来说,我支持你,他们的建议对我来说听起来像是一个愚蠢的想法。
  • @DaveRandom 速度什么上升了一点点?服务器性能或页面加载时间?虽然调整到一个文件可能不会显着提高服务器性能(尽管它会有所帮助),但页面加载时间可以显着改善,具体取决于具体情况。页面加载时间是影响用户的因素,因此它是确保良好用户体验的重要因素。请参阅我的答案以了解数学分解。

标签: php javascript css memcached


【解决方案1】:

“我一直在查看其他一些高流量网站,但似乎没有其他人这样做”

真的吗?这让我有点吃惊……这被认为是减少页面加载时间的第一步。见这里:http://developer.yahoo.com/performance/rules.html。如果您想测试对加载时间最佳实践的遵守情况,您可能还想尝试他们的性能测试工具 YSlow:http://developer.yahoo.com/yslow/

这就是为什么这被认为是最佳做法的原因:浏览器限制为大约 8 个同时连接,每个特定服务器限制为 2 个(不符合标准的浏览器更多)。因此,如果您要为给定页面生成多个文件,那么它们将按顺序加载,因为您的浏览器将往返您的服务器十五次,一次两次。

让我们看看结果如何。假设您有 15 个文件,每个文件大小为 10k,或者您可以将它们组合成一个 150k 的文件。假设服务器的延迟为 65 毫秒,下载速率仅为 25k/秒。让我们算一下......这是等式:

$page_load_time = ( ($simultaneous_connections * $load_time_per_file) 
                       + $latency_per_request ) 
                  * ($number_of_files/$request_cycles)

地点:

$request_cycles = max(1, ($number_of_files/$simultaneous_connections))

所以,有 15 个文件,每个文件 10k:

((2 * .4 seconds) + .065 seconds) * 7.5 =  6.4875 seconds

或使用单个 150k 文件:

((1 * 6 seconds) + 0.065 seconds) * 1 = 6.065 seconds

差别不大,但用户等待时间仍然接近半秒!

现在 - 当他们使用 3g 连接时会发生什么?还是有一点 wi-fi 问题?让我们尝试更多的带宽(100k/sec)和更多的延迟(250ms):

((2 * .1 seconds) + 0.250 seconds) * 7.5 = 3.375 seconds

((1 * 1.5 seconds) + 0.250 seconds) * 1 = 1.750 seconds

哇!现在所有这些单独的小文件几乎使页面加载时间增加了一倍!

添加一大堆其他文件,您喜欢的 TypeKit 负载、广告服务器负载、Facebook 插件等等等等,这些东西开始变得更加重要。

【讨论】:

  • 你在这里做了一个很好的案例,所以我暂时给你一个+1,尽管我仍然至少部分不同意,我认为一个好的客户端缓存头设置在长期内更重要跑。但我不得不说你的情况很好。
  • @DaveRandom - 谢谢,戴夫!我不会反对我对良好缓存标头的重要性的反对......但是一旦解决了这个问题,就会有另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2011-11-28
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多