今天的 JavaScript 已经无处不在了,以传统的方式使用 JavaScript,开发者可以在各种 Web 浏览器中创建 Web 应用;通过 Node.js,可以开发命令行工具与服务器等应用;而在桌面领域,通过基于 JavaScript 与 HTML、CSS 等 Web 技术的 Electron 框架可以构建跨平台桌面应用;React Native 则可以用来开发跨平台移动应用;此外,JavaScript 甚至可以在 IoT 设备上运行。
Ecma TC39 管理着 ECMAScript 生态的发展,它是当前 JavaScript 语言背后的标准,谷歌 V8 团队一直积极参与 JavaScript 相关标准化工作。
V8 是谷歌开源的 JavaScript 引擎(同时也是 WebAssembly 引擎),前面提到的 Chrom、Node.js 与 Electron 等平台都基于 V8。同时除了 Chrome,基于 Chromium 的一系列 Web 浏览器,如 Opera 与即将正式发布的 Microsoft Edge 在底层也基于 V8。
在前几天的 Google I/O 2019 上,V8 团队的 Mathias Bynens 与 Sathya Gunasekaran 分享了 JavaScript 的最新研发进展。
V8 团队表示,他们的使命是要领导现代 JavaScript 与 WebAssembly 高性能,值得关注的是,分享者用了“real-world”描述性能,并介绍所谓“real-world performance”是与那些单纯为了 benchmark 数据的性能相对的,谷歌强调想要达到的是实际上在现实生活中能够做到高性能的效果,而不是那么“出世”。
他们举了几个例子。自 Chrome 61 以来,V8 团队将原始 JavaScript 解析速度提高了一倍,这些数据是在真实网站上测试得到的。同时他们已经成功从主线程中移除了 40% 的解析和编译工作,网页启动变得更加顺滑。
除了 Chrome,速度提升在 Node.js 中也有很明显的体现,Node.js 12 相比 Node.js 7,async 速度提升了 10 倍,Promise.all 速度提升了 12 倍。
解析速度与运行时性能提高之外,内存占用也减少了,Chrome 70 到 Chrome 76,Android 上运行实际 Web 应用的内存消耗减少了 20%。
接下来演讲者分享了 JavaScript 的一些新特性,涵盖内容很多,下边简单介绍几个比较有意思的特性:
使用方言口语化显示时间短语 API
这是众多新 Intl.* API 中的一种,也是观众讨论比较多的一个特性,Intl.* 是指国际化特性。
我们日常生活中提到时间的时候会说“上周”、“上个月”与“42 秒前”等口语,使用新的 Intl.RelativeTimeFormat() 函数,程序可以使用特定语言返回这些短语,而不是方方正正的“one week ago”、“one month ago”和“42 seconds ago”。
演讲者使用英语与泰米尔语演示了该功能,效果如下:
目前该功能支持秒、分钟、小时、天、周、月与季的短语表示,并且支持多种语言(不清楚有没有中文支持),开发者不再需要维护一个专门的相对时间短语列表。
globalThis
想要编写适用于不同平台的 JavaScript,不管是 Node.js 还是 Web 浏览器,都需要有相应的代码来适配全局“this”,比如 Web 浏览器,需要使用“window”来判断,但在“window”不可用的情况下,还需要用“self”检查,在 Node 中可以用“global”判断,但如果是独立的 JavaScript shell 环境,那情况又有变化。
环境因素很复杂,各种平台环境需要进行繁杂的适配过程,这对于开发者来说会很痛苦,所以 V8 团队新增了一个“globalThis”特性,它可以在不依赖环境的情况下,轻松访问全局“this”。
目前 Chrome、FireFox、Safari 与 Node.js 都已经支持该特性,同时对于 polyfill 与其它需要全局访问“this”的库也适用,从这一点来说该特性是一个比较大的改进。
WeakRef
通常 JavaScript 中对象引用意味着只要对对象进行了引用,那么它就不会被 GC,而弱引用中,如果其它对象都不再引用该对象,那么 GC 机制会自动回收该对象所占用的内存,不考虑该对象是否还在该引用的结构中。
目前 JavaScript 中有 WeakMap 与 WeakSet 两个弱引用方法,只要将对象添加到 WeakMap 或 WeakSet 中,GC 在触发条件时就可以将其占用内存回收。
WeakRef 是一种更加高级的 API,它提供了一个进入对象生命周期的窗口,可以解决 WeakMap 仅支持 object 类型作为 Key 的场景。
演讲者以缓存图像为例,map 会锁住图像的 Key 与 Value,这样图像名和图像数据就不会被 GC,因为它一直被引用着。另一方面,弱引用 WeakMap 在这里并不会起作用,因为图像名是一个字符串类型,而 WeakMap 规定其 Key 只能为 object 类型。
WeakRef 通过直接缓存图像对象的方法来解决这个问题,图像名作为 Key,WeakRef 弱引用作为 Value 存储在缓存中。但这会带来另一个问题:因为图像名是 Key,那 map 仍然会一直保留着这些图像名字符串。理想的情况是这些字符串也要被 GC。
WeakRef 的解决方案是引入一个新的 API “FinalizationGroup()”,注册一个回调函数,在 GC 触发时从缓存中删除前边提到的“残留的图像名字符串”。
除了这几点,新的 JavaScript 语言特性还包括:
- class fileds 可以直接在 class 中初始化变量而不用写在构造函数中
- 私有 setter 与 getter
- String.matchAll 可以进行正则多次匹配
- 提高数字可读性,numeric seperators 可以在写数字的时候使用“_”作为分隔符
- 新的大数字类型 BigInt
- 新增一些 Intl.* API,也就是用于国际化的 API,比如 Intl.NumberFormat 本地化格式化数字显示,Intl.RelativeTimeFormat() 与 Intl.DateTimeFormat() 本地化显示时间
- 顶级 await,无需写 async
- 新的 Promise 函数 Promise.allSettled() 与 Promise.any()
随着移动互联网的发展和越来越多创业公司的加入,Web前端工程师的岗位空缺越来越大,薪资迅速上涨。Web前端工程师比以往更具有号召力。
想要自学成为炙手可热的Web前端工程师?靠零碎化的短视频可不行,你需要更加对症下药的体系化好课程——
小编为想要自学成才的Web前端新星们献上一套完整的自学资料,包含了11个阶段全套的在视频资料,同时提供了视频和源代码的免费下载。从web前端到web移动端,从初识到精通,秉承尚学堂“体系化”“实战派”的理念,项目贯穿始终,让同学们一次学个过瘾!
请同学们赶紧将这个消息疯狂转发起来~
还给大家推荐最新技术:小程序
时下最火的小程序是如何实现的?
会将小程序从零开始到项目实现的完整过程教给大家,让同学们掌握小程序开发技术。
此视频教程核心知识点:
WEB基础-JavaScript-jQuery-Ajax-H5新特性-AngularJS-模块化-前端构建工具-React-Vue-小程序
第1阶段 WEB基础
1.了解WEB前端
2.HTML基础元素
3.Form表单
4.基础样式
5.盒子模型
6.浮动与定位
7.CSS3动画
8.雪碧图与滑动门
9.媒体查询
10.实战练习
第2阶段 JavaScript
1.JavaScript基础
2.JavaScript函数
3.JavaScript数组与对象
4.DOM基础
5.DOM深入
6.事件实例
7.JSON解析
8.面向对象
9.原型与原型链
10.BOM对象
第3阶段 jQuery
1.jQuery基础
2.jQuery常见方法
3.jQuery节点操作
4.jQuery实战练习
第4阶段 Ajax
1.PHP基础
2.PHP与MySQL
3.PDO对象
4.原生Ajax对象
5.封装Ajax对象
6.项目练习一
7.项目练习二
8.项目练习三
第5阶段 H5新特性
1.常用框架
2.移动端与REM
3.Canvas元素
4.H5新特性
第6阶段 AngularJS
1.Angular指令
2.Angular路由
3.Angular服务
4.Angular自定义服务器
5.Angular自定义指令
第7阶段 模块化
1.模块基础
2.Require
3.Require实战
第8阶段 前端构建工具
1.Webpack
2.Gulp
第9阶段 React
1.React基础
2.React环境搭建
3.React路由3.x
4.React路由4.x
5.React UI框架Antd
6.React网络请求Fetch
第10阶段 Vue
1.Vue基础
2.Vue网络请求
3.Vue路由
4.Vue UI框架Element-UI
5.Vue实战练习
第11阶段 小程序
1.小程序
真正掌握Web前端技术,学完这一套课程就够了!
零基础的同学完全消化此套视频,就已经能胜任Web前端工程师的岗位~
想全部视频一键打包下载?
动动你的手指,将这篇文章转发,让更多的人看到这个好消息,关注并私信小编“资料”会将下载链接发给你。So easy~
想成为Web前端工程师,请让我看到你们的热情~
好资源要记得分享,让更多的小伙伴看到。快勤快地转发起来
—— 部分下载视频截图 ——