Skip to content

Instantly share code, notes, and snippets.

@EnixCoda
Last active November 1, 2018 19:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EnixCoda/97353613cc6928d621fde13db242b4e3 to your computer and use it in GitHub Desktop.
Save EnixCoda/97353613cc6928d621fde13db242b4e3 to your computer and use it in GitHub Desktop.
safe-touch benchmark, MacBookPro 2015 15'
***********************************************************
try...catch VS safe-touch
Will run 100,000 times for each test case.

Will test with these retrieve methods:
  function impossibleRetrieve(_) { return _[Math.random()][Math.random()] }
  function shallowRetrieve(_) { return _.key }
  function deepRetrieve(_) { return _.a.b.c.d.e.f.g.h.i }


Testing on Normal Empty Object: {}
  By protectByTryCatch
     impossibleRetrieve   took   965 ms
     shallowRetrieve      took     3 ms
     deepRetrieve         took   571 ms

  By protectBySafeTouch
     impossibleRetrieve   took   234 ms
     shallowRetrieve      took    18 ms
     deepRetrieve         took    33 ms


Testing on Deep Object: {"a":{"b":{"c":{"d":{"e":{"f":{"g":{"h":{"i":true}}}}}}}}}
  By protectByTryCatch
     impossibleRetrieve   took   857 ms
     shallowRetrieve      took     3 ms
     deepRetrieve         took     7 ms

  By protectBySafeTouch
     impossibleRetrieve   took   239 ms
     shallowRetrieve      took    12 ms
     deepRetrieve         took    88 ms


Testing on Object.create(null): {}
  By protectByTryCatch
     impossibleRetrieve   took   859 ms
     shallowRetrieve      took     2 ms
     deepRetrieve         took   687 ms

  By protectBySafeTouch
     impossibleRetrieve   took   203 ms
     shallowRetrieve      took    12 ms
     deepRetrieve         took    35 ms


Testing on null: null
  By protectByTryCatch
     impossibleRetrieve   took   740 ms
     shallowRetrieve      took   654 ms
     deepRetrieve         took   665 ms

  By protectBySafeTouch
     impossibleRetrieve   took   197 ms
     shallowRetrieve      took    11 ms
     deepRetrieve         took    37 ms


Testing on undefined: undefined
  By protectByTryCatch
     impossibleRetrieve   took   744 ms
     shallowRetrieve      took   660 ms
     deepRetrieve         took   666 ms

  By protectBySafeTouch
     impossibleRetrieve   took   178 ms
     shallowRetrieve      took     5 ms
     deepRetrieve         took    32 ms



***********************************************************
safe-touch VS chained
Will run 100,000 times for each test case.

Will test with these retrieve methods:
  function deepRetrieve(_) { return _.a.b.c.d.e.f.g.h.i }
  function deepChainedRetrieve(_) { return _.a && _.a.b && _.a.b.c && _.a.b.c.d && _.a.b.c.d.e && _.a.b.c.d.e.f && _.a.b.c.d.e.f.g && _.a.b.c.d.e.f.g.h && _.a.b.c.d.e.f.g.h.i }


Testing on Deep Object: {"a":{"b":{"c":{"d":{"e":{"f":{"g":{"h":{"i":true}}}}}}}}}
  By noProtections
     deepRetrieve         took     8 ms
     deepChainedRetrieve  took     4 ms

  By protectBySafeTouch
     deepRetrieve         took    90 ms
     deepChainedRetrieve  took   402 ms
***********************************************************
try...catch VS safe-touch
Will run 100,000 times for each test case.

Will test with these retrieve methods:
  function impossibleRetrieve(_) { return _[Math.random()][Math.random()] }
  function shallowRetrieve(_) { return _.key }
  function deepRetrieve(_) { return _.a.b.c.d.e.f.g.h.i }


Testing on Normal Empty Object: {}
  By protectByTryCatch
     impossibleRetrieve   took   587 ms
     shallowRetrieve      took     3 ms
     deepRetrieve         took   416 ms

  By protectBySafeTouch
     impossibleRetrieve   took   239 ms
     shallowRetrieve      took    38 ms
     deepRetrieve         took   171 ms


Testing on Deep Object: {"a":{"b":{"c":{"d":{"e":{"f":{"g":{"h":{"i":true}}}}}}}}}
  By protectByTryCatch
     impossibleRetrieve   took   581 ms
     shallowRetrieve      took     3 ms
     deepRetrieve         took     6 ms

  By protectBySafeTouch
     impossibleRetrieve   took   242 ms
     shallowRetrieve      took    30 ms
     deepRetrieve         took   332 ms


Testing on Object.create(null): {}
  By protectByTryCatch
     impossibleRetrieve   took   622 ms
     shallowRetrieve      took     3 ms
     deepRetrieve         took   439 ms

  By protectBySafeTouch
     impossibleRetrieve   took   193 ms
     shallowRetrieve      took    33 ms
     deepRetrieve         took   176 ms


Testing on null: null
  By protectByTryCatch
     impossibleRetrieve   took   500 ms
     shallowRetrieve      took   439 ms
     deepRetrieve         took   443 ms

  By protectBySafeTouch
     impossibleRetrieve   took   206 ms
     shallowRetrieve      took    30 ms
     deepRetrieve         took   178 ms


Testing on undefined: undefined
  By protectByTryCatch
     impossibleRetrieve   took   504 ms
     shallowRetrieve      took   443 ms
     deepRetrieve         took   437 ms

  By protectBySafeTouch
     impossibleRetrieve   took   249 ms
     shallowRetrieve      took    45 ms
     deepRetrieve         took   175 ms



***********************************************************
safe-touch VS chained
Will run 100,000 times for each test case.

Will test with these retrieve methods:
  function deepRetrieve(_) { return _.a.b.c.d.e.f.g.h.i }
  function deepChainedRetrieve(_) { return _.a && _.a.b && _.a.b.c && _.a.b.c.d && _.a.b.c.d.e && _.a.b.c.d.e.f && _.a.b.c.d.e.f.g && _.a.b.c.d.e.f.g.h && _.a.b.c.d.e.f.g.h.i }


Testing on Deep Object: {"a":{"b":{"c":{"d":{"e":{"f":{"g":{"h":{"i":true}}}}}}}}}
  By noProtections
     deepRetrieve         took     6 ms
     deepChainedRetrieve  took     3 ms

  By protectBySafeTouch
     deepRetrieve         took   340 ms
     deepChainedRetrieve  took 1,638 ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment