Dart与Node.js:比较HTTP服务器实现的性能


祝大家有美好的一天!


今年,随着Flutter (用于跨平台应用程序开发的框架)的发布,Dart语言的炒作有所增加。 像任何完美主义者 拖延无聊的懒惰 我考虑过将Dart虚拟机的服务器实现的性能与其潜在的对手(Node.js)进行比较。 我必须马上说,在我心中寄希望于Dart获胜的希望,在接下来的三个五年中,我将获得圣杯,这使我比潜在的竞争对手更具优势,但现实却有所不同...


工具包


  • 测试机器:Core I7,SSD,12GB RAM(由我以前的雇主提供)
  • 负载测试:k6.io(顺便说一下,该框架在其体系结构中非常有趣)

应用代码的组织


源代码


然后,我特别决定不去打扰,并决定遵循我一次在Habré上阅读的建议。 特别是:


  • 添加了有效负载作为生成随机数据的工作(随机数据以消除潜在的结果缓存)

class Human { constructor (id, name, surname, age, gender) { this.id = id this.name = name this.surname = surname this.age = age this.gender = gender } } 

  • Dart和Node.js都使用了同步和异步请求处理选项。
  • 使用过的本机解决方案和行业框架上的解决方案(用于dart的渡槽和用于node.js的Express)
  • 由于该研究在使用在每个核心上运行隔离的渡槽时设法大大提高了Dart的速度,因此我将集群模块用于node.js进行平衡

测试方法


  • 以每秒给定数量的请求(500,750)运行负载测试,并限制测试迭代的数量(已完成请求的数量)
  • 应用程序和测试框架都在同一台机器上运行,因此您应该了解所有结果都是相对的,只能相互比较

结果


原生飞镖


500 rps



750 rps


  • http_reqs:309.10154 / s

Dart渡槽框架


500 rps



750 rps



本机node.js


500 rps



750 rps



具有集群的Node Express


500 rps



750 rps



结论


  • 当然,很大程度上取决于您如何实现应用程序逻辑,我不确定在dart和node.js情况下我的代码是否都是最佳的
    • 特别是,生成数组的功能可以显示在具有异步输出的单独工作流中,在我的情况下,它没有实现,因此,此处未使用整个异步mosh
    • 在Dart和Node.js中,输出都可以通过流进行组织
    • 因此,性能研究和优化仍有很大的空间。
  • Dart在处理程序的本机实现中显示了一个史诗文件,但是,当通过框架实现时,它显示了令人印象深刻的结果,根据该结果,Dart虚拟机现在可以与Node.js竞争
  • 据我所知,在优化V8上已经投入了大量的工时,我非常确定在Dart虚拟机上投入的时间会更少。 因此,第二个可能有足够大的潜力在V8之前进行优化

Source: https://habr.com/ru/post/zh-CN435014/


All Articles