Lua 代码上的优化,相互学习一下

2023-07-22 17:20:12 +08:00
 jetkeey

背景

我是一名 Unity3D 的前端开发。公司的项目大部分是用 C# + xLua 的框架,MMORPG 类型的游戏。不可否认的 Lua 的技术还是非常成熟的。

疑惑

在工作中项目中,Lua 能用到的什么优化方法呢?我几乎想不到,完全没有思路。也不知道从何下手。平时公司里也没有什么大佬会告诉我。所以想请教下社区的大佬们,请问您知道的 lua 优化有哪些呢?谢谢您

目的

我觉得像我这样的小白应该不少,既然有相同的疑问,我也想通过这个帖子,可能相互学习一下。

谢谢您!

3086 次点击
所在节点    Lua
16 条回复
silencemodimo
2023-07-22 21:16:17 +08:00
Katrol
2023-07-22 21:41:02 +08:00
其实就是知乎上、博客上常见的那些。我觉得应该是先把相关数据结构的底层实现看下就大概明白了,游戏中要注意的其实是 C# lua 交互调用的性能
asuraa
2023-07-22 22:15:11 +08:00
我们优化 直接把 lua 干掉换 quickjs 然后就可以愉快的写 js 了
flyqie
2023-07-22 23:00:01 +08:00
@luodaoyi #3

请问下,quickjs 跑 js 跟 跑 lua 在实际使用上有何差别?

现在好像 unity 这边 lua 用的多,js 倒是比较少。。
asuraa
2023-07-22 23:34:28 +08:00
@flyqie 差别就是 lua c++做集成非常容易没有侵入性 也就用 luabridge 之类的包一层就行了 原来的 clas 基本不用改
但是 quickjs 就比较蛋疼 需要管理整个对象的生命周期 做集成的时候比较麻烦 需要侵入到 class 代码里面 比如继承一个父类之类的

然后就是写起来的区别了 lua 写的非常难受 连特么一个 continue 都没有需要包一层 循环
js 就各种输入 map 什么的 舒服的很 写起来非常快
flyqie
2023-07-22 23:37:18 +08:00
@luodaoyi #5

猪场 neox 用的好像是 python 。。

果然方案用的都不一样。。
wxf666
2023-07-23 00:04:42 +08:00
@luodaoyi #3 相同工作量的任务,lua 快些,还是 quickjs 快些?
asuraa
2023-07-23 10:33:01 +08:00
@wxf666 quickjs 快多了 快的不是一点半点
asuraa
2023-07-23 10:35:38 +08:00
@flyqie py 也是好方案 我们主要是因为这玩意的运行时发布起来太麻烦 要带一个巨大的 cpython 的运行库
wxf666
2023-07-23 10:49:43 +08:00
@luodaoyi #8 是运行得快?还是开发得快?

如果是前者的话,大佬果然还是大佬,短时间内写的 quickjs ,居然比完善了 20 年的 lua 快且功能全。。
pursuer
2023-07-23 11:29:31 +08:00
@wxf666 之前看到过的测试,lua 比 quickjs 性能快 3 倍左右,来源: https://zhuanlan.zhihu.com/p/391905689

lua 也有一些强类型变体比如 teal ,以及可以 AOT 编译以提高性能的变体 nelua ,还有神奇的 TypeScriptToLua 。lua 主要问题还是生态相较于 js 和 py 比较薄弱。
flyqie
2023-07-23 16:30:24 +08:00
@pursuer #11

lua 那不是比较。。是非常。。

lua 。。那已经不是简单了,是简陋。

但简陋的好处是,比较容易塞进其他语言里。
pursuer
2023-07-23 19:05:46 +08:00
@flyqie
是说语法简陋的话,lua 确实语法糖不多,但 lua 虚拟机提供的机制却意外的全面,异常处理,_ENV 和 coroutine 都有

生态的话,还是和 lua 的定位有关,所以本身标准库很薄弱。有个叫 luvit 的项目,给 lua 提供了类似 node 的环境。但是 js 背靠浏览器,python 则是大部分 linux 预装且标准库丰富,lua 就很难有进一步的优势。
nevermoreluo
2023-07-24 10:33:29 +08:00
配置载入在 lua 层的话可以优化,大配置载入时,gc 会成问题,全量载入的场景还好,
但是有些要动态启动的场景,物件逻辑依赖配置载入就会有瓶颈
jetkeey
2023-07-25 09:27:59 +08:00
@silencemodimo 这个确实对我有一定指引作用。谢谢您
jetkeey
2023-07-25 09:31:59 +08:00
@luodaoyi 其实当下也有很多热更方案也很好了,HybridCLR 热更新.只是现在项目大佬还是喜欢用 Lua 。所以今天讨论的还是 lua 方面的。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/958829

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX