为什么Symfony2在基准测试中表现如此糟糕,这有关系吗?< / h1 >



我和我的同事正在选择一个web框架来开发一个高流量的网站。我们很擅长node.js + expressphp + symfony2。它们都是很棒的框架,但我们有点担心Symfony2,因为它似乎比大多数web框架都要好。

下面是证明这一点的基准测试:http://www.techempower.com/benchmarks/出于这个原因,我们可能会使用node.js + express,但我仍然想知道为什么Symfony2在基准测试中的表现如此之差。

最后都归结为正确的缓存处理

symfony或PHP通常比其他语言或框架慢,因此为您提供了快速创建丰富,安全和可测试的web应用程序的工具。

如果您使用反向代理,如VarnishESI(边缘面包括),并最终服务于您真正需要通过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的性能是没有任何意义的。

相关内容

  • 没有找到相关文章

最新更新