亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

使用Lua編寫Web端模板引擎的實例代碼分享

2024-07-21 23:05:02
字體:
來源:轉載
供稿:網友

ltemplate.lua

local insert = table.insertlocal remove = table.removelocal concat = table.concatlocal format = string.formatlocal loaded = {}local partten = "(.-){#([^#].-[^#])#}()"local content = {}local cur_content = nillocal function ob_start() cur_content = {} insert(content, cur_content)endlocal function ob_get_clean() local ret = concat(cur_content) remove(content) cur_content = content[#content] return retendlocal function echo(value) insert(cur_content, value)endlocal function include(path, params) local bitcode = loaded[path] if not bitcode then local fp = io.open(path, "rb") local template = fp:read('*a') fp:close() local results = {} local last_endpos = 0 for outside, inside, endpos in template:gmatch(partten) do  insert(results, format("echo(%q)", outside))  insert(results, inside)  last_endpos = endpos end insert(results, format("echo(%q)", template:sub(last_endpos))) results = concat(results, "/n") bitcode = assert(loadstring(results)) loaded[path] = bitcode end local env = { include = include, echo = echo, ob_start = ob_start, ob_get_clean = ob_get_clean } setmetatable(env, {__index = function(tb, k) return params[k] or _G[k] end}) setfenv(bitcode, env) bitcode()endfor i = 1, 100000 do ob_start() include(arg[1], { params = {  a = '1234',  b = '4321' } }) ob_get_clean()end

master.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang='zh-CN' xml:lang='zh-CN' xmlns='http://www.w3.org/1999/xhtml'><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Language" content="zh-CN"/> <meta name="robots" content="index, follow" /> <link rel="shortcut icon" type="image/x-icon" href="/img/favicon.ico" /> <title> child's personal page - 開源中國社區</title>   <link rel="stylesheet/less" href="http://my.oschina.net/lostchild/styles.less?ver=20131219&date=20131110185237" type="text/css" media="screen" /> <link rel="stylesheet" href="/js/2012/poshytip/tip-yellowsimple/tip-yellowsimple.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="/js/2011/fancybox/jquery.fancybox-1.3.4.css" media="screen" /> <script type="text/javascript" src="/js/2012/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="/js/2012/jquery.form.js"></script> <script type="text/javascript" src="/js/2011/fancybox/jquery.fancybox-1.3.4.pack.js"></script> <script type="text/javascript" src="/js/2012/poshytip/jquery.poshytip.min.js"></script> <script type="text/javascript" src="/js/2011/oschina.js?ver=20121007"></script> <script type="text/javascript" src="/js/2012/less-1.3.0.min.js"></script> <script type="text/javascript" src="/js/scrolltopcontrol.js"></script> <script type='text/javascript' src='/js/jquery/jquery.atwho.js?ver=2013112501'></script> <link rel="stylesheet" type="text/css" href="/js/jquery/jquery.atwho.css" /> <link rel="alternate" type="application/rss+xml" <link rel="EditURI" type="application/rsd+xml" <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://my.oschina.net/action/xmlrpc/wlwmanifest?space=1397642" /> {# echo(header) #}</head><body>{# echo(content) #}<body></html>

temp.html,繼承master.html

{# ob_start() #}<script> alert("hello World")</script>{# local header = ob_get_clean() #}{# ob_start() #}<table>{# for k, v in pairs(params) do #}<tr> <td>{# echo(k) #}</td> <td>{# echo(v) #}</td></tr>{# end #}</table>{# local content = ob_get_clean() #}{# include('master.html', {header = header, content = content}) #}

循環十萬次測試渲染速度(阿里云最便宜一款vps)

[root@AY130801221248587d02Z ~]# time lua ltemplate.lua temp.htmlreal  0m1.867s
user  0m1.862ssys   0m0.004s

總結

由此可見渲染的速度還是非??斓?,可以將此原型用于嵌入式設備中的頁面上(用大量js實現的嵌入式設備頁面兼容性不好)。而且嵌入式設備的界面需要簡單明確,所以也不用太豐富的模版功能。

原理很簡單:

1.用lua版的正則把模版內{#與#}之間的內容挖出來,原樣輸出成lua代碼,其它部分則生成使用echo打印到某個緩沖區的lua代碼。

2.將這個生成出來的代碼使用loadstring編譯。

3.通過setfenv實現loadstring后的模擬環境配置(用以提供模版內使用的echo,ob_start等函數,以及傳入的參數)

4.執行這個編譯后的函數即可。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲级视频在线观看免费1级| 精品国产欧美成人夜夜嗨| 欧美日韩国产123| 国产v综合ⅴ日韩v欧美大片| 成人免费网站在线看| 1769国产精品| wwwwwwww亚洲| 欧美激情第三页| 久久精品中文字幕| 国产一区二区三区久久精品| 成人乱人伦精品视频在线观看| 国产欧美韩国高清| 久久久精品中文字幕| 国产玖玖精品视频| 成人黄色在线观看| 91av国产在线| 另类天堂视频在线观看| 亚洲美女福利视频网站| 久久久久久成人精品| 中文字幕日韩电影| 亚洲综合日韩中文字幕v在线| 欧美片一区二区三区| 55夜色66夜色国产精品视频| 欧美亚洲在线观看| 日韩美女写真福利在线观看| 国产精品视频一区二区三区四| 日本在线观看天堂男亚洲| 日韩一区二区三区国产| 久久99久久99精品中文字幕| 中文字幕视频在线免费欧美日韩综合在线看| 成人av电影天堂| 久久精品国产久精国产一老狼| 国产成人jvid在线播放| 亚洲欧美自拍一区| 国产91色在线|| 欧美精品少妇videofree| 国产精品678| 欧美在线一区二区三区四| 全亚洲最色的网站在线观看| 在线播放日韩av| 国产精品一区二区久久国产| 国产日韩av高清| 亚洲电影成人av99爱色| 九九热精品视频在线播放| 国产成人精品久久二区二区| 日韩精品中文字幕有码专区| 中文字幕成人精品久久不卡| 97碰碰碰免费色视频| 成人国内精品久久久久一区| 高潮白浆女日韩av免费看| 日韩精品免费在线观看| 中文字幕视频一区二区在线有码| 91国偷自产一区二区三区的观看方式| 国产成人午夜视频网址| 精品二区三区线观看| 亚洲精品一区久久久久久| 在线看国产精品| 亚洲人成电影在线播放| 欧美一级片久久久久久久| 亚洲另类欧美自拍| 亚洲天堂日韩电影| 国产欧美日韩专区发布| 97高清免费视频| 亚洲欧美在线第一页| 国产一区二区三区日韩欧美| 国产精品久久久久久影视| 国产精品美女免费视频| 国产精品久久久久不卡| 国产深夜精品福利| 日韩的一区二区| 久热国产精品视频| 欧美人与性动交| 亚洲影院色在线观看免费| 亚洲精品二三区| 国产一区二区三区18| 欧美贵妇videos办公室| 国产免费亚洲高清| 91av成人在线| 成人a级免费视频| 国内精品久久久久| 影音先锋欧美精品| 日本一区二三区好的精华液| 日本国产欧美一区二区三区| 国产精品美女www爽爽爽视频| 91欧美视频网站| 亚洲qvod图片区电影| 精品亚洲一区二区三区在线播放| 亚洲精品电影网在线观看| 国产亚洲精品久久久久久牛牛| 国产91色在线播放| 欧美日韩国产综合新一区| 色综合色综合久久综合频道88| 国产成人精品av| 欧美大片在线免费观看| 欧美色播在线播放| 久久天天躁狠狠躁夜夜躁2014| 97avcom| 91精品国产乱码久久久久久久久| 成人网欧美在线视频| 成人春色激情网| 色老头一区二区三区在线观看| 日韩视频一区在线| 久久国产精品久久久久| 亚洲欧洲偷拍精品| 亚洲国产精品一区二区三区| 日韩美女中文字幕| 日韩av在线天堂网| 日韩精品中文在线观看| 亚洲电影免费观看高清完整版在线| 国产精品美女免费看| 97在线看免费观看视频在线观看| 97国产在线观看| 久久这里只有精品99| 日韩在线精品一区| 国产精品99一区| 欧美做受高潮电影o| 国产欧美精品一区二区| 亚洲自拍av在线| 亚洲欧美国产高清va在线播| 国产精品视频xxx| 日韩欧美在线免费观看| 国产精品久久久久久久久| 成人疯狂猛交xxx| 亚洲国产91精品在线观看| www.亚洲男人天堂| 欧美一区二区三区图| 亚洲性猛交xxxxwww| 久久精品99久久香蕉国产色戒| 91精品久久久久久久久久另类| 久久久精品免费| 免费av一区二区| 91av网站在线播放| 97超碰色婷婷| 欧美日韩日本国产| 欧美成aaa人片免费看| 亚洲另类欧美自拍| 国产日韩中文字幕在线| 国产日韩精品综合网站| 亚洲精品成人免费| 国产精品一区二区久久国产| 日韩精品在线视频观看| 欧美性少妇18aaaa视频| 欧美精品在线极品| 亚洲精品少妇网址| 欧美日韩国产中字| 国产精品欧美一区二区三区奶水| 91香蕉嫩草影院入口| 91久久久久久久久久久久久| 亚洲人精选亚洲人成在线| 欧美成年人在线观看| 亚洲欧美综合精品久久成人| 福利精品视频在线| 久久久国产精品视频| 午夜精品久久久久久久99热| 欧美精品激情视频| 亚洲欧洲第一视频| 欧美激情国内偷拍| 国产日本欧美一区二区三区| 日本久久亚洲电影| 91国偷自产一区二区三区的观看方式| 久久这里只有精品视频首页| 国产精品久久久久久av下载红粉| 久久影院资源站| 超碰91人人草人人干|