eumnq8 发表于 2021-1-11 16:49:00

cocos2dx lua客户端性能优化【lua篇】

cocos2dx lua客户端性能优化【lua篇】
一、卡顿分析---逻辑优化-lua脚本
1.字符串合并
某一帧如果有大量的字符串合并,可以考虑使用table.concat
local start = os.clock()

local s = ""
for i = 1, 10000 do
        s = s .. "," .. tostring(i)
end
--print(s)    s太大了,print模拟器会崩溃
local stop = os.clock()
print("total cost:", stop - start)

start = os.clock()
s = ""
local t = {}
for i = 1, 10000 do
        table.insert(t, ",")
        table.insert(t, tostring(i))
end

s = table.concat(t)
stop = os.clock()
print("total cost:", stop - start)

上面脚本执行结果(相差接近20倍)
total cost:   0.196
total cost:   0.011

Cocos本身的性能问题之外,还有lua脚本计算的性能问题。Lua的使用不当,会增加性能负担;良好的lua习惯,会让我们的脚本执行毫无负担。


2.Lua的表数组大小如果可以确认,最好在声明定义的时候就把大小确认
例如:local t = {}table.insert(t, 1) table.insert(t, 2) table.insert(t, 3) table.insert(t, 4)
可以看到,我们预先知道t的大小是4,那么就不要定义的时候是个空表,否则之后的insert会导致rehash的。
优化:local t = {true,true,true,true} t = 1 t = 2 t = 3 t = 4

3.全局表
全局表,lua是不会进行gc的。也就是,如果我们不去手动清理全局表,并且会不断给他增加内容,那么内存占用会无限制的增长。还有就是要小心,lua表的key或者value也是表的时候,默认的强引用,它始终都不会被释放的。

4.大量的计算,请使用【最近】的变量
lua变量使用
让频繁使用的变量,离我们“近一些”。减少大量循环中使用全局变量,可以使用local变量代替全局变量
看如下4个例子对比结果:
local function test_func(n)
        return math.sin(n)
end

--全局变量:函数调用
local start = os.clock()
local r = 0
for i = 1, 100000 do
        r = r + test_func(i)
end
local stop = os.clock()
print("total cost:", stop - start)
print("r:",r)

--全局变量:局部调用
start = os.clock()
r = 0
for i = 1, 100000 do
        r = r + math.sin(i)
end
stop = os.clock()
print("total cost:", stop - start)
print("r:", r)
print("")

--局部变量,函数调用
local sin_r = math.sin
local function test_func1(n)
        return sin_r(n)
end

start = os.clock()
r = 0
for i = 1, 100000 do
        r = r + test_func1(i)
end
stop = os.clock()
print("total cost:", stop - start)
print("r:", r)

--局部变量,局部调用
start = os.clock()
r = 0
for i = 1, 100000 do
        r = r + sin_r(i)
end
stop = os.clock()
print("total cost:", stop - start)
print("r:", r)

执行结果:最后一种写法提升明显
total cost:   0.009
r:      1.8477771036303
total cost:   0.008
r:      1.8477771036303
total cost:   0.008
r:      1.8477771036303
total cost:   0.006
r:      1.8477771036303

可以见到,使用局部变量,可以对代码提升。
同样的逻辑,10W次调用,最优的方法可以提升41%性能。

5、lua表~数组Key分配优化
**** Hidden Message *****

lean_wxQTPs94 发表于 2021-4-10 15:25:55

:):):):):)

MichaelZh7wvE56 发表于 2021-6-22 16:06:19

:lol:lol:lol:lol:lol:lol
页: [1]
查看完整版本: cocos2dx lua客户端性能优化【lua篇】