Lua性能优化小结
a. 给table添加元素时,tab[#tab + 1] = a比table.insert(tab, a)效率高,远比table.insert(tab, 1, a)效率高;
b. 在循环内创建变量和循环外创建变量的效率取决于创建代价和跨域代价的对比,根据经验选择最合适的处理;
c. 以局部变量代替多次使用的外部变量(xx.xx之类);
d. 减少函数调用可以很大提高效率,但会降低代码的可读性,按需选择;
e. 提前声明table大小可以很大提高效率,可以做到的情况尽量做到;
f. string.format比..效率低很多,但可读性大大提高,按需选择;
g. 在大字符串连接中,我们应避免..。应用table来模拟buffer,然后concat得到最终字符串
h. 判断数组表是否为空时,一般情况用#tab>0即可,除非tab长度特别大,用next(tab)的效率才会更高。
i. 3R原则:
Reducing 避免创建新对象和节约内存。例如:如果你的程序中使用了太多的表,你可以考虑换一种数据结构来表示
Reusing 如果无法避免创建新对象,我们需要考虑重用旧对象
Recycling Lua的垃圾回收器是一个增量运行的机制。即回收分成许多小步骤(增量的)来进行。频繁的垃圾回收可能会降低程序的运行效率。我们可以通过Lua的collectgarbage函数来控制垃圾回收器。
参考资料:
http://wuzhiwei.net/lua_performance/(编写高性能的Lua代码)
https://blog.csdn.net/u013119612/article/details/78758253(Lua:部分常用操作的效率对比及代码优化建议)
https://cloud.tencent.com/developer/article/1005003(Lua性能剖析)