nic*_*ckf 5 javascript memory google-chrome
我总是假设一个对象的键被存储为字符串,并且任何非字符串值都将被强制转换.因此,正是在这种假设下,在编写一些必须为数千个密钥存储一个小值的代码时,我将所有密钥转换为基数36:
// theKey is an integer
myMap[theKey.toString(36)] = theValue;
Run Code Online (Sandbox Code Playgroud)
然后,我决定看看我的假设是否真的正确,并使用Chrome的分析器来检查内存使用情况.这里大概是我运行的测试和内存使用情况:
window.objIntegers = {};
for (i = 100000; i--) window.objIntegers[i] = 'a';
// 786kb
window.objStrings = {};
for (i = 100000; i--) window.objStrings[i.toString(36)] = 'a';
// 16.7mb!
// and the same pattern but with:
key = i + .5; // 16.7mb
key = i + ''; // 786kb
key = '0' + i; // 16.7mb
key = i + '0'; // 16.7mb
Run Code Online (Sandbox Code Playgroud)
显然,我的假设是关闭的.我想知道的是,它们是如何存储的,以及这种行为是标准的,还是只是Chromium/WebKit团队添加的一些额外技巧?
归档时间: |
|
查看次数: |
166 次 |
最近记录: |