使用memcached扩展以存储gzip压缩文件

时间:2009-09-17 19:59:55

标签: javascript performance memcached

我有一个向浏览器提供javascript源文件的Web服务。 javascript文件是由php实时编译的,包含一些文件。生成的文件每天只更改几次。它在被提供给浏览器之前被apache压缩。

我想使用memcached从内存中提供服务,以避免磁盘和cpu加载文件包含并重复gzip。

我的问题是如何在memcached中压缩和存储javascript文件并提供它(来自php)?

在我看来,如果文件不在存储中,我应该通过include获取文件,获取输出缓冲区,gzip并将其存储在memcached中。我对么?是否有一些标题我应该添加到输出或我应该做的任何其他事情,以使结果与我的apache当前提供的gzip文件兼容?

更新:我没有提到该文件有多个由url参数控制的变体,这会导致包含不同的def文件。如上所述,每个变化都是静态的。

2 个答案:

答案 0 :(得分:5)

最好是使用适当的工具来完成他们设计的任务。

在您的情况下,您有一个缓慢变化的文件,将静态提供。我的意思是它不依赖于查询,但在有效期内每个查询都是一样的。

为此,请使用良好的缓存网络服务器或将缓存/负载均衡器放在服务器前面。无论是Squid,Varnish还是NginX都可以。事实上,其中任何一个都可以像memcached一样快速地提供静态文件。只要确保自己压缩文件并像这样服务它。

memcached在编写速度方面击败了其中任何一个,而不是服务。因此,对于随查询参数而变化的内容,它是最佳答案,因此必须不断生成并过期(并重叠)。

由于您只会压缩和写入文件几次,因此压缩/写入时间无关紧要。之后,多级缓存将为您带来最佳性能。

另请注意,由于mencached不是网络服务器,因此它的缓存不像客户端那样“关闭”正确的网络缓存,否定任何假设的读取性能优势

答案 1 :(得分:3)

也许正确的解决方案是在您自己的Web服务器上使用Apache自己的内置缓存。

毕竟,它不像是有很多不同的变化,或者它经常变化。如果您的服务器场中的每个服务器不时生成自己的副本,那么(我猜)不会是一个很大的打击。

Apache的缓存在输出中尊重“Expires”标题等,所以很容易为这些URI打开它并输出相应的标题。

memcached的“优点”是你的memcached服务器形成一个看起来像单个缓存的池,可以被所有的web节点共享;如果您的项目数量非常少(在这种情况下听起来像是有一个或只有几个),这并不是真正相关的。