问题描述
随着新的 WordPress 和它的新功能,似乎 WordPress 的能力远不止一个简单的博客引擎。但是 WordPress 的规模如何用 10k 来表示 – > 每天有 10 万用户?
有了很多用户,它的很大一部分将是有一个良好的缓存策略,但 WordPress 开发的帮助如何,使这很容易,并为您提供所需的控制。 Fx 能够缓存部分页面,只能渲染用户定制的部件,支持主/从数据库设置和类似的东西?
最佳解决方案
显然,没有任何尺度以及由快速 Web 服务器提供的静态文件以及任何必须确定要加载的内容,然后加载它的 CMS 将不会执行 WordPress 或其他方式。其中一个问题是每个 URL 请求需要的数据库查询数量,以及我以前在 Drupal 独家工作的 2 年工作经验,现在 2 年以上 WordPress 是 WordPress 在该部门要好多了。
也就是说,几乎没有任何权力将会扩大”out-of-the-box”; 这是关于您的可扩展性需求增长可以做什么的?
在 「大量交通」 的低端,有很好的缓存插件和廉价 CDN 的集成,您可以在 no-IT 预算和低托管预算上做得相当不错。这里还有一些其他问题& 回顾回顾:
- Steps to Optimize WordPress in Regard to Server Load?
- Options for CDN with WordPress Including Supporting Plugins?
- Configuring WordPress for Amazon CloudFront Caching?
有可用于分析以查明性能瓶颈的选项:
一旦出现瓶颈,您可以使用 Transient API 进行本地化优化。这个 Q& A 给出了一个可以使用 Transients API 进行优化的示例,并显示如何:
如果你真的想要拔出大枪,你可以配置 Memcached,HyperDB,Nginx 和/或更多的东西来加速 (似乎后者正在演变成从 WordPress 中获得惊人的可扩展性的方式):
- Enable Memcached for your WordPress
- How To Speed Up WordPress With Nginx And WP Super Cache
- HyperDB
- Nginx as a front-end proxy cache for WordPress
最后还有新兴的 WordPress-focused webhosts 专门从事性能如 WP Engine,ZippyKid 等:
所以好消息是所有的规模都非常好从极低的免费和轻松的技术复杂性和成本只有随着流量大幅增长而增长。从 WordPress 开始,这将是巨大的。如果你的流量不断增长,而且你的货币化程度相当不错,那么你会发现这是很有代价的。
至少 IMO 。 🙂
次佳解决方案
- 不要期望共享托管太多 – 如果您在共享主机上,不要责怪 WordPress 缓慢。共享主机可能会将 1000 个帐户装入一个服务器。所以你可以花一整天优化每月 10 美元的账户,这并不重要。还要注意营销流行语 – 只是因为它说”cloud” 并不意味着你没有与 100 或 1000 人共享一台服务器。
- 在这一点上我不认为缓存插件是必要的。如果您查看 WP 源代码,则已经将高级缓存放入内核。缓存的缓存缓存的缓存 – 注意,这可以适得其反。
- 减慢你的主要原因是缓慢的 MySQL 查询和 WordPress out-of-the 盒不应该给你这里麻烦。不过,我不得不”LIMIT” 我的评论查询,因为我有 5 万多条评论。 (这是固定的吗?) 另外,如果你正在做任何非典型 (像 1000 个类别),也可能是一个问题。
- 我使用 Linode 512 与 NginX 和”top” 显示 PHP 和 NginX 的工作在不到 1/100 秒的每个请求。几乎所有的 CPU 时间都与 MySQL 绑定。您可以每月服务 100 万页,一个 20 美元的路易斯,但是一旦你开始添加插件和照片,我想你将需要一个”1GB” 线性码。从我的角度来看,它几乎是线性的:如果浏览量是双倍的,只是你的 Linode 的大小的两倍。
免责声明:我不为 Linode 工作。
更新 (〜 2 年后),因为你想用 PHP 缓存页面的一部分,这里是一个简单的解决方案,我使用这是非常快的。我在 1/100 秒内每页缓存几个单独的部分/部分。看起来像一个 ramdisk 可以使这更快,但它是很快我的需要:
$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp
$cache_life = 1000; // seconds to keep this cached
$filemtime = filemtime($cache_file); // returns FALSE if file does not exist
if (!$filemtime or (time() - $filemtime >= $cache_life)) {
// heavy lifting starts
$output = 'Heavy!';
// heavy lifting ends
if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache
echo $output;
} else {
// load from cache
$output = file_get_contents($cache_file);
echo $output;
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。