在不考虑用户个人的情况下,为什么用户会认为这些 CMS 如此迟钝?
- 据了解,Joomla、Drupal、Wordpress、Plone3 和 4 已经被测试过了。结果令人震惊:它们的表现约为 4-14 页/秒。这怎么可能呢?为什么它们如此缓慢?一个 CMS 应该只需要查询数据库并把数据填充到漂亮的模板中,数据库是快速的,模板也应该很快(文本替换,没什么大不了的)。我们的机器是超级快的,但是,这些备受瞩目的 CMS 每秒只能生成几页。这是怎么回事呢?
解决方案
-
CMS 不仅可以查询数据库并把数据填充到漂亮的模板中。主流的现代 CMS 系统非常复杂。一个典型的页面不仅仅包含正文和标题,还包含动态的基于类别的内容查询,这些查询会汇总许多网站区域的信息,更不用说安全修剪和用户特定的内容区域。例如,加载 www.volvogroup.com 至少需要 7 次这样的查询,另外还需要通过网站结构进行递归以生成导航,并连接到外部系统以获取新闻和投资者关系数据。考虑到这一点,如果一个功能强大的服务器集群每秒能处理几百次点击,也就没那么令人惊讶了。
-
因为完成所有这些操作需要大量的处理。这不仅仅是“查询、替换、呈现”。所有这些产品都是为了适应广泛的用例并且在一定程度上可扩展,因此,你所说的这 3 项基本操作实际上被分成了许多许多操作,所有这些操作都需要时间。条件相同,系统越灵活,“开箱即用”的速度就越慢。
-
它们速度慢的原因有几个:
- 大多数都是模块化的,这意味着更多的文件、更多的代码和更多的数据库查询。
- 它们在很大程度上(WordPress 除外)试图做所有事情,再次说明,为所有可能的情况设计一个系统会让系统更加复杂,更难调整。
- 它们中的大多数(目前)同时支持 PHP4 和 PHP5,这又是额外的负担。
- 据称它们是为了非技术用户可以使用而制作的,这意味着它们通常不得不以一种效率最低的方式来做事,即 Drupal 的 CCK / Views 允许不会编程的人有效地创建数据库表和 SQL 查询,缺点是这些表/查询的设计非常通用,与定制编码工作相比效率很低。
- 它们倾向于使用大量数据库查询,Drupal 对一个非常基本的页面使用了 40 多次查询,如果你搜索他们的论坛,你将会看到一些人声称,某些页面会发出数百次甚至超过一千次查询。
- 当然,它们提供了缓存,而 Drupal 可以从诸如其 boost 模块之类的东西中获得相当好的性能,缺点是 Drupal(和 Joomla)的卖点之一是你在其中可以创建一个社区网站、论坛、Digg 之类的网站,所有这些网站的缓存用处都非常有限。
-
它们是相对复杂系统。它们允许大量插件挂钩,因此从请求到响应的工作流中有很多步骤。然而,在现实世界中,缓存(无论是应用程序内缓存还是 opcode 缓存)对性能的提升是巨大的。我不熟悉 Plone,但 PHP CMS 基本上不得不加载和解释几乎整个系统,以满足每个请求。
-
请不要为此感到冒犯,但以你对网络编程的不熟悉作为你问题的开场白,然后批评对你来说似乎是“简单”操作的东西的表现,这有点目光短浅。我建议你更多地了解 CMS 解决的常见问题,以及动态网页和 HTTP 的一般理论和实践。这远不是一个简单的 I/O 操作。另外,对于实际使用,我强烈建议运行 CMS 的任何人找到一种缓存解决方案。缓存旨在解决 Web 技术中出现的许多“速度”问题。它应该成为任何常见 Web 堆栈的一部分。