文章系国内领先的 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. HoloLens开发手记-硬件细节 Hardware Detail

    微软HoloLens是世界第一款完全无线缆的全息计算机.通过在新方式上赋予用户的全息体验,HoloLens重新定义了个人计算(Personal Computing).为了将3D全息图形固定到你周围的真 ...

  2. vue 自动化部署 jenkins 篇

    前端项目打包部署,以前都是手工运行打包命令,打包结束后压缩,然后上传到服务器上解压部署.这种重复性的工作,确实有点让人烦,而且效率也不高. 本文基于 vue 的前端项目. GitHub 的代码仓库,简 ...

  3. [EXP]phpBB 3.2.3 - Remote Code Execution

    // All greets goes to RIPS Tech // Run this JS on Attachment Settings ACP page var plupload_salt = ' ...

  4. centos6.6 安装adb环境

    a.安装JDK环境 centos linux JAVA(openjdk)软件包名 1.java-1.7.0-openjdk (OpenJDK Runtime Environment) 2.java-1 ...

  5. 图形数据库Neo4j基本了解

    在深入学习图形数据库之前,首先理解属性图的基本概念.一个属性图是由顶点(Vertex),边(Edge),标签(Lable),关系类型和属性(Property)组成的有向图.顶点也称作节点(Node), ...

  6. 远程连接服务器或云数据库上的mysql服务 - 赖大大

    主要问题有两种: 1.mysql的权限问题. 2.服务器的防火墙和数据库的安全组没设好的问题. 1.权限问题: 首先登录上mysql mysql> use mysql;      #使用mysq ...

  7. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十九):服务消费(Ribbon、Feign)

    技术背景 上一篇教程中,我们利用Consul注册中心,实现了服务的注册和发现功能,这一篇我们来聊聊服务的调用.单体应用中,代码可以直接依赖,在代码中直接调用即可,但在微服务架构是分布式架构,服务都运行 ...

  8. iOS开发(3):tips提示 | 如何提示一行文字或一个图片

    我有一个需求:在点击或长按某个按钮时,显示提示,包括简单的文字提示,还有复杂一点的图片甚至是动态图的提示(可能还要加上文字),怎么实现呢? (1)文字tips 使用之前介绍的qmuikit里面的QMU ...

  9. MongoDB 系列文章

    MongoDB 系列文章 本文的内容是基于 MongoDB 4.0 的. 参考于 MongoDB 4.0 官方文档. 搭建 MongoDB从搭建到优化 MongoDB-副本集搭建与管理 管理 Mong ...

  10. mybatis教程2(配置文件)

    MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 propertie ...