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

问题描述 投票:45回答:2

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

以下是证明它的基准:http://www.techempower.com/benchmarks/

出于这个原因,我们可能会使用node.js + express,但我仍然想知道为什么Symfony2在基准测试中表现如此糟糕。

symfony web benchmarking
2个回答
127
投票

最后,所有这些都归结为正确的缓存处理......

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

如果您使用反向代理,如Varnish和ESI(边缘包括)并最终提供模板的部分,您真的需要通过symfony更新。你会有一个非常快速的经历。

此外,如果您使用像APC和优化数据库这样的操作码缓存,人类用户实际上不会注意到真实应用程序中几毫秒的差异。

根据要求,我会深入一点,并给你一些更多的想法。


缓存和性能

云服务(s3,ec2,gae,......)几乎没有任何成本与负载均衡器配对,易于配置(厨师,木偶......)以及所有这些时髦的东西,即使对于它来说也变得简单和实惠小公司运行和管理大数据和/或高流量应用程序。

更多存储意味着更多的缓存空间 - 更多的计算能力意味着更快的缓存升温。

如果人们谈论php或框架性能,你会经常听到的东西:

  • facebook用php运行
  • youp ** n是用symfony开发的
  • ...

那么为什么这些网站没有彻底崩溃?因为他们的缓存程序很聪明。

facebook

你知道如果你写一个状态更新,Facebook会怎么做?

它不会将其保存到具有所有状态更新的数据库表中,如果朋友访问了他的流,则在提供服务之前,将从数据库中获取所有其他朋友的状态。

facebook将您的状态写入您的所有朋友新闻流并开始加热他们的缓存。现在所有的流都准备好服务,每当你的一个朋友访问他的流时,他将被提供缓存版本;即时几乎不涉及代码执行。当缓存预热完成时,流将仅显示新创建的状态。我们在这里谈论ms ...

这告诉我们什么?在现代高频率的应用程序中,几乎所有内容都是从缓存提供的,用户不会注意到页面的实际计算是花费1毫秒还是5秒。

在“真实世界”场景中,最终用户将注意到框架之间的req / sec没有差异。即使使用微型缓存等简单的东西,你也可以让你的vps托管博客一旦你在黑客新闻的登陆页面上制作它就不会立即停止。

最后,更重要的是......我的框架是否提供了工具,文档以及教程和示例......以便快速轻松地完成整个操作。 symfony对我有用!

如果你被卡住了......有多少人愿意并且能够回答你与绩效相关的问题?使用此框架已经创建或将在不久的将来创建了多少个真实应用程序?

您可以通过选择框架来选择社区!

...好吧那是重要的部分......现在回到这些基准:)


基准和设置

在基准测试中的所有这些闪亮的颜色和花哨的图形,您很容易错过这样一个事实,即每个框架都只测试了一个设置(网络服务器,数据库......),同时您可以为每个框架配置各种各样的配置。

示例:您也可以使用symfony + doctrineODM + MongoDB,而不是使用symfony2 + doctrineORM + mysql。

MySQL ... MongoDB ...关系数据库...... NoSQL数据库...... ORM ...微ORMs ...原始SQL ......在这些配置中都混淆了------>苹果和橘子。


基准和优化

几乎所有基准测试的常见问题 - 即使只是比较php框架 - 在网络上发现,以及那些“TechEmpower Web框架基准测试”是不等的优化。

这些基准测试没有利用这些框架的可能(以及经验丰富的开发人员众所周知的)优化......至少对于symfony2及其测试,这是事实。

关于最新测试中使用的symfony2设置的一些示例:

  • 没有使用-o标志调用“composer install”来转储优化的类映射自动加载器(code
  • 如果没有apc_cli = 1,则Symfony2将不会将APC缓存用于Doctrine元数据注释(issue
  • 整个DI容器注入控制器而不是只有少数必要的服务
  • 因此使用setter注入 - >创建对象然后调用setContainer()方法而不是将容器直接注入构造函数(请参阅:BenchController extends Controller extends ContainerAware
  • 别名($ this-> get('service_name'))用于从容器中检索服务而不是直接访问它($ this-> container-> get('service_name'))。 (code
  • ...

列表继续......但我想你明白这是领先的地方。 90 open issues现在......一个无尽的故事。


发展与资源

服务器和存储等资源很便宜。真的便宜......与开发时间相比。

我是一名自由职业者,收取相当高的费用。你可以得到2-3天的时间......或者是大量的计算能力和存储空间!

在选择框架时,您还可以选择一个快速开发工具包 - 这是一种武器,可以帮助您对抗从未完全满意,功能悄悄的客户......谁会为您的愿望付出代价。

作为代理商(或自由职业者),您希望在短时间内构建功能丰富的应用程序。你会遇到一些问题,你可能会遇到一些问题...可能与性能相关的问题。但是你也面临着开发成本和时间。

什么会更贵?额外的服务器或其他开发人员?


1
投票

这篇博客回答了你问题的第二部分:http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage

解雇symfony是因为“hello,world”测试的速度不如FooBar框架那么好是一个错误。原始速度不是专业人士的关键因素。成本是关键因素。使用symfony开发,托管和维护应用程序的成本低于其他解决方案的成本。

在选择框架时,应考虑开发的总成本。这意味着要考虑框架的代码质量(单元测试,文档等),性能(和托管成本),开箱即用的功能的数量和质量,社区的大小,组织的使用情况像你的,可扩展性等

作为一名Symfony开发人员,我从技术角度热情地讨厌WordPress。但我仍然建议(甚至使用!)它用于一个简单的网站。不仅因为它的受欢迎程度,还因为它的社区规模:聘请WordPress设计师/开发人员非常容易。在这种情况下,查看WordPress和Symfony之间的性能比较是没有任何意义的。

© www.soinside.com 2019 - 2024. All rights reserved.