html escape

Benchmark created on


Preparation HTML

<script src="https://cdn.jsdelivr.net/npm/he@1.2.0/he.min.js"></script>

Setup

function HtmlEncode0(value) {
    const replacements = {
        "'": "&apos;",
        "&": "&amp;",
        '"': "&quot;",
        "`": "&#x60;",
        "<": "&lt;",
        ">": "&gt;",
    };
    return value.replace(/['&"`<>]/g, _ => replacements[_]);
}

function HtmlEncode1(value) {
    const replacements = new Map();
    replacements.set("'", "&apos;");
    replacements.set("&", "&amp;");
    replacements.set('"', "&quot;");
    replacements.set("`", "&#x60;");
    replacements.set("<", "&lt;");
    replacements.set(">", "&gt;");
    return value.replace(/['&"`<>]/g, _ => replacements.get(_));
}

const replacements0v2 = {
    "'": "&apos;",
    "&": "&amp;",
    '"': "&quot;",
    "`": "&#x60;",
    "<": "&lt;",
    ">": "&gt;",
};

function HtmlEncode0v2(value) {
    return value.replace(/['&"`<>]/g, _ => replacements0v2[_]);
}

const replacements1v2 = new Map();
replacements1v2.set("'", "&apos;");
replacements1v2.set("&", "&amp;");
replacements1v2.set('"', "&quot;");
replacements1v2.set("`", "&#x60;");
replacements1v2.set("<", "&lt;");
replacements1v2.set(">", "&gt;");

function HtmlEncode1v2(value) {
    return value.replace(/['&"`<>]/g, _ => replacements1v2.get(_));
}

function HtmlEncode2(value) {
    let result = "";
    for (var i = 0; i < value.length; i++) {
        switch (value[i]) {
            case "'":
                result += "&apos;";
                break;
            case "&":
                result += "&amp;";
                break;
            case '"':
                result += "&quot;";
                break;
            case "`":
                result += "&#x60;";
                break;
            case "<":
                result += "&lt;";
                break;
            case ">":
                result += "&gt;";
                break;
            default:
                result += value[i];
                break;
        }
    }

    return result;
}

function HtmlEncode3(value) {
    const result = [];
    for (var i = 0; i < value.length; i++) {
        switch (value[i]) {
            case "'":
                result.push("&apos;");
                break;
            case "&":
                result.push("&amp;");
                break;
            case '"':
                result.push("&quot;");
                break;
            case "`":
                result.push("&#x60;");
                break;
            case "<":
                result.push("&lt;");
                break;
            case ">":
                result.push("&gt;");
                break;
            default:
                result.push(value[i]);
                break;
        }
    }

    return result.join("");
}

const testValue = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';

Test runner

Ready to run.

Testing in
TestOps/sec
he.js
he.escape(testValue);
ready
regex map
HtmlEncode1(testValue);
ready
loop string concat
HtmlEncode2(testValue);
ready
loop array join
HtmlEncode3(testValue);
ready
regex object
HtmlEncode0(testValue);
ready
regex map v2
HtmlEncode1v2(testValue);
ready
regex object v2
HtmlEncode0v2(testValue);
ready

Revisions

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