Encode HTML entities (v32)

Revision 32 of this benchmark created by Eamon Nerbonne on


Preparation HTML

<script>
  function safe_tags_regex(str) {
   return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
  }
  function encodeByCharCodeAppend(str) {
    var result = "", len = str.length, doneUpto = 0;
    for (var i=0; i < len ; i++) {
      var ref, code = str.charCodeAt(i);
      if(code > 62) continue; //fast-path
      else if(code === 38) ref = "&amp;";
      else if(code === 34) ref = "&#34;";
      else if(code === 39) ref = "&#39;";
      else if(code === 60) ref = "&lt;"; 
      else if(code === 62) ref = "&gt;";
      else continue;
      result += doneUpto === i  ?  ref :  str.substring(doneUpto, i) + ref;
      doneUpto = i + 1;
    }
    if(doneUpto !== len) result += str.substring(doneUpto, len);
    return result;
  }
  
  function safe_tags_dom(str) {
   var div = document.createElement('div');
   div.appendChild(document.createTextNode(str));
   return div.innerHTML;
  }
  var safe_tags_dom_cached = (function(){ 
    var div = document.createElement('div');
    return function(str) {
      div.textContent = str;
      return div.innerHTML;
    }
  })();
  function safe_tags_dom_textcontent(str) {
   var div = document.createElement('div');
   div.textContent = str;
   return div.innerHTML;
  }
  var safe_tags_textarea_cached = (function(){
    var textarea = document.createElement('textarea');
    return function (str) {
      textarea.textContent=str;
      return textarea.innerHTML;
    };
  })();
  
  var safe_tags_replace = (function(){
    var tagsToReplace = {
     '&': '&amp;',
     '<': '&lt;',
     '>': '&gt;'
    };
  
    return function(str) {
      return str.replace(/[&<>]/g, function (tag) { 
        return tagsToReplace[tag]; 
      });
    }
  })();

 var test;//global to prevent easy dead-code-elimination.
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Using Regular Expression
test = safe_tags_regex('if (a < b && "c" > \'d\') {} // Héllö naõ');
ready
Using replace
test = safe_tags_replace('if (a < b && "c" > \'d\') {} // Héllö naõ');
ready
Using textarea
test = safe_tags_textarea_cached('if (a < b && "c" > \'d\') {} // Héllö naõ');
ready
Using DOM textNode
test = safe_tags_dom('if (a < b && "c" > \'d\') {} // Héllö naõ');
ready
Using DOM textContent
test = safe_tags_dom_textcontent('if (a < b && "c" > \'d\') {} // Héllö naõ');
ready
Using DOM (cached node)
test = safe_tags_dom_cached('if (a < b && "c" > \'d\') {} // Héllö naõ');
ready
Using plain loop
test = encodeByCharCodeAppend('if (a < b && "c" > \'d\') {} // Héllö naõ');
ready

Revisions

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