javascript-为什么convertToFastObject函数可以使其快速运行?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-为什么convertToFastObject函数可以使其快速运行?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1709字,纯文字阅读大概需要3分钟。
内容图文
![javascript-为什么convertToFastObject函数可以使其快速运行?](/upload/InfoBanner/zyjiaocheng/694/93ee894dc951499b8190782bb5001acd.jpg)
我在1.0版本之后尝试了Dart SDK,并在Dart中编写了一个简单的hello-world程序.
然后,使用SDK工具,生成了JavaScript文件:helloworld.dart.js
我查看了输出js代码,发现有一个名为convertToFastObject的函数.
定义是:
function convertToFastObject(properties) {
function MyClass() {};
MyClass.prototype = properties;
new MyClass();
return properties;
}
用法代码如下:
A = convertToFastObject(A);
B = convertToFastObject(B);
我知道这段代码适用于各种浏览器,而不仅适用于Chromium / Chrome.
我不明白,为什么函数可以使Object更快?
解决方法:
这是Google V8引擎的速度优化.
可以肯定的是,此代码片段看起来很奇怪:它将属性分配为构造函数MyClass的原型,然后使用构造函数使用new MyClass()构建实例,然后返回属性.这很奇怪,因为1)属性从不改变,2)函数从不再使用MyClass或实例.
每当您看到这样的奇怪行为时,就可以确定这是速度优化.在这种情况下,速度是通过使用V8的“hidden class” optimization获得的.从closely-related section of the Dart source:
// Use the newly created object as prototype. In Chrome,
// this creates a hidden class for the object and makes
// sure it is fast to access.
在V8引擎中,为构造的对象提供了“隐藏的” C类,以表示其属性集.通过构造其原型为属性对象的对象,属性的属性值成为新实例的C隐藏类的一部分,从而提高了属性访问速度.
我相信默认情况下,V8中的所有对象都具有隐藏类,因此对这种技术的需求不是很明显.但是,通过证明it is possible for an object to lose its hidden class(并进入“慢速模式”或“词典模式”)并不能从优化中受益.当一个对象删除其属性之一或添加太多与任何其他对象的属性无关的属性时,V8会认为共享的隐藏类没有用,因为该对象没有其他相似的对象可与之共享其隐藏类.这个convertToFastObject函数可以将“慢速模式”对象的权限重新用作隐藏类的权限,方法是将其用作新建实例的原型.
由不同的Dart优化引起的相关隐藏类问题:What is this generated code supposed (intended) to do?
内容总结
以上是互联网集市为您收集整理的javascript-为什么convertToFastObject函数可以使其快速运行?全部内容,希望文章能够帮你解决javascript-为什么convertToFastObject函数可以使其快速运行?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。