From: Steven Barth Date: Fri, 5 Sep 2008 18:35:09 +0000 (+0000) Subject: Heavy memory/performance optimizations #4 X-Git-Tag: 0.8.0~133 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=6a6edda0491119cbba249bae847986313f8c09e0 Heavy memory/performance optimizations #4 --- diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 09e99e7de..599d652f4 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -160,9 +160,10 @@ function dispatch(request) -- Init template engine if not track.notemplate then local tpl = require("luci.template") - local viewns = {} + local viewns = setmetatable({}, {__index=_G}) tpl.context.viewns = viewns viewns.write = luci.http.write + viewns.include = function(name) tpl.Template(name):render(getfenv(2)) end viewns.translate = function(...) return require("luci.i18n").translate(...) end viewns.striptags = util.striptags viewns.controller = luci.http.getenv("SCRIPT_NAME") @@ -219,7 +220,15 @@ function dispatch(request) context.dispatched = c util.copcall(function() - util.updfenv(c.target, require(c.module)) + local oldenv = getfenv(c.target) + local module = require(c.module) + local env = setmetatable({}, {__index= + + function(tbl, key) + return rawget(tbl, key) or module[key] or oldenv[key] + end}) + + setfenv(c.target, env) end) c.target(unpack(args))