Mat*_*ood 12 javascript arrays v8
我正在阅读关于HTML5Rocks上的 V8的这篇文章.这篇文章很老了,但我几乎一无所知,这让我很烦恼.我一次采取这一步,但有人可以帮助我使用阵列部分吗?
文章指出:
数组
为了处理大型和稀疏数组,内部有两种类型的数组存储:
快速元素:紧凑型密钥集的线性存储
字典元素:否则为哈希表存储
最好不要让阵列存储从一种类型转换到另一种类型.
题:
将一个什么快速元素线性存储阵列是什么样子?
将一个什么字典元素哈希表数组是什么样子?
出于预防目的,我将如何"从一种类型转换到另一种类型"?
Sla*_*ast 10
我会走另一条路.
2)Dictionary Elements哈希表数组会是什么样的?
JavaScript对象是从字符串到值的映射.例如
var obj = {
"name": "Sherlock Holmes",
"address": "221B Baker Street"
}
Run Code Online (Sandbox Code Playgroud)
除非对特殊情况使用优化表示,否则V8使用哈希表来表示对象.这很像字典使用(单词,含义)对.
现在,这个哈希表访问速度很慢,因为最初哈希表中的所有键和值都是undefined.在插入新对时,计算散列并在插入索引处插入对.如果该索引处已有密钥,请尝试在下一个索引处插入,依此类推.
1)Fast Elements线性存储阵列是什么样的?
在V8中,a element是一个属性,其键是非负整数(0,1,2,...),即一个简单的线性数组,其属性可以通过数字索引访问.
快速元素存储在连续的数组中.例如
var arr = [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)
它们是一种特殊情况,针对快速访问进行了优化,因为索引已知并且无法计算.
3)为了预防目的,我该怎么flip from one type to another办?
对于快速元素,如果指定的索引超出了元素数组的末尾,则V8可能会将元素降级为字典模式.
参考:http://jayconrod.com/posts/52/a-tour-of-v8-object-representation
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |