oLua 是一个聊胜于无的Lua优化工具。
例如如下代码:
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或者其他类型。只针对符合这种假设的推断的代码才能优化。
例如如下代码:
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家公司设施的一部分。 我解决了这个问题,得到了正确的答案,但是后来我试图在同一个代码中添加两个约束,我得到的答案是不正确的。