Concrete5 旨在以牺牲性能为代价实现灵活性。
一个非常简单的页面通常可以在单个请求中进行 3,000 到 10,000 个数据库查询,这完全是惊人的。
对于公共网站,您将需要启用全页面缓存(或运行像 Varnish 这样的 HTML 缓存),从而减少对如此多的查询的需求。但是,某些块和插件会遇到整页缓存问题。从 v5.7 开始,我们的经验是它有问题,需要彻底测试。
在 Intranet 和社区站点(用户需要登录并需要检查权限)上,完整的 HTML 缓存并不总是有效的。在这些情况下,您可能需要审核您的自定义代码并尽量减少使用查询繁重的 Concrete5 函数,替换为您自己的自定义 SQL 查询。
甚至 Concrete5 的 CEO 也承认这一点:
没错,concrete5 使用相当多的数据库查询来呈现页面。如果一个人从头开始设计一个应用程序来服务于一个目的,那么在少数几个查询中解决大多数问题是很容易的。然而,正如您所知,concrete5 在核心中提供了极大的灵活性。虽然我确信总会有机会清理查询和加载的对象数量,但当您拥有可能包含多个异常的页面、块区域和块级权限时,您总是会经常访问数据库,定时发布等。
我们的经验是,更重要的是查看实际使用情况,而不是抽象术语和基于直觉的规则。我们看到concrete5 在企业级以两种截然不同的方式使用。有时,组织正在为其员工、经销商或合作伙伴构建外联网/内联网。这些通常需要复杂的权限和工作流程,具体5 允许产品经理在不接触代码的情况下完成。这些站点,即使是在企业级,通常也提供数以万计的服务,并且可以在配置良好的 Web 服务器上正常运行。
其他时候,组织正在构建以前端为中心的信息站点。这些在交互性和复杂权限方面往往是相当平坦的。好处是易于编辑。在这些情况下,我们所做的是在concrete5 之前运行Varnish 缓存,这使得站点比apache 和静态HTML 文件更快。我认为您会发现这比根据需要删除系统的某些部分要容易得多。
– Franz Maruna,concrete5 首席执行官,2013 年 3 月
他的回复来自这篇文章,很好地解释了查询问题:http ://www.headenergy.co.uk/2013/02/concrete5-enterprise-ready-not-entirely/
我们的开发机构在 Concrete5 中维护了多个站点,但在遇到太多错误和性能问题后,我们选择不再在 Concrete5 上构建任何未来站点。