哪个表达式更有效并且使用更少的内存?

时间:2015-06-10 00:17:42

标签: javascript

1

'use strict'
var start = new Date().getTime();
for (var i = 0; i < 10000000; i++) {
  var size = 20*1024*1024;
  var array = [];array[size] = 'value1';
};
console.log(process.memoryUsage());
var end = new Date().getTime();
console.log(end - start);

2

'use strict'
var start = new Date().getTime();
for (var i = 0; i < 10000000; i++) {
  var size = 20*1024*1024;
  var dict = {};dict[size]{size:'value1'}; // size equal to a number 20971520 or a string like '20971520' can transform to number 20971520
};
console.log(process.memoryUsage());
var end = new Date().getTime();
console.log(end - start);

哪种表达更有效并且使用更少的内存?

我们有什么方法可以观察脚本的内存和CPU使用情况吗?

我尝试使用Chrome配置文件标签查找该信息,但我无法理解以下docs

2015-06-10T14:37:41 + 0800提供

在node.js中,尝试使用process.memoryUsage(),查看内存使用情况。

阵列测试

'use strict'
var start = new Date().getTime();
for (var i = 0; i < 10000000; i++) {
  var size = 20*1024*1024;
  var dict = {};dict['s' + size] = 'value1'; // transform number to string
};
console.log(process.memoryUsage());
var end = new Date().getTime();
console.log(end - start);

使用数字键进行Dict测试

Array memory usage: {"rss":26570752,"heapTotal":17518848,"heapUsed":4943024}
Dict  number key:   { rss: 34238464, heapTotal: 23722496, heapUsed: 12038408 }
Dict  string key:   { rss: 26386432, heapTotal: 17518848, heapUsed: 6976632 }
Array cpu time: 4944ms
Dict number key: 6834ms
Dict string key: 382ms

使用字符串键进行Dict测试

0 is success,
10001 is server Error

结果

<%= form_for @article, :html => { :multipart => true } do |f| %>
    <%= f.fields_for :document do |doc|%>
        <%= doc.select(
            :url_path,  
            options_for_select(
                @article.attachment_list.map{ |c| [c, {'data-img-src' => c }] }
            ) 
        ) %>
    <% end %>
<% end %>

V8 Engine为数组分配了比使用字符串键的dict更多的内存,但heapUsed只有一点差别。数组的未使用内存被浪费了。

关于cpu时间,一个包含许多空元素的大数组和一个带数字键的dict比使用字符串键的dict花费的时间更长。

  

警告:像&#39; 12380912830&#39;可以转换为数字,dict将其视为一个数字,并将花费最大的内存和CPU使用率。

如果要在脚本中存储errorCode和errorMessage,例如

{{1}}

使用字符串键的dict是更好的选择!

1 个答案:

答案 0 :(得分:-3)

(1)创建一个包含10001个键的数组(根据chrome console:)

enter image description here

(2)创建一个只有1个键({10000: "value1"}

的对象

enter image description here

所以(2)更有效率