Advertisement
Guest User

Untitled

a guest
Dec 20th, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1. var benchmark = require("./benchmark");
  2. var immutable = require("immutable");
  3.  
  4. function generateKeys(counter) {
  5. var keys = [];
  6.  
  7. while (counter--) {
  8. keys.splice(Math.floor(Math.random() * keys.length), 0, "foo" + counter);
  9. }
  10.  
  11. return keys;
  12. }
  13.  
  14. function copy(o) {
  15. var p = {};
  16.  
  17. for (var s in o) {
  18. p[s] = o[s];
  19. }
  20.  
  21. return p;
  22. }
  23.  
  24.  
  25. var suites = {};
  26.  
  27. suites["object get"] = function (counter) {
  28. var keys = generateKeys(counter);
  29.  
  30.  
  31. ;(function () {
  32. var o = {};
  33.  
  34. keys.forEach(function (key) {
  35. o[key] = true;
  36. });
  37.  
  38. benchmark.time("Mutable object", function () {
  39. o[keys[0]];
  40. });
  41. })();
  42.  
  43.  
  44. ;(function () {
  45. var o = {};
  46.  
  47. keys.forEach(function (key) {
  48. o[key] = true;
  49. });
  50.  
  51. Object.freeze(o);
  52.  
  53. benchmark.time("Frozen object", function () {
  54. o[keys[0]];
  55. });
  56. })();
  57.  
  58.  
  59. ;(function () {
  60. var o = immutable.Map();
  61.  
  62. keys.forEach(function (key) {
  63. o = o.set(key, true);
  64. });
  65.  
  66. benchmark.time("Immutable-js Map", function () {
  67. o.get(keys[0]);
  68. });
  69. })();
  70. };
  71.  
  72.  
  73. suites["object insert"] = function (counter) {
  74. var keys = generateKeys(counter);
  75.  
  76.  
  77. benchmark.time("Mutable object", function () {
  78. var o = {};
  79.  
  80. keys.forEach(function (key) {
  81. o[key] = true;
  82. });
  83. });
  84.  
  85.  
  86. benchmark.time("Mutable object copying", function () {
  87. var o = {};
  88.  
  89. keys.forEach(function (key) {
  90. var p = copy(o);
  91. p[key] = true;
  92. o = p;
  93. });
  94. });
  95.  
  96.  
  97. benchmark.time("Frozen object copying", function () {
  98. var o = {};
  99. Object.freeze(o);
  100.  
  101. keys.forEach(function (key) {
  102. var p = copy(o);
  103. p[key] = true;
  104. Object.freeze(p);
  105. o = p;
  106. });
  107. });
  108.  
  109.  
  110. benchmark.time("Immutable-js Map", function () {
  111. var o = immutable.Map();
  112.  
  113. keys.forEach(function (key) {
  114. o = o.set(key, true);
  115. });
  116. });
  117.  
  118.  
  119. benchmark.time("Immutable-js Map Transient", function () {
  120. var o = immutable.Map();
  121.  
  122. o = o.withMutations(function (o) {
  123. keys.forEach(function (key) {
  124. o.set(key, true);
  125. });
  126. });
  127. });
  128. };
  129.  
  130.  
  131. suites["object remove"] = function (counter) {
  132. var keys = generateKeys(counter);
  133.  
  134.  
  135. benchmark.time("Mutable object", function () {
  136. var o = {};
  137.  
  138. keys.forEach(function (key) {
  139. o[key] = true;
  140. });
  141.  
  142. keys.forEach(function (key) {
  143. delete o[key];
  144. });
  145. });
  146.  
  147.  
  148. benchmark.time("Mutable object copying", function () {
  149. var o = {};
  150.  
  151. keys.forEach(function (key) {
  152. o[key] = true;
  153. });
  154.  
  155. keys.forEach(function (key) {
  156. var p = copy(o);
  157. delete p[key];
  158. o = p;
  159. });
  160. });
  161.  
  162.  
  163. benchmark.time("Frozen object copying", function () {
  164. var o = {};
  165.  
  166. keys.forEach(function (key) {
  167. o[key] = true;
  168. });
  169.  
  170. Object.freeze(o);
  171.  
  172. keys.forEach(function (key) {
  173. var p = copy(o);
  174. delete p[key];
  175. Object.freeze(p);
  176. o = p;
  177. });
  178. });
  179.  
  180.  
  181. benchmark.time("Immutable-js Map", function () {
  182. var o = immutable.Map();
  183.  
  184. keys.forEach(function (key) {
  185. o = o.set(key, true);
  186. });
  187.  
  188. keys.forEach(function (key) {
  189. o = o.remove(key);
  190. });
  191. });
  192.  
  193.  
  194. benchmark.time("Immutable-js Map Transient", function () {
  195. var o = immutable.Map();
  196.  
  197. o = o.withMutations(function (o) {
  198. keys.forEach(function (key) {
  199. o.set(key, true);
  200. });
  201. });
  202.  
  203. o = o.withMutations(function (o) {
  204. keys.forEach(function (key) {
  205. o.remove(key);
  206. });
  207. });
  208. });
  209. };
  210.  
  211.  
  212. suites["object update"] = function (counter) {
  213. var keys = generateKeys(counter);
  214.  
  215.  
  216. ;(function () {
  217. var o = {};
  218.  
  219. keys.forEach(function (key) {
  220. o[key] = true;
  221. });
  222.  
  223. benchmark.time("Mutable object", function () {
  224. keys.forEach(function (key) {
  225. o[key] = false;
  226. });
  227. });
  228. })();
  229.  
  230.  
  231. ;(function () {
  232. var o = {};
  233.  
  234. keys.forEach(function (key) {
  235. o[key] = true;
  236. });
  237.  
  238. benchmark.time("Mutable object copying", function () {
  239. keys.forEach(function (key) {
  240. var p = copy(o);
  241. p[key] = false;
  242. o = p;
  243. });
  244. });
  245. })();
  246.  
  247.  
  248. ;(function () {
  249. var o = immutable.Map();
  250.  
  251. keys.forEach(function (key) {
  252. o = o.set(key, true);
  253. });
  254.  
  255. benchmark.time("Immutable-js Map", function () {
  256. var p = o;
  257.  
  258. keys.forEach(function (key) {
  259. p = p.set(key, false);
  260. });
  261. });
  262. })();
  263.  
  264.  
  265. ;(function () {
  266. var o = immutable.Map();
  267.  
  268. keys.forEach(function (key) {
  269. o = o.set(key, true);
  270. });
  271.  
  272. benchmark.time("Immutable-js Map Transient", function () {
  273. o.withMutations(function (o) {
  274. keys.forEach(function (key) {
  275. o.set(key, false);
  276. });
  277. });
  278. });
  279. })();
  280. };
  281.  
  282.  
  283. suites["record"] = function (counter) {
  284. var keys = generateKeys(counter);
  285.  
  286.  
  287. ;(function () {
  288. var o = {};
  289.  
  290. keys.forEach(function (key) {
  291. o[key] = true;
  292. });
  293.  
  294. benchmark.time("Mutable object", function () {
  295. o[keys[0]] = false;
  296. });
  297. })();
  298.  
  299.  
  300. ;(function () {
  301. var o = {};
  302.  
  303. keys.forEach(function (key) {
  304. o[key] = true;
  305. });
  306.  
  307. benchmark.time("Mutable object copying", function () {
  308. var p = copy(o);
  309. p[keys[0]] = false;
  310. });
  311. })();
  312.  
  313.  
  314. ;(function () {
  315. var o = {};
  316.  
  317. keys.forEach(function (key) {
  318. o[key] = true;
  319. });
  320.  
  321. Object.freeze(o);
  322.  
  323. benchmark.time("Frozen object copying", function () {
  324. var p = copy(o);
  325. p[keys[0]] = false;
  326. Object.freeze(p);
  327. });
  328. })();
  329.  
  330.  
  331. ;(function () {
  332. var o = immutable.Map();
  333.  
  334. keys.forEach(function (key) {
  335. o = o.set(key, true);
  336. });
  337.  
  338. benchmark.time("Immutable-js Map", function () {
  339. o.set(keys[0], false);
  340. });
  341. })();
  342. };
  343.  
  344.  
  345. var keys = 1;
  346. //suites["object get"](keys);
  347. //suites["object insert"](keys);
  348. //suites["object remove"](keys);
  349. //suites["object update"](keys);
  350. suites["record"](keys);
  351.  
  352. benchmark.run();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement