oLua

Lua 优化工具
授权协议 MIT
开发语言 Google Go Lua
所属分类 程序开发、 脚本编程语言
软件类型 开源软件
地区 国产
投 递 者 佘辰龙
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

oLua 是一个聊胜于无的Lua优化工具。

优化点

  • 优化Lua的table访问
  • 优化Lua的table构造

优化Lua的table访问

例如如下代码:

a.b = {}
if a.c then
    a.b.data1 = "1"
    a.b.data2 = "2"
    a.b.data3 = "3"
end

a.b是一个table,每次访问a.b都会触发一次table的访问,这样会影响性能,所以可以优化为:

a.b = {}
local a_b = a.b
if a.c then
    a_b.data1 = "1"
    a_b.data2 = "2"
    a_b.data3 = "3"
end

注意:这里做了一个假设推断,当对一个a.b赋值构造的table后,就不会再更改a.b为其他table或者其他类型。只针对符合这种假设的推断的代码才能优化。

优化Lua的table构造

例如如下代码:

local a = { a = 1, 2 }
a.b = 1
a["c"] = 2
a[3] = 3
a.d = { e = 4 }
a.d.f = 5

每次往a中添加元素可能会触发table的扩容,所以可以优化为:

local a = {['a']=1, 2, ['b']=1, ['c']=2, [3]=3, ['d']={['e']=4,['f']=5}}

使用

编译:

go mod tidy
go build

运行,优化单个文件的table访问:

./oLua -input input/table_access.lua -output output/table_access.lua -opt_table_access

运行,优化单个文件的table构造:

./oLua -input input/table_construct.lua -output output/table_construct.lua -opt_table_construct

也可以优化目录下的所有文件,原地替换:

./oLua -inputpath input_dir -opt_table_access -opt_table_construct

效果

使用Lua执行input、output目录下的lua文件,看运行所需的时间。

  优化前 优化后
table访问 19.07 11.0
table构造 3.3 1.9

 

 相关资料
  • 问题内容: 前一段时间,我使用了一种PNG优化服务,称为(我认为)“ smush it”。您向它提供了一个网络链接,它返回了所有PNG图像的zip压缩文件,它们的文件大小很好,很好地被弄脏了…… 我想在网站的图片上传过程中实现类似的优化功能;有谁知道我可以使用的预先存在的库(最好是PHP或Python)?简短的Google指示我使用了几种命令行样式工具,但我宁愿不走这条路。 问题答案: 用PHP执

  • 如果经过之前章节的一系列优化之后,数据确实超过了集群能承载的能力,除了拆分集群以外,最后就只剩下一个办法了:清除废旧索引。 为了更加方便的做清除数据,合并 segment,备份恢复等管理任务,Elasticsearch 在提供相关 API 的同时,另外准备了一个命令行工具,叫 curator 。curator 是 Python 程序,可以直接通过 pypi 库安装: pip install ela

  • 本文向大家介绍Android Zipalign工具优化Android APK应用,包括了Android Zipalign工具优化Android APK应用的使用技巧和注意事项,需要的朋友参考一下        生成的Android应用APK文件最好进行优化,因为APK包的本质是一个zip压缩文档,经过优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗。我们可以使用Zipalign

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 显示 Web 应用程序开发面板 从“插入”面板的“类别”弹出菜单中选择“数据”类别可显示一组按钮,使用这些按钮可以向页面中添加动态内容和服务器行为。 显示的按钮的数量和类型取决于在“文档”窗口中打开的文档类型。

  • 本文向大家介绍Mysql优化之Zabbix分区优化,包括了Mysql优化之Zabbix分区优化的使用技巧和注意事项,需要的朋友参考一下 使用zabbix最大的瓶颈在于数据库,维护好zabbix的数据存储,告警,就能很好地应用zabbix去构建监控系统。目前zabbix的数据主要存储在history和trends的2个表中,随着时间的推移,这两个表变得非常大,性能会非常差,影响监控的使用。对MySQ

  • 问题内容: 我想知道两者之间是否有任何性能差异 字符串s = someObject.toString(); System.out.println(s); 和 System.out.println(someObject.toString()); 查看生成的字节码,似乎有所不同。JVM是否能够在运行时优化此字节码,以使两个解决方案提供相同的性能? 在这种简单情况下,当然解决方案2似乎更合适,但有时出于

  • 为了减小能源消耗,IEEE 802.15.4 以及其它类似的链路层技术很少使用(甚至不使用)多播发送信号。此外,无线网络可能不完全遵循传统的 IP 子网和 IP 连接的概念。IPv6 邻居发现机制并不是设计用于非传输无线连接,因为它依赖于传统的 IPv6 连接,且由于它大量使用多播而降低了效率。这在低功耗有损网络中时不切实际的。 基于这个原因,人们已经对 IPv6 邻居发现机制进行了一些简单的优化

  • 我正在解决这个优化问题,我需要计算出我需要打开多少个配送中心,以满足12家公司设施的需求,同时最小化运输成本。运输成本只是配送中心之间的距离乘以每英里成本,然而在这个问题中,每英里成本是一美元。我有5个选择,分别是波士顿、纳舒亚、普罗维登斯、斯普林菲尔德和伍斯特,这5个是12家公司设施的一部分。 我解决了这个问题,得到了正确的答案,但是后来我试图在同一个代码中添加两个约束,我得到的答案是不正确的。