Encode HTML entities (did I win? :p) (v20)

Revision 20 of this benchmark created by Stiph on


Description

Simply do not create a new dom node each time just to inject innerHtml, this is just like a function since it is proxying the call to innerText.

Preparation HTML

<script>
  function safe_tags_regex(str) {
   return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
  }
  
  function safe_tags_dom(str) {
   if (window.encodingDiv === undefined) {
      window.encodingDiv = document.createElement('div');
   }
   var div = window.encodingDiv;
   var n = document.createTextNode(str);
   div.appendChild(n);
   var result = div.innerHTML;
   div.removeChild(n);

   return result;
  }
  
  function safe_tags_dom2(str) {
   if (window.encodingDiv === undefined) {
      window.encodingDiv = document.createElement('div');
   }
   var div = window.encodingDiv;
   div.innerText = str;
   return div.innerHTML;
  }
  
  var tagsToReplace = {
   '&': '&amp;',
   '<': '&lt;',
   '>': '&gt;'
  };
  
  function replaceTag(tag) {
   return tagsToReplace[tag] || tag;
  }
  
  function safe_tags_replace(str) {
   return str.replace(/[&<>]/g, replaceTag);
  }

  function split_join(str) {
   return str.split('&').join('&amp;')
     .split('<').join('&lt;')
     .split('>').join('&gt;');
  }
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Using Regular Expression
var test = safe_tags_regex('if (a < b && c > d) {} // Héllö naõ');
ready
Using cached DOM textNode
var test = safe_tags_dom('if (a < b && c > d) {} // Héllö naõ');
ready
Using replace
var test = safe_tags_replace('if (a < b && c > d) {} // Héllö naõ');
ready
Using cached DOM innerText
var test = safe_tags_dom2('if (a < b && c > d) {} // Héllö naõ');
ready
Using split/join
var test = split_join('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.