【问题标题】:How can I benchmark different languages / frameworks?如何对不同的语言/框架进行基准测试?
【发布时间】:2026-01-25 20:55:01
【问题描述】:

我想比较同一语言中不同语言和/或不同框架的性能。这是针对用于 Web 开发的服务器端语言。我知道苹果与苹果之间的比较是不可能的,但我希望它尽可能公正。这里有一些想法:

  • 简单的“Hello World”页面
  • 对象初始化
  • 函数/方法调用
    • 方法体的范围从空到大
  • 文件访问(读写)
  • 数据库访问

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

  • 它们将在同一台机器上运行,在全新安装上运行,后台进程尽可能少。
  • 我会尝试按照官方建议设置服务器;我不会尝试任何优化。

我该如何改进?

【问题讨论】:

  • 您想了解或发现什么?您是否正在寻找最适合您需求的语言?
  • 您可以查看其他基准并解释您想要做什么他们没有做,或者他们做得不好,例如这个网站:timestretch.com/FractalBenchmark.html
  • @James 语言或框架有多快。是的,对你的第二个问题没有。性能本身并不意味着什么,但这是我想考虑的一个因素。
  • @NullUserException - 如何快速?例如,如果您将 Groovy 的脚本版本与 C 进行比较,这将是不公平的,因为需要先编译此 Groovy 代码。您是否正在关注科学计算的速度,它渲染 3D 图形的速度有多快?约束对于有意义的比较很重要。例如,如果我编写单元测试来查看客户端-服务器应用程序的最快语言组合,这是一组重点测试,对我很有用。
  • @James 这正是我想要避免的(不公平的比较)。我将比较用于 Web 开发的语言。

标签: php asp.net python frameworks benchmarking


【解决方案1】:

http://shootout.alioth.debian.org/ 有很多很好的建议(以及针对不同语言的大量示例基准测试)

C.

【讨论】:

    【解决方案2】:

    我所做的是编写了许多单元测试,以便您可以测试层。

    例如,用 PHP、Python 和 C# 编写一个 SOAP Web 服务。

    用相同的语言编写一个 REST Web 服务(相同的 Web 服务,只有两种获取方式)。这个至少应该能够返回 JSON 和 XML。

    使用 C# 和 Python 编写单元测试以充当客户端,并使用各种结果类型 (XML/JSON) 测试 REST。这一点很重要,因为稍后您可能需要测试哪个是最好的端到端,并且 JSON 可能比 XML 解析更快,对您来说(应该如此)。

    因此,REST/SOAP 服务应该使用同一个控制器,以简化您的生活。

    此控制器需要测试,因为您可能需要稍后消除它对测试的影响,但是,您也可以编写测试以查看它进入数据库的速度。

    我会为此使用一个数据库,除非您想评估各种数据库,但对于网络测试,只需在第 2 阶段执行此操作即可。:)

    因此,您最终会得到大量测试,每个测试都需要能够确定它实际运行所需的时间。

    然后你有很多数字,你可以开始分析,看看什么最适合你。

    例如,我了解到(几年前我这样做时)JSON 比 XML 快,REST 比 SOAP 快。

    您可能会发现在某些语言中有些事情更难完成,因此在您完成此过程时将它们从争用中删除。

    编写测试是容易的部分,从数字中获得有意义的答案将是困难的部分,因为您的偏见可能会影响您的分析,所以要小心。

    我会用一些真实的应用程序来做这件事,这样就不会浪费工作,只是重复。

    【讨论】:

      【解决方案3】:

      最好采用现有基准之一:

      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

      但是,如果您确实需要找出哪个框架对您的项目来说更快 - 您需要使用该框架编写您的项目模型并对其进行测试。

      【讨论】:

        【解决方案4】:

        您将花费大量时间并意识到这一切都被浪费了。
        完成测试后,您将了解到 1000000 次空迭代的循环与现实生活相去甚远,因此来到 apache 基准测试。
        那么您就不知道操作码缓存器会破坏您之前的所有结果。
        然后你会发现单个数据库查询比API调用要长1000倍,所以你比较数据库访问方法真的很浪费。
        然后您将了解 memcache,它可以让您跳过一些您已经发现的可怕瓶颈,等等等等

        【讨论】:

        • 缓存会有所帮助,但这并不是每个人都可以使用的选项。我还将使用缓存设置重新测试所有内容。
        • 我也不同意空迭代是无用的。他们测量开销是继承到语言本身。这是有趣的信息。
        • 他说得有道理。基准测试通常很少能说明真实世界的性能,尤其是因为 Web 应用程序通常涉及大量 IO,而 IO 性能主要与语言/框架无关。
        • @delnan - 你可以减去 IO 部分,但如果你有测试可以让你看到较低级别的影响是什么。