oLua是一个聊胜于无的Lua优化工具。
优化点优化Lua的table访问优化Lua的table构造优化Lua的table访问例如如下代码:
a.b={}ifa.cthena.b.data1="1"a.b.data2="2"a.b.data3="3"enda.b是一个table,每次访问a.b都会触发一次table的访问,这样会影响性能,所以可以优化为:
a.b={}locala_b=a.bifa.cthena_b.data1="1"a_b.data2="2"a_b.data3="3"end注意:这里做了一个假设推断,当对一个a.b赋值构造的table后,就不会再更改a.b为其他table或者其他类型。只针对符合这种假设的推断的代码才能优化。
优化Lua的table构造例如如下代码:
locala={a=1,2}a.b=1a["c"]=2a[3]=3a.d={e=4}a.d.f=5每次往a中添加元素可能会触发table的扩容,所以可以优化为:
locala={['a']=1,2,['b']=1,['c']=2,[3]=3,['d']={['e']=4,['f']=5}}使用编译:
gomodtidygobuild运行,优化单个文件的table访问:
./oLua-inputinput/table_access.lua-outputoutput/table_access.lua-opt_table_access运行,优化单个文件的table构造:
./oLua-inputinput/table_construct.lua-outputoutput/table_construct.lua-opt_table_construct也可以优化目录下的所有文件,原地替换:
./oLua-inputpathinput_dir-opt_table_access-opt_table_construct效果使用Lua执行input、output目录下的lua文件,看运行所需的时间。
优化前优化后table访问19.0711.0table构造3.31.9
评论