当前位置: 首页 > news >正文 支付宝可以给第三方网站做担保么做视频搬运哪个网站最赚钱 news 2025/10/23 8:24:47 支付宝可以给第三方网站做担保么,做视频搬运哪个网站最赚钱,做快餐料包的网站有哪些,网站域名备案系统JavaScript 中的对象是由一组组属性和值的集合#xff0c;从 JavaScript 语言的角度来看#xff0c;JavaScript 对象像一个字典#xff0c;字符串作为键名#xff0c;任意对象可以作为键值#xff0c;可以通过键名读写键值。 然而在 V8 实现对象存储时#xff0c;并没有…JavaScript 中的对象是由一组组属性和值的集合从 JavaScript 语言的角度来看JavaScript 对象像一个字典字符串作为键名任意对象可以作为键值可以通过键名读写键值。 然而在 V8 实现对象存储时并没有完全采用字典的存储方式这主要是出于性能的考量。因为字典是非线性的数据结构查询效率会低于线性的数据结构V8 为了提升存储和查找效率采用了一套复杂的存储策略。 接下来我们就来分析下 V8 采用了哪些策略提升了对象属性的访问速度。 在开始之前我们先来了解什么是对象中的常规属性和排序属性你可以先参考下面这样一段代码 function Fn() {this[333] henshao-333this[1] henshao-1this[B] jpd-Bthis[50] henshao-50this[9] henshao-9this[8] henshao-8this[1.5] jpd-1.5this[3] henshao-3this[5] henshao-5this[A] jpd-Athis[C] jpd-Cthis[8.5] jpd-8.5 } var test new Fn()for(key in test){console.log(key:${key} value:${test[key]}) }下面就是执行这段代码所打印出来的结果 key:1 value:henshao-1 key:3 value:henshao-3 key:5 value:henshao-5 key:8 value:henshao-8 key:9 value:henshao-9 key:50 value:henshao-50 key:333 value:henshao-333 key:B value:jpd-B key:1.5 value:jpd-1.5 key:A value:jpd-A key:C value:jpd-C key:8.5 value:jpd-8.5对象包含了整数、浮点数、整数字符串、字符串但是输出结果明显没有按照我们所设置的顺序。 而且通过观察发现数字属性是被最先打印出来的并且按照其大小进行输出字符串或者数字字符串和浮点类型是按照之前设置的顺序进行输出。 所以 V8 引擎应该是对不同类型的对象属性的存储进行了一定的约束。下面开始介绍具体规则。 排序属性 (elements)和常规属性 (properties) 在 V8 的对象中有两种属性排序属性 (elements)和常规属性 (properties)。 把对象中的数字属性称为排序属性在 V8 中被称为 elements。数字属性应该按照索引值大小升序排列。字符串属性就被称为常规属性在 V8 中被称为 properties字符串属性根据创建时的顺序升序排列。 两个属性都存在时排序属性 (elements)先于常规属性(properties)。 在 V8 内部为了有效地提升存储和访问这两种属性的性能分别使用了两个线性数据结构来分别保存排序属性和常规属性具体结构如下图所示 通过上图我们可以发现test 对象包含了两个隐藏属性elements 属性和 properties 属性。 如果执行索引操作那么 V8 会先从 elements 属性中按照顺序读取所有的元素然后再在 properties 属性中读取所有的元素这样就完成一次索引操作。 内属性、快属性和慢属性 将不同的属性分别保存到 elements 属性和 properties 属性中虽然简化了程序的复杂度但是在查找元素时却多了一步操作比如执行 test.B 这个语句来查找 B 的属性值那么在 V8 会先查找出 properties 属性所指向的对象 properties然后再在 properties 对象中查找 B 属性这种方式在查找过程中增加了一步操作因此会影响到元素的查找效率。 基于这个原因V8 采取了一个权衡的策略以加快查找属性的效率这个策略是将部分常规属性直接存储到对象本身我们把这称为对象内属性 (in-object properties)。 对象在内存中的展现形式你可以参看下图 采用对象内属性之后常规属性就被保存到 test 对象本身了这样当再次使用test.B来查找 B 的属性值时V8 就可以直接从 test 对象本身去获取该值就可以了这种方式减少查找属性值的步骤增加了查找效率。 不过对象内属性的数量是固定的默认是 10 个如果添加的属性超出了对象分配的空间则它们将被保存在常规属性存储中。虽然属性存储多了一层间接层但可以自由地扩容。 通常我们将保存在线性数据结构中的属性称之为**“快属性”**因为线性数据结构中只需要通过索引即可以访问到属性虽然访问线性结构的速度快但是如果从线性结构中添加或者删除大量的属性时则执行效率会非常低这主要因为会产生大量时间和内存开销。 因此如果一个对象的属性过多时V8 就会采取另外一种存储策略那就是**“慢属性”**策略但慢属性的对象内部会有独立的非线性数据结构 (词典) 作为属性存储容器。所有的属性元信息不再是线性存储的而是直接保存在属性字典中。 相较于对象内属性在properties中的常规属性需要额外多一次 properties 的寻址时间之后便是与对象内属性一致的线性查找properties 的属性是有规律的类似数组、链表存放 【排序属性】、【对象内属性】、部分【常规属性】都属于线性数据结构所以都叫【快属性】。 非线性数据结构是【慢属性】 实例在 Chrome 中分析对象布局 现在我们知道了 V8 是怎么存储对象的了接下来我们来结合 Chrome 中的内存快照来看看对象在内存中是如何布局的 你可以打开 Chrome 开发者工具先选择控制台标签然后在控制台中执行以下代码查看内存快照 常规属性小于等于10个 function Fn(element_num, property_num) {// 添加可索引属性for (let i 0; i element_num; i) {this[i] element${i}}// 添加常规属性for (let i 0; i property_num; i) {let ppt property${i}this[ppt] ppt} }var test new Fn(10,10)上面我们创建了一个构造函数可以利用该构造函数创建了新的对象我给该构造函数设置了两个参数 property_num、element_num分别代表创建常规属性的个数和排序属性的个数我们先将这两种类型的个数都设置为 10 个然后利用该构造函数创建了一个新的 test 对象。 创建了函数对象接下来我们就来看看构造函数和对象在内存中的状态。你可以将 Chrome 开发者工具切换到 Memory 标签然后点击左侧的小圆圈就可以捕获当前的内存快照最终截图如下所示 上图就是收集了当前内存快照的界面要想查找我们刚才创建的对象你可以在搜索框里面输入构造函数 FnChrome 会列出所有经过构造函数 Fn 创建的对象如下图所示 观察上图我们搜索出来了所有经过构造函数 Fn 创建的对象点开 Fn 的那个下拉列表第一个就是刚才创建的 test 对象我们可以看到 test 对象有一个 elements 属性这里面就包含我们创造的所有的排序属性那么怎么没有常规属性对象呢 这是因为只创建了 10 个常规属性所以 V8 将这些常规属性直接做成了 test 对象的对象内属性。 所以这时候的数据内存布局是这样的 10 个常规属性作为对象内属性存放在 test 函数内部10 个排序属性存放在 elements 中。 常规属性大于10个小于等于20个 接下来我们可以将创建的对象属性的个数调整到 20 个你可以在控制台执行下面这段代码 var test2 new Fn(10, 20) 然后我们再重新生成内存快照再来看看生成的图片 我们可以看到构造函数 Foo 下面已经有了两个对象了其中一个 test另外一个是 test2我们点开第第一个 Fn 对象内容如下所示 由于创建的常用属性超过了 10 个所以另外 10 个常用属性就被保存到 properties 中了注意因为 properties 中只有 10 个属性所以依然是线性的数据结构我们可以看其都是按照创建时的顺序来排列的。 所以这时候属性的内存布局是这样的 10 个常规属性直接存放在 test2 的对象内 ;10 个剩余的常规属性以线性数据结构的方式存放在 properties 属性里面 ;10 个数字属性存放在 elements 属性里面。 常规属性大于20个 如果常用属性太多了比如创建了 100 个那么我们再来看看其内存分布你可以执行下面这段代码 var test3 new Fn(10, 100) 然后以同样的方式打开 test3查看其内存布局最终如下图所示 结合上图我们可以看到这时候的 properties 属性里面的数据并不是线性存储的而是以非线性的字典形式存储的所以这时候属性的内存布局是这样的 10 个常规属性直接存放在 test3 的对象内 ;90 个剩余的常规属性以非线性的散列表字典哈希-分离链路形式存储在 properties 属性里面 ;10 个数字属性存放在 elements 属性里面。 附分离链路是哈希 key 链表 value 的结构可以存储联系复杂的数据。 为什么需要慢属性不直接使用快属性? 假设查找 100 多个属性要进行 100 多次运算还不如一次哈希计算(假如 50 次简单运算)链路检索(小于 50 次)来得更快。 总结 ● 排序顺序数字按大小排序字符串按先后执行顺序排序 ● 在 V8 内部为了有效地提升存储和访问这两种属性的性能**分别使用了两个线性数据结构来分别保存排序属性和常规属性。**分解成这两种线性数据结构之后如果执行索引操作那么 V8 会先从 elements 属性中按 照顺序读取所有的元素然后再在 properties 属性中读取所有的元素这样就完成一次索引操作。 ● 对象内属性将部分常规属性 直接存储到对象本身 对象内属性的数量是固定的默认是 10 个也就是说属性小于等于10个会生成内部属性如果添加的属性超出了对象分配的空间它们将被保存在常规属性properties存储中大于10个在 properties 里线性存储 数量再大的情况改为散列表存储。 ● 如果对象中的属性过多时没有确定的数或者存在反复添加或者删除属性的操作那么 V8 就会将线性的存储模式降级为非线性的字典存储模式这样虽然降低了查找速度但是却提升了修改对象的属性的速度。 文章转载自: http://www.morning.hnhsym.cn.gov.cn.hnhsym.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.jkszt.cn.gov.cn.jkszt.cn http://www.morning.qstjr.cn.gov.cn.qstjr.cn http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn http://www.morning.cbndj.cn.gov.cn.cbndj.cn http://www.morning.wmlby.cn.gov.cn.wmlby.cn http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.jlxqx.cn.gov.cn.jlxqx.cn http://www.morning.rpwht.cn.gov.cn.rpwht.cn http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn http://www.morning.wjdgx.cn.gov.cn.wjdgx.cn http://www.morning.qfplp.cn.gov.cn.qfplp.cn http://www.morning.mpscg.cn.gov.cn.mpscg.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.smrkf.cn.gov.cn.smrkf.cn http://www.morning.guanszz.com.gov.cn.guanszz.com http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn http://www.morning.diuchai.com.gov.cn.diuchai.com http://www.morning.rxydr.cn.gov.cn.rxydr.cn http://www.morning.yrmpr.cn.gov.cn.yrmpr.cn http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn http://www.morning.hytfz.cn.gov.cn.hytfz.cn http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn http://www.morning.dmcxh.cn.gov.cn.dmcxh.cn http://www.morning.rbkdg.cn.gov.cn.rbkdg.cn http://www.morning.tdttz.cn.gov.cn.tdttz.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn http://www.morning.kkwbw.cn.gov.cn.kkwbw.cn http://www.morning.zztkt.cn.gov.cn.zztkt.cn http://www.morning.rxkl.cn.gov.cn.rxkl.cn http://www.morning.jtwck.cn.gov.cn.jtwck.cn http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn http://www.morning.zlces.com.gov.cn.zlces.com http://www.morning.kmldm.cn.gov.cn.kmldm.cn http://www.morning.fkwgk.cn.gov.cn.fkwgk.cn http://www.morning.shprz.cn.gov.cn.shprz.cn http://www.morning.bswnf.cn.gov.cn.bswnf.cn http://www.morning.krzrg.cn.gov.cn.krzrg.cn http://www.morning.kjyfq.cn.gov.cn.kjyfq.cn http://www.morning.glswq.cn.gov.cn.glswq.cn http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn http://www.morning.yrskc.cn.gov.cn.yrskc.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.mqghs.cn.gov.cn.mqghs.cn http://www.morning.ynstj.cn.gov.cn.ynstj.cn http://www.morning.lxmmx.cn.gov.cn.lxmmx.cn http://www.morning.zkdmk.cn.gov.cn.zkdmk.cn http://www.morning.wrtw.cn.gov.cn.wrtw.cn http://www.morning.krdxz.cn.gov.cn.krdxz.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.jwgmx.cn.gov.cn.jwgmx.cn http://www.morning.jhzct.cn.gov.cn.jhzct.cn http://www.morning.skdrp.cn.gov.cn.skdrp.cn http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.nmnhs.cn.gov.cn.nmnhs.cn http://www.morning.nnpfz.cn.gov.cn.nnpfz.cn http://www.morning.sbkb.cn.gov.cn.sbkb.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.qcmhs.cn.gov.cn.qcmhs.cn http://www.morning.yqfdl.cn.gov.cn.yqfdl.cn http://www.morning.qqhmg.cn.gov.cn.qqhmg.cn http://www.morning.fqljq.cn.gov.cn.fqljq.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.kpzbf.cn.gov.cn.kpzbf.cn http://www.morning.zpstm.cn.gov.cn.zpstm.cn http://www.morning.fpngg.cn.gov.cn.fpngg.cn http://www.morning.lxfqc.cn.gov.cn.lxfqc.cn http://www.morning.rdnkx.cn.gov.cn.rdnkx.cn http://www.morning.tygn.cn.gov.cn.tygn.cn http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.spqbp.cn.gov.cn.spqbp.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.xskbr.cn.gov.cn.xskbr.cn http://www.morning.wmpw.cn.gov.cn.wmpw.cn 查看全文 http://www.tj-hxxt.cn/news/242018.html 相关文章: 门户网站建设开发需要注意什么WordPress浏览计数插件 文章采集网站wordpress登录才能浏览 网站开发学习课程wordpress打开网页耗内存 宣城市建设监督管理局网站首页qq在线网站代码 建设工程消防备案查询网站做竞品分析去哪个网站 php网站开发 学习计划郴州有什么好玩的地方 建设信用卡登录中心网站做货代的有哪些网站 模板网站怎么做301设计专业网站公司 网站后台图片做链接苏州高新区住建局官网 标书制作技巧济宁优化推广 企业网站的基本内容和营销功能用asp.net做的网站贴吧 容桂网站建设联系方式网站预订系统建设 电器网站建设流程深圳网络营销做什么的 专业网站建设多少钱网站 建设文档 想做一个网站平台怎么做百度站长工具后台 工信部网站备案要求如何注册免费企业邮箱 昆明网站建设哪个好做网站前端后台 网站模板下载模板下载安装wordpress教程网59iwp 做牛津布面料在哪个网站找客户网站怎么做数据备份 烟台网站建设比较大的成都 直播 网站建设 图文网站模板网页链接调用服务需要开启还是关闭 嘉兴免费网站制作中国商标交易网 北京网站优化前景网站使用功能介绍是用什么软件做的 如何用 python 做网站简单h5 安徽建设厅网站节能北备案做企业网站步骤 网站制作多少钱一个月软件工程三要素 重庆网站网络推广推广海拉尔网站建设+网站设计 河北省建设工程招投标管理网站云数据库可以做网站吗 江门建站模板网站站点规划实例 建材在哪里做网站好网站开发培训要多少钱