最后,这一切都归结为正确的缓存处理...
symfony或PHP通常比其他语言或框架慢,因此为您提供了创建丰富,安全和可测试的Web应用程序的工具。
如果您使用像Varnish和ESI这样的反向代理(边缘侧包含),并最终提供模板的某些部分,您确实需要通过symfony进行更新。您将拥有极快的体验。
此外,如果您使用像APC这样的操作码缓存和优化的数据库,人类用户实际上不会注意到现实世界中几毫秒的差异。
根据要求,我会更深入地研究,并给你一些更多的事情来思考。
缓存和性能
借助云服务(s3,ec2,gae,...),几乎免费与负载平衡器配对,轻松配置(厨师,木偶,...)以及所有这些时髦的东西,即使对于小公司来说,运行和管理大数据和/或高流量应用程序也变得简单且价格合理。
更多的存储空间意味着更多的缓存空间 - 更多的计算能力意味着更快的缓存 warmimg。
如果人们在谈论php或框架性能,你会经常听到的事情:
- Facebook 运行与 php
- youp**n是用symfony开发的
- ...
那么,为什么这些网站没有完全崩溃呢?因为它们的缓存例程很聪明。
脸书
例如,您是否知道如果您编写状态更新,Facebook会做什么?
它不会将其直接保存到包含所有状态更新的数据库表中,并且如果朋友访问他的流,则在提供之前,将从数据库中获取来自他所有朋友的所有状态。
Facebook将您的状态写给您所有朋友的新闻流,并开始加热他们的缓存。现在,所有流都已准备好服务,每当您的一个朋友访问他的流时,他都将获得缓存版本;即时完成,几乎不涉及代码执行。仅当缓存预热完成后,流才会显示新创建的状态。我们在这里谈论的是ms...
这告诉我们什么?在现代高度频繁的应用程序中,几乎所有内容都是从缓存中提供的,用户不会注意到页面的实际计算是否花费了1ms或5秒。
在“真实世界”场景中,最终用户会注意到框架之间的 req/sec 没有差异。即使使用像微缓存这样的简单内容,一旦您在hackernews的登录页面上完成,您也可以让您的vps托管博客不会立即关闭。
最后,更重要的事情是...我的框架是否提供了工具,文档,教程和示例...让整个事情快速而轻松地启动并运行。symfony为我做!
如果你卡住了...有多少人愿意并能够回答您与绩效相关的问题?有多少实际应用程序已经或将在不久的将来使用此框架创建?
你通过选择一个框架来选择一个社区!
...好吧,这是为了它很重要的部分...现在回到这些基准:)
基准测试和设置
在基准测试中所有这些闪亮的颜色和花哨的图形中,您很容易错过这样一个事实,即只有一个设置(Web服务器,数据库等)使用每个框架进行了测试,而您可以为每个框架提供各种各样的配置。
示例:除了使用 symfony2+doctrineORM+mysql 之外,你还可以使用 symfony+doctrineODM+MongoDB。
MySQL ...MongoDB ...关系数据库 ...NoSQL Databases ...奥姆...微型 ORM ...原始 SQL ...所有这些都混合在这些配置中,------>苹果和橙子。
基准测试与优化
几乎所有的基准测试(即使是那些仅比较php框架的基准测试)以及那些在Web上找到的“TechEmpower Web Framework Benchmarks”的常见问题是不平等的优化。
这些基准测试没有利用这些框架上可能的(以及经验丰富的开发人员众所周知的)优化......至少对于symfony2和他们的测试来说,这是一个事实。
关于他们最新测试中使用的symfony2设置的几个例子:
- 未使用 -o 标志调用“composer install”以转储优化的类映射自动加载器(代码)
- Symfony2 不会在没有 apc_cli = 1 的情况下将 APC 缓存用于 Doctrine 元数据注释( 问题 )
- 整个DI容器被注入控制器,而不仅仅是少数必要的服务
- 因此使用 setter injection ->创建对象然后调用 setContainer() 方法,而不是将容器直接注入构造函数(参见:BenchController 扩展 Controller 扩展 ContainerAware)
- 别名( $this->get('service_name') ) 用于从容器中检索服务,而不是直接访问它 ($this->container->get('service_name') )。( 代码 )
- ...
列表还在继续...但我想你明白这会导致什么。目前有90期未决问题...一个无尽的故事。
开发与资源
服务器和存储等资源很便宜。真的很便宜...与开发时间相比。
我是一名自由职业者,收取相当普遍的费率。你可以得到2-3天的时间...或者一堆计算能力和存储!
在选择框架时,您还选择了用于快速开发的工具包 - 这是您对抗从未完全满足的,功能蔓延的客户的战斗武器......他会为他的愿望付给你好钱。
作为代理商(或自由职业者),您希望在短时间内构建功能丰富的应用程序。您将面临陷入困境的点...也许是与性能相关的问题。但是,您还面临着开发成本和时间。
什么会更贵?其他服务器还是其他开发人员?