From 20e2aa01e474b153a2c7f367fcc9eb0745e446b1 Mon Sep 17 00:00:00 2001
From: Jackson Tian <shyvo1987@gmail.com>
Date: Sun, 22 Nov 2015 17:08:45 +0800
Subject: [PATCH] util: faster arrayToHash

The `util.format()` is used frequently, make the method faster
is better.

R-URL: https://github.com/nodejs/node/pull/3964
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
---
 Makefile                  |  3 +++
 benchmark/util/inspect.js | 15 +++++++++++++++
 lib/util.js               |  5 +++--
 3 files changed, 21 insertions(+), 2 deletions(-)
 create mode 100644 benchmark/util/inspect.js

diff --git a/Makefile b/Makefile
index a99b112508c448..94eb41995367ed 100644
--- a/Makefile
+++ b/Makefile
@@ -493,6 +493,9 @@ bench-url: all
 bench-events: all
 	@$(NODE) benchmark/common.js events
 
+bench-util: all
+	@$(NODE) benchmark/common.js util
+
 bench-all: bench bench-misc bench-array bench-buffer bench-url bench-events
 
 bench: bench-net bench-http bench-fs bench-tls
diff --git a/benchmark/util/inspect.js b/benchmark/util/inspect.js
new file mode 100644
index 00000000000000..8a59e6b48e54df
--- /dev/null
+++ b/benchmark/util/inspect.js
@@ -0,0 +1,15 @@
+var util = require('util');
+
+var common = require('../common.js');
+
+var bench = common.createBenchmark(main, {n: [5e6]});
+
+function main(conf) {
+  var n = conf.n | 0;
+
+  bench.start();
+  for (var i = 0; i < n; i += 1) {
+    var r = util.inspect({a: 'a', b: 'b', c: 'c', d: 'd'});
+  }
+  bench.end(n);
+}
diff --git a/lib/util.js b/lib/util.js
index 10376ff2f5c5ee..b1a6b049e5cc20 100644
--- a/lib/util.js
+++ b/lib/util.js
@@ -163,9 +163,10 @@ function stylizeNoColor(str, styleType) {
 function arrayToHash(array) {
   var hash = Object.create(null);
 
-  array.forEach(function(val) {
+  for (var i = 0; i < array.length; i++) {
+    var val = array[i];
     hash[val] = true;
-  });
+  }
 
   return hash;
 }