2009-09-17 25 views
1

我有一个web服务,为浏览器提供一个javascript源文件。 javascript文件是由php实时编译的,包含一些文件。生成的文件每天只更改几次。它被服务于浏览器之前由apache压缩。使用memcached来扩展存储gzip文件

我想使用memcached从内存中提供它,以避免磁盘和cpu负载的文件包括和重复gzip。

我的问题是我如何gzip和存储一个JavaScript文件在memcached中并提供它(从PHP)?

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

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

回答

3

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

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

Apache的缓存在输出中遵循“Expires”标题等,因此很简单,只需打开这些URI并输出适当的标题即可。

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

+0

我不知道Apache过期的头文件是否受到尊重。我认为他们是为浏览器缓存。我想这是我需要的解决方案。谢谢! – Nir 2009-09-18 05:57:03

5

如果您为他们设计的任务使用适当的工具,最好。

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

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

memcached以书面速度击败其中的任何一个,而不是服务。所以这是查询参数发生更改的内容的最佳答案,因此它必须不断生成和过期(并重叠)。

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

还要注意,由于mencached不是一个网络服务器,它的缓存中没有为“关闭”的客户端作为一个适当的Web缓存会,否定任何假设的读取性能优势

+0

谢谢! 我没有提到该文件有多个由url参数控制的变体,这会导致包含不同的def文件。如上所述,每个变化都是相当静态的。 假设我买不起一个负载平衡器,这可以用LAMP自动完成吗?我不想手动压缩文件的每个变体。 – Nir 2009-09-18 05:54:04