2012-05-18 46 views
0

是否在一些建议/反馈如果可能的话。memcache php缓存js css和图像

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

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

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

任何人都可以给我一些这种方法的优点和缺点吗?

在此先感谢

理查德

+0

也许你不想把它变成一个真正的问题 – baloo

+0

似乎你在这里有两个问题 - 我应该使用memcached缓存js/css,并且应该将所有js/css合并到一个文件中。我建议你分别发布这两个问题,因为它们确实无关。 –

+0

我想这个问题是什么反对缓存一个巨大的CSS和JS文件,并反对实际上只使用每页需要什么,让浏览器缓存它,以及利弊是什么利弊呢? – user989952

回答

3

“我一直在寻找一些其他高流量的网站,并没有其他人似乎是在做这个”真的

?这令我感到惊讶......这是减少页面加载时间的第一步。看到这里: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 

不是一个戏剧性的差异,b用户等待时间仍然差不多半秒!

现在 - 当他们是3G连接,会发生什么?或者有一点Wi-Fi的麻烦?让我们尝试更多的带宽(100K /秒),更延迟(250毫秒):

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

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

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

添加在一大堆的其他文件,你看中的TypeKit负载,广告服务器的负载,Facebook的插件,等等,等等等等,这东西开始更加重要。

+0

你在这里做了一个很好的例子,所以我会暂时给你一个+1,尽管我仍然不同意至少部分,我认为从长远来看,一个好的客户端缓存头设置更重要。但我必须说,你的情况很好。 – DaveRandom

+0

@DaveRandom - 谢谢,戴夫!你不会反对我提到好的缓存标题的重要性......但是一旦被照顾,还有另一个祸害。 –