Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
  article, aside, figure, footer, header, hgroup, 
  menu, nav, section { display: block; }
</style>
</head>
<body>
  <p id="hello">HTML Special Chars Speed Test</p>
  <p>Written by <a href="http://www.twitter.com/xjamundx">Jamund Ferguson</a> and  <a href="http://www.twitter.com/Rob__ot">Rob Middleton</a></p>
  
  <pre>
   // add object.keys support
if(!Object.keys) Object.keys = function(o){var ret=[],p;
 for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
 return ret;
}
var htmlspecialchars1 = (function() {
  var specialChars = {
      "&amp;":"&",
      "&eacute":"é",
      "&copy;":"©",
      "&ntilde;":"ñ",
      "&aelig;":"æ",
      "&AElig;":"Æ",
      "&iquest;":"¿",
      "&pound;":"£",
      "&cent;":"¢",
      "&reg;":"®"
    }, 
    regexes = [],
    i;
  
  // pre-compile the regexes
  for (var html in specialChars) {
    var regex = new RegExp(html, 'g');
    regexes.push({regex: regex, char: specialChars[html]});
  }
  
  return function(str) {
    for (var regex in regexes) {
      str = str.replace(regex.regex, regex.char);
    }
    return str;
  }
  
})();
var htmlspecialchars2 = (function() {
  var specialChars = {
      "&amp;":"&",
      "&eacute":"é",
      "&copy;":"©",
      "&ntilde;":"ñ",
      "&aelig;":"æ",
      "&AElig;":"Æ",
      "&iquest;":"¿",
      "&pound;":"£",
      "&cent;":"¢",
      "&reg;":"®"
    }, 
    inside = Object.keys(specialChars).join("|"),
    regex =  new RegExp(inside, 'g');
    
  return function(str) {
    return str.replace(regex, function(html) {
      return specialChars[html];
    });
  }
  
})();
var str = "The brown cat is a freaky Bat&copy;. His fianc&eacute; lives in a hat &amp; his brother.";
console.log("Timing our first one:");
var time = new Date().getTime();
for (var i = 0; i < 1000000; i++) {
  var x = htmlspecialchars1(str);
}
console.log("htmlspecialchars1: " + (new Date().getTime() - time) + "ms");
console.log("Timing our second one:");
var time2 = new Date().getTime();
for (var i = 0; i < 1000000; i++) {
  var x = htmlspecialchars2(str);
}          
console.log("htmlspecialchars2: " + (new Date().getTime() - time2) + "ms");
  </pre>
  </body>
</html>
Output 300px

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers