javascript最新版本_JavaScript 引擎「V8」发布 8.0 版本,内存占用量大幅下降
上周,JavaScript 引擎「V8」的开发团队在该项目官方网站上正式宣布推出最新的 8.0 版本。这次更新的重点主要集中在错误修复及性能改善上,正式的版本将在数周后随着谷歌 Chrome 80 稳定版一起发布。
V8 是谷歌公司推出的开源高性能 JavaScript 引擎,主要用于提升 Web 浏览器内部 JavaScript 脚本执行的性能。V8 通过 C++ 语言编写,主要用在 Chrome 浏览器以及 Node.js 上,实现了对 ECMAScript 与 WebAssembly 的支持,可运行于 Windows 7、macOS 10.12 以及使用 x64、IA-32、ARM、MIPS 处理器的 Linux 系统,或更新版本的操作系统环境下。V8 既可以单独运行,也能够内嵌到任何基于 C++ 的应用中。V8 项目开发至今已拥有超过 11 年的历史。
性能
指针压缩
V8 引擎的这次更新,对内存占用量与速度都进行了优化。V8 堆包含了很多东西,例如浮点值、字符串字符、编译代码以及标定值,开发团队发现这些标记值占据了堆的很大一部分空间。
标定值与系统指针一样大,32 位宽度对应 32 位架构,64 位宽度对应 64 位架构。当开发团队对比 32 位版本与 64 位版本时发现,每个标记值使用了两倍的堆内存。
因为高位可以由低位合成,所以只需要将唯一的低位存储到堆中就能实现降低内存的占用量,平均可节省 40% 堆内存,这一方法被称为「指针压缩」。
通常情况下,在优化内存占用的同时也会牺牲部分性能,但经过这一改进之后,在 V8 及其垃圾收集器中却出现了真实网站的性能提升。
优化高阶内建
在优化高阶内建上,新版本解除了 TurboFan 优化流程中的一处限制,这处限制使高阶内建无法得到优化。
const charCodeAt = Function.prototype.call.bind(String.prototype.charCodeAt);charCodeAt(string, 8);
到目前为止,对 charCodeAt 的调用对 TurboFan 来说是完全不透明的,从而引发了对用户定义函数通用调用。通过这一改变,现在可以识别出实际上是在调用内置 String.prototype.charCodeAt 函数,从而能够触发 TurboFan 库中的进一步优化来改善对内建的调用,进而获得与以下相同的性能:
string.charCodeAt(8);
这一变化也会影响到其他一些内建,比如 Function.prototype.apply、Reflect.apply,以及很多其他的高阶数组内建。
JavaScript
新版本在 JavaScript 方面出现了两个新特性 ── 可选链和 null 判断合并。
可选链
在编写属性访问链时,程序员经常需要检查中间值是否为空。没有经过错误检查的链可能会扔出,而经过了明确的错误检查的链是冗长的,并且会产生不必要的结果,即检查所有的真实值,而不是只检查非空值。
// Error prone-version, could throw.const nameLength = db.user.name.length;// Less error-prone, but harder to read.let nameLength;if (db && db.user && db.user.name) nameLength = db.user.name.length;
可选链(?.)允许程序员编写更精炼、鲁棒性更强的属性访问链,检查中间值是否为空。如果中间值为空,则整个表达式的计算结果为未定义的。
// Still checks for errors and is much more readable.const nameLength = db?.user?.name?.length;
除了静态属性访问外,动态属性访问和调用也能得到支持。
null 合并
null 合并操作符 ?? 是一个新的用于处理默认值的短路二进制操作符。目前,默认值有时由逻辑 || 操作符处理,如下所示:
function Component(props) { const enable = props.enabled || true; // …}
对 || 的使用,并不适合计算默认值,因为当 a 为非真时 a || b 的结果为 b。如果 props.enabled 明确被设置为假,那么 enable 仍然为真。
通过 null 合并操作符,当 a 为空时,a ?? b 的结果为 b,否则结果为 a。这是理想的默认值行为,并使用 ?? 修正了之前提到的错误。
function Component(props) { const enable = props.enabled ?? true; // …}
null 合并操作符与可选链是相伴而生的特性,可协同工作。当没有任何 props 参数传入时,它们可以对示例进行进一步修改以作为应对。
function Component(props) { const enable = props?.enabled ?? true; // …}
V8 应用程序接口
请通过「git log branch-heads/7.9.. ..branch-heads/8.0 include/v8.h」指令来获得接口变化列表。
开发人员目前可通过指令「git checkout -b 8.0 -t branch-heads/8.0」来体验 V8 引擎 8.0 版本中的新特性。
SegmentFault 思否编辑部编译。
javascript最新版本_JavaScript 引擎「V8」发布 8.0 版本,内存占用量大幅下降相关推荐
- 「biáng biáng 面」马上可以打出来了!Unicode发布13.0版本,收录4939个生僻字
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 有一种面条,很多人吃过,但 ...
- 开源微服务运行时 Dapr 发布 1.0 版本
作者 | Dapr 社区 译者 | 敖小剑 来源|阿里巴巴云原生公众号 Dapr 是 2019 年 10 月开源的分布式运行时.早在 Dapr 开源初期,阿里云就开始参与 Dapr 社区建设和代码开发 ...
- 路遥工具箱全面迁移至 .NET 6.0 并发布 3.0 版本及迁移记录详解
随着 .NET 6.0 的发布 NewLife 组件也进行了升级,并在 2022 年 1 月份全面停止了对 .NET Framework 的支持框架依赖升级至 .NET Standard 2.1 . ...
- Rust即将发布1.0版本,Go持续获得关注:如何在新生语言之间做出抉择
没有什么比谈论一门新语言能够让程序员更加兴奋.更加固执己见的了.作为两枚冉冉升起的新星,Go和Rust让我们置身在这场旋窝之中.作为灵感相似但是动机与目标完全不同的两门语言,Go和Rust可谓都是出身 ...
- CAP 发布 5.0 版本正式发布
前言 今天,我们很高兴宣布 CAP 发布 5.0 版本正式版.同时我们也很高兴的告诉你 CAP 已经有越来越多的用户并且变得越来越流行. 在 5.0 版本中,我们主要致力于更好的支持 .NET 5 以 ...
- harmonyos pc,华为鸿蒙系统(HarmonyOS)9月11日发布2.0版本将打通PC、手表和车机等产品终...
原标题:华为鸿蒙系统(HarmonyOS)9月11日发布2.0版本将打通PC.手表和车机等产品终 据国内媒体报道,华为鸿蒙系统(HarmonyOS)将于今年9月11日举行的华为开发者大会上发布2.0版 ...
- 详解 Chrome 「V8 」引擎,让你更懂JavaScript !
今天来聊聊 V8,它的主要职责是用来执行 JavaScript 代码的.在正式全面了解 V8 之前,先来了解下「JavaScript 的基本特性和设计思想」. 1.JavaScript 的基本特性和设 ...
- 最新华为鸿蒙手机,「连接」万物的鸿蒙,能拯救华为手机吗?
在曝光两年之后,华为的鸿蒙系统终于正式和用户见面了. 6 月 2 日,华为鸿蒙操作系统及华为全场景新品发布会开启,正式推出 HarmonyOS 2.0,并发布了多款搭载鸿蒙 2.0 的新品.这也意味着 ...
- Android 解锁app,应用锁「AppLock」v3.3.0 for Android 完美解锁版
摘要 一款可以有效保护您应用.图片.视频等隐私的应用 随着我们的手机越来越智能,我们的隐私也同样一一的都储存在了里面,于是隐私安全就成为了重中之重的大事.恩!您可以考虑试试今天这款应用锁「AppLoc ...
最新文章
- GitHub 遭抵制!AI 代码生成神器竟成“抄袭工具”?
- os.path.join
- 【openCV学习笔记】在Mac上配置openCV步骤详解
- JavaScript 实现块级作用域
- NS2安装笔记---SUSE Linux
- .net 后台 下载 图片_特殊的 “图片软件” !
- 创建python虚拟环境
- SharePoint2010部署(一)---数据库的安装
- JAVA 集合Null 初始化_springboot使用mybatis-plus表单更新null值问题通用解决方案
- Spark Client启动原理探索
- 解决华为手机Android系统10.0不能隐藏桌面图标问题,全网唯一
- win 64 安装 sql server 2000、出现挂起 解决
- Zabbix proxy
- gnuradio+b210实现FM收音机
- C/C++ GBK2312转Unicode
- oppor829t如何刷机_oppo R829t (R1 移动版)一键救砖教程,轻松刷回官方系统
- 2021年自动化预推免面试经历记录与总结--持续更新
- 计算机与汽车智能信息化管理,谈计算机控制系统在汽车行业的应用
- [OpenCv]简单摄像头监控Demo
- Android切面编程(AOP)详解
热门文章
- drupal显示图片_Drupal在多样性和包容性方面显示领导力
- opensource项目_最佳Opensource.com:编程
- blender使用_使用Blender准备骨科手术
- 字扩展,位扩展,和字位扩展_6个有用的LibreOffice扩展
- 第二十三章:准备原材料
- Bootstrap列表组禁用和活动状态
- 客户端脚本selectivizr,PIE,Respond.js
- es6 SharedArrayBuffer对象
- 四.因子图优化学习---对因子图优化的粗浅理解
- matlab ga函数,matlab遗传算法ga函数