parseJSON optimization (v2)

Revision 2 of this benchmark created by Jay Merrifield on


Description

Testing optimization for the parseJSON function

Preparation HTML

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script>
  $.noConflict();
  var json = '{ "Datasets" : [  { "dsid" : 9,    "name" : "asetsry_cb01",    "description" : "Cwryrwhdntndttdjytdkdtikdtikdtikdt",    "wet" : "-17.5512465374,-0.0000000327,51.4670360111,16.0066496164",    "jtest_wet" : "-17.5512465374,-0.0000000327,51.4670360111,16.0066496164"  },  { "dsid" : 7,    "name" : "afritydkdtykdytkcom_cb05",    "description" : "srsryrshasdustrjdyrjstjstrj",    "wet" : "-17.6260387812,-35.0102301714,51.4819944598,37.6342710921",    "jtest_wet" : "-17.6260387812,-35.0102301714,51.4819944598,37.6342710921"  },  { "dsid" : 4,    "name" : "africkydtkdytkom_ktycdrg",    "description" : "kydkdykdtykdytkdtyM",    "wet" : "-180.0000000000,-86.9695423663,198.9473684211,86.9695423663",    "jtest_wet" : "-180.0000000000,-86.9695423663,198.9473684211,86.9695423663"  },  { "dsid" : 8,    "name" : "africodtykdytkm_dted",    "description" : "DdkydkdtykytdkytdkM",    "wet" : "yesrutjutsrngnklgklmndgklngx klng lkndgndg",    "jtest_wet" : "ahreklajhrljkbstljknsb ljkstjkl stjkl hjklt "  },  { "dsid" : 13,    "name" : "debug",    "description" : "Debug gsrhshysry",    "wet" : "yeryersy ftudfl;hjkl;fdjkl;fgdkl;mfgydkl;mdyfjy",    "jtest_wet" : "-uterjuytkkdytdykjt jdydyk t dkty"  },  { "dsid" : 14,    "name" : "mali_mrsid",    "description" : "Mrjytdkydtkli",    "wet" : " jtdfjfgyk dykl;kdy jkl;djry kl; djrykl;jdr djkl;kl;dy dj yrjdy 4",    "jtest_wet" : " heht  ehtetj je tjet j etj rye jry"  }  ]}';
  // fix for browsers that have scope issues finding the jQuery RegEx;
  var rvalidchars = /^[\],:{}\s]*$/;
  var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
  var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
  var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
  
  jQuery.parseJSON2 = function(data) {
   if (typeof data !== "string" || !data) {
    return null;
   }
  
   // Make sure leading/trailing whitespace is removed (IE can't handle it)
   data = jQuery.trim(data);
  
   // Make sure the incoming data is actual JSON
   // Logic borrowed from http://json.org/json2.js
   // Try to use the native JSON parser first
   if (window.JSON && window.JSON.parse) {
    try {
     return window.JSON.parse(data);
    } catch (e) {
     jQuery.error("Invalid JSON: " + data);
    }
   } else if (rvalidchars.test(data.replace(rvalidescape, "@").replace(rvalidtokens, "]").replace(rvalidbraces, ""))) {
    return (new Function("return " + data))();
   } else {
    jQuery.error("Invalid JSON: " + data);
   }
  }
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Current Version
jQuery.parseJSON(json);
ready
New Version
jQuery.parseJSON2(json);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Jay Merrifield on
  • Revision 2: published by Jay Merrifield on