TI-Lua/提高脚本运行速度

计算器百科,非营利的计算器专业知识百科。
跳到导航 跳到搜索
施工中.svg
此条目尚未完工。
此条目尚未完工。原作者将会继续进行编写,而您也可以对该条目进行编辑

本章讲述一些脚本优化方法。

但是请注意到,脚本语言无论怎样优化,都不会比优化过的本地码程序快。但是如果希望自己的程序在运行时不至于卡到你想怒摔计算器,可以考虑在自己的程序中应用这些方法。

针对速度优化

此节会讨论如何让程序运行的更快。

合并逻辑

如果你的所有逻辑分支到最后都要做同一件事(比如刷新屏幕),那么就把刷新屏幕放到逻辑之外。

举个例子:

function on.charIn(c)
  if c == "a" then
      -- do something
      -- platform.window:invalidate()
      -- ^ don't refresh your screen here
      -- or else you have to do it everywhere
  elseif c == "b" then
      -- do something
  elseif c == "c" then
      -- did I just say do something?
  else
      -- you know it
  end
  platform.window:invalidate()
  -- ^ do it here, outside of the logic
end

展开函数

就像在 C/C++ 中那样,对于小而零碎的函数或者经常调用的函数做内联处理,有助于减少代码中的跳转次数,提高运行速度。

然而, Lua 没有宏处理器,更没有 inline 关键词。所有的内联展开都要手动完成。

展开内联通常会导致代码可读性下降。因此应该在发布时做这些事情。

缓存变量

在函数中调用超过两次的非直接变量应该使用一个局部变量缓存下来,避免多次查询变量。

比如你要频繁的使用一个表中的一些数据,在函数中将这个数据用局部变量复制下来是一个好主意。这也有助于让你的代码更整洁。

针对大小优化

此节会讨论如何缩减程序大小。

合并重复的代码段

platform.window:invalidate() 之类冗长的代码,完全可以用一个名字简单的函数代替。

同样的,对于代码中经常出现的无参数或定参数代码段,可以将他们合并到一个独立的函数里。

使用混淆工具

尽管听起来很扯,但是这的确是减小脚本文件的方法。将虽然有意义但是长的变量名转化成一两个无意义的字母能够节省很多空间。但是请注意,混淆工具会使得你的代码不再具有可维护性。你应该仅在发布时混淆代码并转换成 tns 文件。