summaryrefslogtreecommitdiffhomepage
path: root/libs/web/luasrc
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-06-01 12:12:18 +0000
committerSteven Barth <steven@midlink.org>2008-06-01 12:12:18 +0000
commitb454395a8da4013aff2ecd64cd7eafc01fc6a5a2 (patch)
tree0071604ca65f1e520ee2f56b6cf6343bc5297df9 /libs/web/luasrc
parent1da5feb9f720fd48a886aad09df91bd8cc9df4c8 (diff)
* Performance optimizations
* libs/core: Added bytecode stripping function to luci.util * libs/core: Added smart indexcache that automatically updates cached index-files on change * libs/web: Enabled template caching support * Core Translation part 4
Diffstat (limited to 'libs/web/luasrc')
-rw-r--r--libs/web/luasrc/config.lua11
-rw-r--r--libs/web/luasrc/dispatcher.lua40
-rw-r--r--libs/web/luasrc/i18n.lua6
-rw-r--r--libs/web/luasrc/template.lua40
4 files changed, 49 insertions, 48 deletions
diff --git a/libs/web/luasrc/config.lua b/libs/web/luasrc/config.lua
index 854b12814..4eb8e46e4 100644
--- a/libs/web/luasrc/config.lua
+++ b/libs/web/luasrc/config.lua
@@ -25,10 +25,9 @@ limitations under the License.
]]--
-module("luci.config", package.seeall)
-require("luci.model.uci")
-require("luci.util")
-require("luci.sys")
+local uci = require("luci.model.uci")
+local util = require("luci.util")
+module("luci.config")
-- Warning! This is only for fallback and compatibility purporses! --
main = {}
@@ -42,7 +41,7 @@ main.lang = "de"
-- Now overwrite with UCI values
-local ucidata = luci.model.uci.sections("luci")
+local ucidata = uci.sections("luci")
if ucidata then
- luci.util.update(luci.config, ucidata)
+ util.update(_M, ucidata)
end \ No newline at end of file
diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua
index 8d1e493fb..c7e1ed6fe 100644
--- a/libs/web/luasrc/dispatcher.lua
+++ b/libs/web/luasrc/dispatcher.lua
@@ -177,7 +177,7 @@ end
-- Calls the index function of all available controllers
function createindex_plain(path, suffix)
- local cachetime = nil
+ local cache = nil
local controllers = luci.util.combine(
luci.fs.glob(path .. "*" .. suffix) or {},
@@ -185,32 +185,38 @@ function createindex_plain(path, suffix)
)
if indexcache then
- cachetime = luci.fs.mtime(indexcache)
+ cache = luci.fs.mtime(indexcache)
- if not cachetime then
+ if not cache then
luci.fs.mkdir(indexcache)
luci.fs.chmod(indexcache, "a=,u=rwx")
+ cache = luci.fs.mtime(indexcache)
end
end
- if not cachetime then
- for i,c in ipairs(controllers) do
- c = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".")
- stat, mod = pcall(require, c)
+ for i,c in ipairs(controllers) do
+ local module = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".")
+ local cachefile = indexcache .. "/" .. module
+ local stime
+ local ctime
+
+ if cache then
+ stime = luci.fs.mtime(c) or 0
+ ctime = luci.fs.mtime(cachefile) or 0
+ end
+
+ if not cache or stime > ctime then
+ stat, mod = pcall(require, module)
if stat and mod and type(mod.index) == "function" then
- index[c] = mod.index
+ index[module] = mod.index
- if indexcache then
- luci.fs.writefile(indexcache .. "/" .. c, string.dump(mod.index))
+ if cache then
+ luci.fs.writefile(cachefile, luci.util.dump(mod.index))
end
end
- end
- else
- for i,c in ipairs(luci.fs.dir(indexcache)) do
- if c:sub(1) ~= "." then
- index[c] = loadfile(indexcache .. "/" .. c)
- end
+ else
+ index[module] = loadfile(cachefile)
end
end
end
@@ -226,7 +232,7 @@ function createtree()
-- Load default translation
luci.i18n.loadc("default")
- local scope = _G
+ local scope = luci.util.clone(_G)
for k,v in pairs(_M) do
if type(v) == "function" then
scope[k] = v
diff --git a/libs/web/luasrc/i18n.lua b/libs/web/luasrc/i18n.lua
index 7ace708e9..546429933 100644
--- a/libs/web/luasrc/i18n.lua
+++ b/libs/web/luasrc/i18n.lua
@@ -39,7 +39,7 @@ end
-- Loads a translation and copies its data into the global translation table
function load(file, force)
if force or not loaded[file] then
- local f = loadfile(i18ndir .. file)
+ local f = loadfile(i18ndir..file..".lua") or loadfile(i18ndir..file)
if f then
setfenv(f, table)
f()
@@ -54,8 +54,8 @@ function load(file, force)
end
-- Same as load but autocompletes the filename with .LANG from config.lang
-function loadc(file)
- return load(file .. "." .. require("luci.config").main.lang)
+function loadc(file, force)
+ return load(file .. "." .. require("luci.config").main.lang, force)
end
-- Returns the i18n-value defined by "key" or if there is no such: "default"
diff --git a/libs/web/luasrc/template.lua b/libs/web/luasrc/template.lua
index 369aa0a30..c672f16bf 100644
--- a/libs/web/luasrc/template.lua
+++ b/libs/web/luasrc/template.lua
@@ -30,22 +30,17 @@ require("luci.util")
require("luci.fs")
require("luci.http")
-viewdir = luci.sys.libpath() .. "/view/"
+luci.config.template = luci.config.template or {}
+
+viewdir = luci.config.template.viewdir or luci.sys.libpath() .. "/view"
+compiledir = luci.config.template.compiledir or luci.sys.libpath() .. "/view"
-- Compile modes:
-- none: Never compile, only use precompiled data from files
-- memory: Always compile, do not save compiled files, ignore precompiled
-- file: Compile on demand, save compiled files, update precompiled
-compiler_mode = "memory"
-
-
--- This applies to compiler modes "always" and "smart"
---
--- Produce compiled lua code rather than lua sourcecode
--- WARNING: Increases template size heavily!!!
--- This produces the same bytecode as luac but does not have a strip option
-compiler_enable_bytecode = false
+compiler_mode = luci.config.template.compiler_mode or "memory"
-- Define the namespace for template modules
@@ -107,12 +102,7 @@ function compile(template)
template = template:gsub("<%%"..tostring(k).."%%>", re)
end
- if compiler_enable_bytecode then
- tf = loadstring(template)
- template = string.dump(tf)
- end
-
- return template
+ return loadstring(template)
end
-- Oldstyle render shortcut
@@ -156,8 +146,8 @@ function Template.__init__(self, name)
end
-- Compile and build
- local sourcefile = viewdir .. name .. ".htm"
- local compiledfile = viewdir .. name .. ".lua"
+ local sourcefile = viewdir .. "/" .. name .. ".htm"
+ local compiledfile = compiledir .. "/" .. name .. ".lua"
local err
if compiler_mode == "file" then
@@ -171,9 +161,15 @@ function Template.__init__(self, name)
source, err = luci.fs.readfile(sourcefile)
if source then
- local compiled = compile(source)
- luci.fs.writefile(compiledfile, compiled)
- self.template, err = loadstring(compiled)
+ local compiled, err = compile(source)
+
+ local compiledfile_dir = luci.fs.dirname(compiledfile)
+ if not luci.fs.mtime(compiledfile_dir) then
+ luci.fs.mkdir(compiledfile_dir)
+ end
+
+ luci.fs.writefile(compiledfile, luci.util.dump(compiled))
+ self.template = compiled
end
else
self.template, err = loadfile(compiledfile)
@@ -186,7 +182,7 @@ function Template.__init__(self, name)
local source
source, err = luci.fs.readfile(sourcefile)
if source then
- self.template, err = loadstring(compile(source))
+ self.template, err = compile(source)
end
end