V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jetkeey
V2EX  ›  Lua

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

  •  
  •   jetkeey · 2023-07-22 17:20:12 +08:00 · 3070 次点击
    这是一个创建于 523 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

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

    疑惑

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

    目的

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

    谢谢您!

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

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

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

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

    猪场 neox 用的好像是 python 。。

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

    如果是前者的话,大佬果然还是大佬,短时间内写的 quickjs ,居然比完善了 20 年的 lua 快且功能全。。
    pursuer
        11
    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
        12
    flyqie  
       2023-07-23 16:30:24 +08:00 via Android
    @pursuer #11

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

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

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

    生态的话,还是和 lua 的定位有关,所以本身标准库很薄弱。有个叫 luvit 的项目,给 lua 提供了类似 node 的环境。但是 js 背靠浏览器,python 则是大部分 linux 预装且标准库丰富,lua 就很难有进一步的优势。
    nevermoreluo
        14
    nevermoreluo  
       2023-07-24 10:33:29 +08:00
    配置载入在 lua 层的话可以优化,大配置载入时,gc 会成问题,全量载入的场景还好,
    但是有些要动态启动的场景,物件逻辑依赖配置载入就会有瓶颈
    jetkeey
        15
    jetkeey  
    OP
       2023-07-25 09:27:59 +08:00
    @silencemodimo 这个确实对我有一定指引作用。谢谢您
    jetkeey
        16
    jetkeey  
    OP
       2023-07-25 09:31:59 +08:00
    @luodaoyi 其实当下也有很多热更方案也很好了,HybridCLR 热更新.只是现在项目大佬还是喜欢用 Lua 。所以今天讨论的还是 lua 方面的。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:08 · PVG 04:08 · LAX 12:08 · JFK 15:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.