我和我的同事正在选择一个web框架来开发一个高流量的网站。我们很擅长node.js + express
和php + symfony2
。它们都是很棒的框架,但我们有点担心Symfony2,因为它似乎比大多数web框架都要好。
下面是证明这一点的基准测试:http://www.techempower.com/benchmarks/出于这个原因,我们可能会使用node.js + express,但我仍然想知道为什么Symfony2在基准测试中的表现如此之差。
最后都归结为正确的缓存处理…
symfony或PHP通常比其他语言或框架慢,因此为您提供了快速创建丰富,安全和可测试的web应用程序的工具。如果您使用反向代理,如Varnish和ESI(边缘面包括),并最终服务于您真正需要通过symfony更新的模板部分。你将会有一个极快的体验。
此外,如果您使用操作码缓存,如APC和优化的数据库在现实世界的应用程序中,人类用户实际上不会注意到几毫秒的差异。
根据你的要求,我会再深入一点,给你更多的东西去思考。
缓存,随着云服务(s3,ec2,gae,…)几乎没有成本,加上负载平衡器,易于配置(chef,puppet,…)和所有这些可用的东西,即使是小公司也可以轻松负担得起运行和管理大数据和/或高流量应用程序。
更多的存储意味着更多的缓存空间——更多的计算能力意味着更快的缓存升温。
当人们在谈论PHP或框架性能时,你会经常听到的东西:- facebook运行php
- youp**n是用symfony 开发的。
- …
那么为什么这些网站没有完全崩溃呢?因为它们的缓存例程很聪明。
facebook例如,你知道如果你写一个状态更新,facebook会做什么吗?它不会将所有状态更新保存到数据库表中,如果一个朋友访问他的流,他的所有朋友的所有状态都将在服务之前从数据库中获取。
facebook将你的状态写入你所有朋友的新闻流,并开始预热他们的缓存。现在所有的流都在准备服务,每当你的一个朋友访问他的流,他将被提供一个缓存版本;立即,几乎不涉及代码执行。只有当缓存升温完成后,流才会显示您新创建的状态。我们在这里讨论的是ms…
这告诉我们什么?在现代高频率的应用程序中,几乎所有内容都是从缓存中提供的,用户不会注意到页面的实际计算时间是1毫秒还是5秒。
在"真实世界"的场景中,最终用户不会注意到框架之间的req/sec有什么不同。即使是像微缓存这样简单的东西,你也可以让你的vps托管博客不会在你在hackernews的登陆页面上立即关闭。
最后,更重要的是……我的框架是否提供了工具、文档、教程和示例……让这一切迅速启动并运行起来& &;一件容易的事。我喜欢交响乐!如果你卡住了…有多少人愿意并且能够回答你与绩效相关的问题?有多少实际应用程序已经或将在不久的将来使用这个框架创建?
你选择了一个框架就选择了一个社区!
…好了,这就是"重要吗?"现在回到这些基准测试:)
基准,设置
在基准测试中所有这些闪亮的颜色和花哨的图形中,你很容易忽略一个事实,即只有一个设置(web服务器,数据库,…)对这些框架进行了测试,而您可以为每个框架提供各种配置。示例:而不是使用symfy2 +doctrineORM+mysql你也可以使用symfony+doctrineODM+MongoDB。
MySQL……MongoDB……关系型数据库…NoSQL数据库…ORM……微orm…原始SQL…所有这些配置都混在一起------>苹果和橙子。
基准,优化
几乎所有的基准测试——甚至是那些只比较php框架的基准测试——都存在一个普遍的问题,那就是不均衡优化.
这些基准测试没有利用这些框架上可能的(由经验丰富的开发人员众所周知的)优化…至少对于symfony2和他们的测试来说,这是一个事实。
最新测试中使用的symfony2设置的几个例子:
- 没有使用-o标志调用"composer install"来转储优化的类映射自动加载器(代码)
- Symfony2将不使用APC缓存教条元数据注释没有apc_cli = 1 (issue)
- 整个DI容器被注入到控制器中,而不是只注入少数必要的服务
- 因此使用setter注入->创建对象然后调用setContainer()方法,而不是直接将容器注入构造函数(参见:BenchController extends Controller extends ContainerAware)
- 一个别名($this-> get('service_name'))用于从容器中检索服务,而不是直接访问它($this->container->get('service_name'))。(代码)
- …
the list continue…但我想你知道这是怎么回事。到目前为止,有90期尚未出版……一个没有尽头的故事。
开发,资源
服务器和存储等资源很便宜。真的很便宜……与开发时间相比
我是一个收费相当普通的自由职业者。你可以占用我2-3天的时间……或者一个该死的计算能力和存储负载!
当你选择一个框架时,你也选择了一个快速开发的工具包——一个武器,用来对抗永远不完全满意的、追求功能的客户……谁会为他的愿望付你一大笔钱呢?
作为一个机构(或自由职业者),你想在短时间内构建功能丰富的应用程序。当你被某事卡住时,你会面临一些点……可能是性能相关的问题。但是你也要面对开发成本和时间。
哪个更贵?额外的服务器还是额外的开发人员?
这个博客回答了你问题的第二部分:http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage
拒绝symfony,因为"hello, world"测试的速度不是与FooBar框架一样好是一个错误。原始速度不是专业人士的关键因素。成本是关键因素。和成本使用symfony进行应用程序的开发、托管和维护
在选择框架时,应该考虑开发的总成本。这意味着要查看框架的代码质量(单元测试、文档等)、性能(和托管成本)、现成特性的数量和质量、社区的规模、像您这样的组织的使用情况、可伸缩性等。
作为一个Symfony开发者,从技术角度来看,我非常讨厌WordPress。但我仍然会推荐(甚至使用!)一个简单的网站。不仅仅是因为它的受欢迎程度,还因为它的社区规模:雇佣一个WordPress设计师/开发人员非常容易。在这种情况下,比较WordPress和Symfony的性能是没有任何意义的。