如何对比不同语言/框架的性能?

1 投票
4 回答
675 浏览
提问于 2025-04-16 02:41

我想比较不同编程语言和/或同一种语言下不同框架的性能。这主要是针对用于网页开发的服务器端语言。我知道完全公平的比较是不可能的,但我希望尽量做到不偏不倚。以下是一些想法:

  • 简单的“你好,世界”页面
  • 对象初始化
  • 函数/方法调用
    • 方法的内容可以从空到很大不等
  • 文件访问(读和写)
  • 数据库访问

这些可以通过每秒请求数来测量,或者我可以用一个for循环多次执行测试。有些基准测试应该测量语言的开销(比如:空函数调用),而不是它们执行特定任务的速度。我会采取一些预防措施:

  • 测试会在同一台机器上进行,使用全新的安装,尽量减少后台进程。
  • 我会尽量按照官方推荐的方式设置服务器,不会进行任何优化。

我该如何改进这个方法呢?

4 个回答

2

不如看看一些现成的基准测试结果:

http://www.sellersrank.com/web-frameworks-benchmarking-results/

http://avnetlabs.com/php/php-framework-comparison-benchmarks

http://www.yiiframework.com/performance/

http://www.google.ru/search?q=php+benchmark+frameworks&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

不过如果你真的想知道哪个框架对你的项目更快,那你就得用那个框架写一个项目模型,然后进行测试。

3

在这个网站上,有很多很好的建议,还有各种编程语言的性能测试样本,大家可以去看看:http://shootout.alioth.debian.org/

C语言。

2

我做的事情是写了很多单元测试,这样你就可以测试不同的层。

比如说,写一个SOAP网络服务,使用PHP、Python和C#这三种语言。

再写一个REST网络服务,还是用这三种语言(这两个服务是一样的,只是访问方式不同)。这个服务至少应该能返回JSON和XML格式的数据。

用C#和Python写一些单元测试,充当客户端,测试REST服务的不同结果类型(XML/JSON)。这很重要,因为以后你可能需要测试哪种方式更好,通常来说,JSON解析起来会比XML快。

所以,REST和SOAP服务应该指向同一个控制器,这样可以简化你的工作。

这个控制器也需要测试,因为你可能需要在后面去掉它对测试的影响,不过,你也可以写测试来看看它访问数据库的速度。

我建议用一个数据库来做这个,除非你想评估不同的数据库,但对于网络测试,最好等到第二阶段再考虑这个。:)

最终你会得到很多测试,每个测试都需要能记录它实际运行的时间。

这样你就会有很多数字,然后可以开始分析,看看什么对你来说效果最好。

例如,我几年前做这个的时候发现,JSON比XML快,REST比SOAP快。

你可能会发现某些语言做某些事情特别困难,因此在这个过程中可以把它们排除掉。

写测试是简单的部分,从这些数字中得到有意义的答案才是更难的,因为你的偏见可能会影响你的分析,所以要小心。

我建议用一些真实的应用来做这个,这样工作就不会白费,只是重复而已。

撰写回答