天天看點

lua的性能優化

我通過實際的代碼來驗證,發現一個問題。當我使用 LuaStudio 運作時,發現結果反而與提示相反,甚是奇怪,而使用luac進行運作,與作者給予的提示相符,在某些地方性能可能有優化,比如讀取35kb的檔案時,時間還是比較快的(可能5.1版本做過優化了)。

日常的Lua編碼中,需要注意以下幾點:

1)多使用local

lua的性能優化

上面二段代碼,唯一的差別就是使用 local sin 将 math.sin緩存起來。性能提升約 (107 - 74) / 107 ~= 30.8%,基本符合作者所說的30%的效率提升。

lua的性能優化

提升的時間是 (125 – 88) /125 = 29.6%,也約為30%(需要多次測試取平均值)

使用閉包,避免動态編譯。

lua的性能優化

節省了約92%的時間,差異距大。

2) 字元串拼接,盡可能使用 table 替代

lua的性能優化

差異非常大,無論是記憶體還是時間,主要原因是:Lua中字元串的拼接都是新建立一個新的字元串,有一個新建立一塊記憶體、copy字元串的動作,時間、空間上消耗都比較大。

3) table使用的優化

lua的性能優化

時間相差一倍,也就是說如果不給{}給定初時化大小,當指派的時候,它會申請空間來存放相應的值。

107.57151889801MB

77.053853034973MB

32.019150733948MB

空間占用差距也非常大,從上面似乎可以得到這樣的結論:盡可能減少table的長度,盡可能使用array 而不是 hash。

綜上所述,盡可能多使用local,減少查詢的性能損耗。json資料表如果需要轉化為table時,改變資料的存儲結構可能減少很大的記憶體使用。

繼續閱讀