2019 年 JavaScript 优化方向:下载和执行

2019 年 7 月 31 日

2019 年 JavaScript 优化方向:下载和执行

谷歌 Chrome 技术经理Addy Osmani最近介绍了 JavaScript 成本研究的最新成果。他认为,由于 JavaScript 解析和编译速度的改进,现在其主要开销则集中到不断增加的脚本下载和 CPU 执行时间上。


在《2018JavaScript成本》(Cost of JavaScript In 2018)一书中,Osmani 指出,如果一个交互式网站需要经常混合使用 CSS、JavaScript、图像和字体,那么“JavaScript 永远是开销最大的那一部分”。一个 170KB 大小的图像与同样大小的 JavaScript 脚本相比,虽然两者的下载时间相同,但前者的处理速度要比后者快得多,因为图像解码和绘制的速度比脚本解析、编译和执行的速度快得多。


事实上,JavaScript 的快速处理意味着更快地下载、解析、编译和执行脚本。


脚本下载时间主要由脚本大小和网络性能决定,而解析和编译时间则是由 JavaScript 引擎中使用的技术和设备性能(CPU 和内存性能)所决定。执行时间明显受到 CPU 的制约。


对于 V8 引擎,Osmani 提到了自 2018 年以来在解析/编译时间方面的改进


自Chrome 60以来,V8中的原始JavaScript解析速度提高了2倍。与此同时,由于Chrome中其他同时进行的优化工作,原始解析(和编译)成本变得不那么明显/突出。Chrome 61解析Facebook的JS所用的时间,现在可以让Chrome75同时解析Facebook的JS和6倍于Twitter的JS。


二进制AST提案,目前处于TC39进程的初始阶段(第一阶段)。该提案提供了 JavaScript 抽象语法树的二进制编码,旨在进一步提高解析性能。


Osmani 认为下载和执行时间是现在最需要关注的瓶颈。由于移动设备用户在整个互联网用户中所占的比例越来越大,执行和下载时间受到从低端到高端移动设备(设备性能差异非常大)的影响:热节流(thermal throttling)、不同的缓存大小、CPU、GPU 以及网络技术(2G 到 5G)等。


为了减少下载时间,Osmani 建议:


  • 最小化JavaScript包的体积,尤其是面向移动设备的JavaScript包。

  • 将大型捆绑包(超过50-100KB)拆分为更小的捆绑包,从而更好地利用HTTP/2多路复用功能。


Osmani 提到需要对移动设备特别对待:


在移动设备上,尤其是考虑到网络速度,你需要更少的运行时间,同时还要保持较低的内存使用率。


为了减少执行时间,Osmani 建议“避免那些使主线程忙碌的冗长任务,并且尽可能地提升页面交互的速度”。此外,开发人员应该避免使用很大的内联脚本(超过 1KB)。


完整的成本研究包括支撑数据(主要集中在 V8 引擎和 Chrome 浏览器)、图表以及实用建议。JavaScript 成本研究在2017年首次发表,并于2018年和 2019 年更新。


原文链接:


The Cost of JavaScript 2019: Improvement Opportunities Now Mostly in Download and Execution


2019 年 7 月 31 日 08:001629
用户头像

发布了 36 篇内容, 共 15.7 次阅读, 收获喜欢 54 次。

关注

评论

发布
暂无评论
发现更多内容

响应式编程简介之:Reactor

程序那些事

响应式编程 reactor Reactive 程序那些事 响应式系统

英特尔首批独显笔记本亮相,非凡S3x纵享轻薄新体验

intel001

我去!三面字节竟全败在Redis上,带薪摸鱼刷1949页进阶笔记

996小迁

Java redis 架构 面试 程序人生

25个小众的Java库

GuoYaxiang

Java 开发工具

手动造轮子——为Ocelot集成Nacos注册中心

yi念之间

nacos ASP.NET Core Ocelot

搭载设计师级独显英特尔Xe MAX,非凡S3x体验全能创作

intel001

蚂蚁金融推迟上市:互联网金融是否要遭遇滑铁卢

石头IT视角

阿里P8对Thread核心源码讲解

Java架构师迁哥

“十三五”收官,区块链赋能能源电力路在何方?

CECBC区块链专委会

区块链 电力 能源

DDIA 读书笔记(5)数据分区方案

莫黎

读书笔记

Flink 1.11 与 Hive 批流一体数仓实践

Apache Flink

flink 流计算 实时计算

训练营第三周作业

大脸猫

极客大学架构师训练营

互联网审判中区块链存证技术的应用进路

CECBC区块链专委会

互联网 电子存证

http请求中get和post方法的区别

测试人生路

HTTP post GET

Dubbo-go Server端开启服务过程

apache/dubbo-go

dubbo dubbo-go dubbogo

手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc

yi念之间

RPC ASP.NET Core

性能测试,简单的压测工具

garlic

极客大学架构师训练营

数字货币交易所开发技术,场外币币交易平台搭建app

WX13823153201

数字货币交易所开发

【性能优化】纳尼?内存又溢出了?!是时候总结一波了!!

冰河

性能优化 内存泄露 高并发 高性能 内存溢出

英特尔进军独显领域,第一批搭载锐炬®Xe MAX独显轻薄本已问世!

intel001

JVM真香系列:.java文件到.class文件

田维常

JVM

诈骗?通证项目方的危局

CECBC区块链专委会

区块链 法律

ViewportFrame demo

katichar

Android 一行代码接入扫码功能 (CameraX + zxing)

Java android kotlin zxing camera

Week 5学习总结

balsamspear

极客大学架构师训练营

【Knative系列】一文读懂 Knative Serving扩缩容的原理

Chumper

Serverless knative autoscaler kantive

全球首批搭载英特尔Xe MAX独显惊艳上市,非凡S3x尽显创作魅力

intel001

darknet A版安装

Dreamer

天源迪科受邀出席“第四届央企电商化采购发展高峰论坛"

DT极客

Week 5命题作业

balsamspear

极客大学架构师训练营

线上Java程序占用 CPU 过高,请说一下排查方法?

古时的风筝

Java JVM cpu 100%

2019 年 JavaScript 优化方向:下载和执行-InfoQ