oLuaLua 優(yōu)化工具
oLua 是一個聊勝于無的Lua優(yōu)化工具。
優(yōu)化點
- 優(yōu)化Lua的table訪問
- 優(yōu)化Lua的table構(gòu)造
優(yōu)化Lua的table訪問
例如如下代碼:
a.b = {} if a.c then a.b.data1 = "1" a.b.data2 = "2" a.b.data3 = "3" end
a.b是一個table,每次訪問a.b都會觸發(fā)一次table的訪問,這樣會影響性能,所以可以優(yōu)化為:
a.b = {} local a_b = a.b if a.c then a_b.data1 = "1" a_b.data2 = "2" a_b.data3 = "3" end
注意:這里做了一個假設(shè)推斷,當(dāng)對一個a.b賦值構(gòu)造的table后,就不會再更改a.b為其他table或者其他類型。只針對符合這種假設(shè)的推斷的代碼才能優(yōu)化。
優(yōu)化Lua的table構(gòu)造
例如如下代碼:
local a = { a = 1, 2 } a.b = 1 a["c"] = 2 a[3] = 3 a.d = { e = 4 } a.d.f = 5
每次往a中添加元素可能會觸發(fā)table的擴(kuò)容,所以可以優(yōu)化為:
local a = {['a']=1, 2, ['b']=1, ['c']=2, [3]=3, ['d']={['e']=4,['f']=5}}
使用
編譯:
go mod tidy go build
運(yùn)行,優(yōu)化單個文件的table訪問:
./oLua -input input/table_access.lua -output output/table_access.lua -opt_table_access
運(yùn)行,優(yōu)化單個文件的table構(gòu)造:
./oLua -input input/table_construct.lua -output output/table_construct.lua -opt_table_construct
也可以優(yōu)化目錄下的所有文件,原地替換:
./oLua -inputpath input_dir -opt_table_access -opt_table_construct
效果
使用Lua執(zhí)行input、output目錄下的lua文件,看運(yùn)行所需的時間。
| 優(yōu)化前 | 優(yōu)化后 | |
|---|---|---|
| table訪問 | 19.07 | 11.0 |
| table構(gòu)造 | 3.3 | 1.9 |
評論
圖片
表情
