文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现。

网页性能是一个丰富且又复杂的话题。在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言,使用当前的框架会如何影响您的应用程序的性能。我们会特别关注两点:

(1)某种框架要使用多长的时间来更新用户界面

(2)为了让框架正常工作,下载和解析所需要的软件包所花费的时间

在过去几年中,我所使用的这些数据一直来源于 Stefan Krause 的 js-framework-benchmark。资源很好,但也有点复杂了。仅关注部分结果应该会更简单一些,而本文中我们也正是这样做的。建议您看看 Stefan 所构建的工具,自己先深入了解一下这些数据,尤其是如果下面的图片中没有你最钟意的框架的话。这些资源可以从 Stefan 的网站上获取(他已测试过 40 多个框架)。

另外需要注意的是:

这些只是初步的统计结果,使用时需谨慎(比如,它们可能来自不同的浏览器版本)。

请留意这个问题。

窥探数字

第一组要关注的结果是每一种框架需要多长的时间在一个大型表格上进行各种操作,例如创建行,删除行等等。重要的一点是,这些是有键框架的数据结果。以下是来自 Stefan 站点的解释:

有键的实现通过设定键值在域数据和 dom 元素之间创建了某种关联。如果数据变更了,与该键关联的 dom 元素也会被更新。因此,往数据列表里增添或删除元素会导致 dom 发生相应的变化。

在下图中,越大的数字表示框架执行任务越慢。表格底部的“减速几何平均“是一项总的性能指标,从左至右,依次表明了各个框架的评级。最左端是 vanillajs ,表示无框架的实现,做为一个参考点。

如您所见,这里我囊括了大部分流行的前端框架,以及一些不太有名,但是非常有趣的框架。 Preact (一个非常流行的框架)和 Inferno 具有与 React 非常类似的应用编程接口(API),所 以我也将他们包含了进来。如果你的团队正在使用 React 搭建对性能要求很高的应用,那他们或许是不错的选择。另外要注意的是,有键框架得出的结果通常会比较慢一些,因为框架要完成更多的任务。

在这些最流行的框架中,Vue 看起来相当出色。Angular 和 React 都是显著偏慢的框架,两者给出的性能数据也相差无几。Inferno 的库是其中的佼佼者。作为题外话,Inferno 的作者 Dominic Gannaway 新近被 Facebook 聘用,参与到 React 团队中。

现在来看一些无键框架的统计结果:

需要注意几点。首先,这里列出的框架数量要少一些,因为并非每一种框架都有无键的结果。最快的要数 Svelte,这种框架很有趣,采用不同的方式实现,你也应该对其一探究竟。

在开始后续的话题之前,如果不提一提高居榜首的 Surplus (由 Adam Haile 开发),那未免显得有些失职。它在有键和无键的测试结果中都脱颖而出。另外,还有其他一些表现优异的框架包括 petit-dom 和 dio ,我没有将它们列在上面是因为我想用更多的篇幅讨论最受欢迎的那些库和框架。如果你查看结果统计表,你很快会被这庞大的统计数据搞得沉重不堪。因此对其做一些修正,让事情变得可控,以更好地达到我们的目的。

启动指标

之前的结果关注完全加载页面以及在大型表格上执行操作时框架的执行速度。下面的一组数据则是从另一个不同的视角来衡量框架的性能——下载,解析和编译所耗费的时间。

这些统计值可以告诉我们,用户需要等待多长的时间后加载的页面才能开始正常工作。通常来讲,要下载的 JavaScript 越多,浏览器需要解析和编译的代码量越大,所需要的时间就越长。

同样的,这些统计结果也是分为有键的和无键的。我们先来看看有键的统计结果:

这些用于评级的指标值并不能很方便地说明问题,但通常而言,绿色代表较好,红色代表逊色。同样地, Inferno 表现优异,Svelte 和 Preact 也相当出色。在这些最受欢迎的框架中,Vue 表现最好,而 Ember 则垫底榜单,落后于其他的对手。

现在来看看无键的统计结果:

在这一组中,Svelte 表现得非常快速且轻量级。其 total byte weight 值甚至比纯 vanilla JavaScript 还低。我告诉过你,这是一种非常有趣的框架,没错吧!

后续思考

一个月前,在读了 Addy Osmani 所著的 The Cost of JavaScript 一书后,我脑海里便萌生了撰写该文的念头。他分享的一张图表给了我启示。该图展示了在不同的移动设备上,一个 250KB 用 gzip 压缩的(未解压缩时为 1MB ) JavaScript 包需要花费多长时间完成解析。图中特别标出了平均设备的统计值,如下所示:

前端的 JavaScript 框架是一项引人关注的工程技术。它们很复杂,且不容易做好。针对特定的项目使用哪一种框架常常也很难抉择,其中有许多需要权衡的因素。例如,像 React 这样的框架具有一个大型的生态系统,通过提供许多第三方的库和丰富的培训资料,以及其他一些优势,可以加速你的项目进度。但如果你的项目是针对 2G 网络用户的,React 还会是最佳的选择吗?答案也许是否定的。

判断哪一种框架会工作得最好最终都取决于项目需求,以及构建项目的团队。希望本文所展示的结果能够给读者的思考带来一些源泉。

