我和我的同事正在选择一个 Web 框架来开发一个高流量的网站。我们真的很擅长 node.js + express
和 php + symfony2
.两者都是很棒的框架,但我们有点担心 Symfony2,因为它似乎比大多数 Web 框架都要好。
以下是证明这一点的基准:
http://www.techempower.com/benchmarks/
出于这个原因,我们可能会使用 node.js + express 但我仍然想知道为什么 Symfony2 在基准测试中表现如此糟糕。
请您参考如下方法:
最终归结为正确的缓存处理 ...
symfony 或 PHP 通常比其他语言或框架慢,因此为您提供了快速创建丰富、安全和可测试的 Web 应用程序的工具。
如果您使用像 这样的反向代理清漆 和 ESI (边缘包括)并最终提供您真正需要通过 symfony 更新的模板部分。您将拥有极快的体验。
此外,如果您使用像 这样的操作码缓存APC 和 优化数据库在现实世界的应用程序中,人类用户实际上不会注意到几毫秒的差异。
根据要求,我会更深入地研究,并为您提供更多需要考虑的事情。
缓存和性能
借助几乎免费的云服务(s3、ec2、gae 等)与负载均衡器、轻松配置(chef、puppet 等)以及所有这些时髦的东西,它变得简单且负担得起,即使对于小公司运行和管理大数据和/或高流量应用程序。
更多的存储意味着更多的缓存空间——更多的计算能力意味着更快的缓存预热。
如果人们谈论 php 或框架性能,你会经常听到的事情:
那么为什么这些网站没有完全崩溃呢?因为他们的缓存例程很聪明。
例如,你知道如果你写一个状态更新 facebook 会做什么吗?
它不会将它与您的所有状态更新直接保存到数据库表中,如果一个 friend 访问他的流,他所有 friend 的所有状态都会在被提供服务之前从数据库中获取。
facebook 将您的状态写入您所有 friend 的新闻流并开始加热他们的缓存。现在所有的流都准备好了,每当你的一个 friend 访问他的流时,他都会得到一个缓存版本;几乎不涉及代码执行。当缓存预热完成时,流只会显示您新创建的状态。我们在这里谈论的是女士...
这告诉我们什么?在现代高频应用程序中,几乎所有内容都是从缓存中提供的,用户不会注意到页面的实际计算时间是 1 毫秒还是 5 秒。
在“真实世界”场景中,最终用户将注意到框架之间的 req/sec 没有差异。即使使用像微缓存这样的简单东西,一旦您在hackernews 的登录页面上创建它,您的vps 托管博客就不会立即关闭。
最后,更重要的是……我的框架是否提供了工具、文档、教程和示例……以快速轻松地启动和运行整个过程。 symfony 对我有用!
如果您被卡住了……有多少人愿意并能够回答您与绩效相关的问题?
有多少现实世界的应用程序已经或将在不久的将来用这个框架创建?
你通过选择一个框架来选择一个社区!
......好吧,这就是它重要的部分......现在回到这些基准:)
基准和设置
在基准测试中所有这些 Shiny 的颜色和花哨的图表中,您很容易错过这样一个事实,即每个框架都只测试了一个设置(网络服务器、数据库……),而您可以为每个框架提供多种配置.
示例:除了使用 symfony2+doctrineORM+mysql,您还可以使用 symfony+doctrineODM+MongoDB。
MySQL ... MongoDB ... 关系数据库 ... NoSQL 数据库 ... ORM ... 微型 ORM ... 原始 SQL ... 在这些配置中都混在一起------> 苹果和橘子。
基准和优化
几乎所有基准测试的一个常见问题 - 即使是那些只比较 php 框架的基准测试 - 在网络上发现的以及那些“TechEmpower Web 框架基准测试”是 不平等优化 .
这些基准测试没有在这些框架上使用可能的(并且由经验丰富的开发人员众所周知的)优化……至少对于 symfony2 和他们的测试来说,这是事实。
关于他们最新测试中使用的 symfony2 设置的一些示例:
名单还在继续……但我想你明白这是领先的。 90 open issues现在......一个无尽的故事。
发展与资源
服务器和存储等资源很便宜。真的很便宜......与开发时间相比。
我是一名自由职业者,收取相当普遍的费用。你可以得到我 2-3 天的时间......或者大量的计算能力和存储!
在选择框架时,您也在选择一个快速开发的工具包——这是一种武器,用于对抗永远不会完全满意、功能爬行的客户......他们会为他的愿望付出高昂的代价。
作为机构(或自由职业者),您希望在短时间内构建功能丰富的应用程序。你会遇到一些问题,你会遇到一些问题……也许是与性能相关的问题。但是您也面临着开发成本和时间。
什么会更贵?额外的服务器或额外的开发人员?