- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaScript类型静态化探索
金一华 yihua.jyh@A
个人介绍
金一华 阿里巴巴 Yunos操作系统事业部 虚拟机组
2006 复旦大学软件学院 学士
2006~2016 Intel亚太研发有限公司 动态编译部门
安腾Linux X86-Itanium 二进制动态编译器
X86安卓 ARM-X86 应用二进制动态转化层
Intel 期间专利:7
Yunos
Yunos应用编程语言-JavaScript
问题
JavaScript是一种动态类型语言
类型的可变性导致解释器/编译器无法高效运行/编译JS代码
自定义对象支持成员类型可变
操作符支持基础类型多态
Client端应用启动的特性
大量的不同类型对象被构造。函数热点少,分布散
函数和构造函数的首次执行速度很重要
动态类型和静态类型
JavaScript class构造函数,无类型申明
Java class类型申明和构造函数
Javascript/Java 构造函数执行时间对比
Javascript/Java 构造函数执行时间对比
第3次之后构造函数的执行速度:JavaScript(v8)已经靠近Java(openjdk)
JavaScript构造函数执行时间特点
首次运行时包含编译时间,总耗时最长
从编译后的函数运行时间来看,第二次执行耗时最长
第三次之后速度接近Java
*Java(openjdk-8)首次执行构造函数耗时有待调研
JavaScript(v8)构造函数首次执行耗时原因
原因1:
构造函数的每一步执行都相当于创建一个类型的对象,都要有对应的map结构来描述该对象。
首次执行构造函数要创建各个对象对应的map结构
JavaScript(v8)构造函数2次执行耗时原因
原因2:
在第一次执行构造函数创建好map结构之后,第二次执行构造函数时,v8会比较当前对象的map和缓存的上次执行到统一代码位置时的map。如果比对成功,则动态编译出根据offset快速访问对象成员的handler-x和handler-y。
所以第三次之后执行,map对比命中并可直接执行handler-x和handler-y来赋值this.x和this.y。
类型: Typescript
a.ts
a.js
TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程
Typescript语言通过tsc编译器编译为javascript语言后再在Javascript虚拟机(如v8)上执行
JavaScript虚拟机目前并不支持Typescript语言
类型静态化的探索
a.ts
Enhanced V8 frontend optimized for typescript(subset)
通过增强V8前端parser识别typescript类型定义,我们可以让v8直接产生优化后的对象构造方式:即对象map只产生最终形态的一个版本;成员函数的快速访问handler也在首次运行时编译产生。这可使得V8在第2次执行构造函数时即可得到3次后的执行速度
如果可以offline预编译ts代码(针对nodejs等代码在本地的运行环境),则首次执行时间也可被优化
更多的Javascript VM方向的探索
更完善的Javascript类型静态化系统(more than class annotatoin)
联合Intel关于JavaScript多线程探索 (based on webworker spec)
适用于低端设备的轻量级的JavaScript VM探索
更好的JavaScript编程体验和工具
……
打造Javascript成为轻量级,高效,
适合智能终端的Yunos框架和应用开发语言
希望更多来自虚拟机/编译器/操作系统
领域的同学朋友加入我们
文档评论(0)