Browser Insight 是一个基于真实用户的 Web 前端性能监控平台,能够帮大家定位网站性能瓶颈,网站加速效果可视化;支持浏览器、微信、App 浏览 HTML 和 HTML5 页面。想阅读更多技术文章,请访问 OneAPM 官方技术博客

来源:http://blog.oneapm.com/apm-tech/806.html

OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测的更多相关文章

  1. 主流PHP框架性能评测 (引用)

    主要涉及到的框架有 CodeIgniter 老品牌易用性框架yaf 鸟哥用c写的php扩展,高性能框架yii 自动生成代码(gii)laravel 号称最优雅的框架swoole framework 支 ...

  2. TechEmpower 21轮Web框架 性能评测 -- C# 的性能 和 Rust、C++并驾齐驱

    自从2021年2月第20轮公布的测试以后,一年半后 的2022年7月19日 发布了 TechEmpower 21轮测试报告:Round 21 results - TechEmpower Framewo ...

  3. 开源RPC(gRPC/Thrift)框架性能评测

    海量互联网业务系统只能依赖分布式架构来解决,而分布式开发的基石则是RPC:本文主要针对两个开源的RPC框架(gRPC. Apache Thrift),以及配合GoLang.C++两个开发语言进行性能对 ...

  4. TensorRT 3:更快的TensorFlow推理和Volta支持

    TensorRT 3:更快的TensorFlow推理和Volta支持 TensorRT 3: Faster TensorFlow Inference and Volta Support 英伟达Tens ...

  5. OneAPM大讲堂 | 提高JavaScript性能的30个技巧

    文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 您是网站管理员还是网页开发人员?想创建超快速的网站吗? 今天我们来看看 JavaScript,这项神奇而又复杂的技术.它使网站内容 ...

  6. Quick UDP Internet Connections 让互联网更快的协议,QUIC在腾讯的实践及性能优化

    https://mp.weixin.qq.com/s/44ysXnVBUq_nJByMyX9n5A 让互联网更快:通往QUIC之路 原创: 史天 翻译 云技术实践 8月15日 QUIC(Quick U ...

  7. 更轻更快的Vue.js 2.0与其他框架对比(转)

    更轻更快的Vue.js 2.0 崭露头角的JavaScript框架Vue.js 2.0版本已经发布,在狂热的JavaScript世界里带来了让人耳目一新的变化. Vue创建者尤雨溪称,Vue 2.0  ...

  8. 更快学习 JavaScript 的 6 个思维技巧

    更快学习 JavaScript 的 6 个思维技巧 我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前: 有些概念可能会造成混淆,尤其当你是从其他语言转过来的时候 ...

  9. 让DB2跑得更快——DB2内部解析与性能优化

    让DB2跑得更快——DB2内部解析与性能优化 (DB2数据库领域的精彩强音,DB2技巧精髓的热心分享,资深数据库专家牛新庄.干毅民.成孜论.唐志刚联袂推荐!)  洪烨著 2013年10月出版 定价:7 ...

随机推荐

  1. app自动化测试之实战应用(魅族计算器)

    模拟魅族计算器加法计算: from appium import webdriver desired_caps = {} desired_caps['deviceName'] = '621QECQ23D ...

  2. textarea 赋值的方法

    textarea 赋值的方法 <textarea name="" rows="3" id="note21" ></text ...

  3. 第二章 微服务构建:Spring Boot

    此处介绍Spring Boot的目的除了它是Spring Cloud的基础外,也由于其自身的各项优点,如自动化配置.快速开发.轻松部署等,非常适合用作微服务架构中各项具体微服务的开发框架. 本章内容: ...

  4. dart之旅(二)- 内建类型

    目录 number 类型 字符串 布尔类型 像大多数语言一样,dart 也提供了 number,string,boolean 等类型,包括以下几种: numbers strings booleans ...

  5. 带分页功能的SSH整合,DAO层经典封装

    任何一个封装讲究的是,使用,多状态.Action:     任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...

  6. Linux下rsync daemon模式下的错误汇总

    一.前言:最近学习服务环境搭建,遇到了许多大大小小的问题,不过还好,经过我的一通努力终于都解决了,所以分享出来给自己留个纪念,同时也希望能帮助学习中的朋友. 二.环境:两台服务器环境相同 1 [roo ...

  7. lua脚本在游戏中的应用

    为什么要在游戏中使用脚本语言? 要解释这个问题首先我们先来了解一下脚本语言的特性: 学习门槛低,快速上手 开发成本低,可维护性强 动态语言,灵活性高 相对于C/C++这类高复杂性.高风险的编译型语言来 ...

  8. js节流函数和js防止重复提交的N种方法

    应用情景 经典使用情景:js的一些事件,比如:onresize.scroll.mousemove.mousehover等: 还比如:手抖.手误.服务器没有响应之前的重复点击: 这些都是没有意义的,重复 ...

  9. 初学javaScript推荐工具

    对于刚开始学习js的同学,强烈推荐直接使用chrome developer mode,超级方便. 随便打开一个网页,开启开发者模式即可写js代码,不用新建html和js文件即可看到自己写的js代码的结 ...

  10. 【微收藏】FourShadows.js – 时间感知的算法驱动的图标阴影JS库

    废话一箩筐,筐筐有心得 不小心养成了一个刷微博的习惯,主要还是关注一些前端人士,学习一些前端方面的知识,看到大家都有一些刷微博的小习惯.有的是转发一下,转发内容来一个标记(MARK).也有评论中标记为 ...