动态页面的缓存插件有多有效?

时间:2012-08-04 作者:Tom Auger

我的一个网站的大部分页面只能由注册用户访问。虽然这些页面确实共享一些常见的静态内容(标题等),但页面上的大多数信息都是使用各种usermeta、postmeta和自定义表数据专门为该用户填充的。

此外,用户不太可能多次访问同一页面。然而,有成千上万的用户可能希望同时访问自己的信息页面,因此性能备受关注。

我对缓存插件的理解是,它们在处理相对静态的内容(如博客条目或“关于我们”的页面)方面做得很好,这些内容很少发生变化,但必须向大量同时请求提供(没有任何差异或自定义信息)。在我的情况下,一旦用户登录并访问其个人信息,真正的性能“命中”就会出现。

在这种情况下缓存插件的效果如何?除了DB优化之外,是否还有其他方法可以帮助减少内存和DB负载?

2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

缓存完整页面对于您描述的情况没有任何好处。用户将更新内容,并期望立即看到他们的更新,这意味着您将花费更多的服务器时间使缓存的页面无效。数据库服务器可能是几乎所有webapp中最大的瓶颈。

您可以做两件事:

将数据库移动到一个单独的服务器上——理想情况下,这个服务器可能有大量内存,唯一的工作就是为数据库提供服务memcached 或APC. WordPress的核心中有一个对象缓存,但它的生存期仅为一个页面加载。两个链接的对象缓存后端是用memcached替换该缓存的“插件”。任何时候wp_cache_get 调用时,将首先命中memcached/APC,然后再调用数据库

SO网友:Wyck

如果插件可以使用操作码缓存,那就太多了。你真的不需要一个大的插件来利用APC之类的东西,它可以是一个插件。

为了进一步解释,每次请求PHP生成的页面时,服务器都必须读入各种内容(代码和文件)“编译”成机器可以理解的内容(操作码)。操作码缓存将其保存在内存中,从而大大减少后续请求。

我建议使用APC并向其投入大量RAM,您将看到显著的改进

基准:
https://sivel.net/2011/12/wordpress-caching-comparisons-part-2/
http://www.garron.me/linux/apache-vs-nginx-php-fpm-varnish-apc-wordpress-performance.html

如果你真的想要快速的东西,我推荐以下线程:
nginx + php-fpm + APC..
nginx, php-fpm, apc and varnish

根据我的经验,memcached不是一个操作码缓存,除非你运行多个冗余服务器不值得,但你可以同时使用它们。

结束