Hunter Black Hat SEO
Server:LiteSpeed
System:Linux altar25.supremepanel25.com 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User:flexnetw (3555)
PHP:7.2.34
Disabled:NONE
Upload Files
File: //opt/imunify360-webshield/lualib/resty/template/microbenchmark.lua
local template = require "resty.template"

local ok, new_tab = pcall(require, "table.new")
if not ok then
    new_tab = function() return {} end
end

local function run(iterations)

    local gc, total, print, parse, compile, clock, format = collectgarbage, 0, ngx and ngx.say or print, template.parse,
                                                            template.compile, os.clock, string.format

    iterations = iterations or 1000

    local view = [[
    <ul>
    {% for _, v in ipairs(context) do %}
        <li>{{v}}</li>
    {% end %}
    </ul>]]

    print(format("Running %d iterations in each test", iterations))

    gc()
    gc()

    local x = clock()
    for _ = 1, iterations do
        parse(view, true)
    end
    local z = clock() - x
    print(format("    Parsing Time: %.6f", z))
    total = total + z

    gc()
    gc()

    x = clock()
    for _ = 1, iterations do
        compile(view, nil, true)
        template.cache = {}
    end
    z = clock() - x
    print(format("Compilation Time: %.6f (template)", z))
    total = total + z

    compile(view, nil, true)

    gc()
    gc()

    x = clock()
    for _ = 1, iterations do
        compile(view, 1, true)
    end
    z = clock() - x
    print(format("Compilation Time: %.6f (template, cached)", z))
    total = total + z

    local context = { "Emma", "James", "Nicholas", "Mary" }

    template.cache = {}

    gc()
    gc()

    x = clock()
    for _ = 1, iterations do
        compile(view, 1, true)(context)
        template.cache = {}
    end
    z = clock() - x
    print(format("  Execution Time: %.6f (same template)", z))
    total = total + z

    template.cache = {}
    compile(view, 1, true)

    gc()
    gc()

    x = clock()
    for _ = 1, iterations do
        compile(view, 1, true)(context)
    end
    z = clock() - x
    print(format("  Execution Time: %.6f (same template, cached)", z))
    total = total + z

    template.cache = {}

    local views = new_tab(iterations, 0)
    for i = 1, iterations do
        views[i] = "<h1>Iteration " .. i .. "</h1>\n" .. view
    end

    gc()
    gc()

    x = clock()
    for i = 1, iterations do
        compile(views[i], i, true)(context)
    end
    z = clock() - x
    print(format("  Execution Time: %.6f (different template)", z))
    total = total + z

    gc()
    gc()

    x = clock()
    for i = 1, iterations do
        compile(views[i], i, true)(context)
    end
    z = clock() - x
    print(format("  Execution Time: %.6f (different template, cached)", z))
    total = total + z

    local contexts = new_tab(iterations, 0)

    for i = 1, iterations do
        contexts[i] = { "Emma", "James", "Nicholas", "Mary" }
    end

    template.cache = {}

    gc()
    gc()

    x = clock()
    for i = 1, iterations do
        compile(views[i], i, true)(contexts[i])
    end
    z = clock() - x
    print(format("  Execution Time: %.6f (different template, different context)", z))
    total = total + z

    gc()
    gc()

    x = clock()
    for i = 1, iterations do
        compile(views[i], i, true)(contexts[i])
    end
    z = clock() - x
    print(format("  Execution Time: %.6f (different template, different context, cached)", z))
    total = total + z
    print(format("      Total Time: %.6f", total))
end

return {
    run = run
}