一个简单的 lua 对象回收再利用方案 (blog.codingnow.com)

【简介】

昨天在 review 我公司一个正在开发的项目客户端代码时,发现了一些坏味道。

客户端框架创建了一个简单的对象系统,用来组织客户端用到的对象。这些对象通常是有层级关系的,顶层对象放在一个全局集里,方便遍历。通常,每帧需要更新这些对象,处理事件等等。

顶层每个对象下,还拥有一些不同类别的子对象,最终成为一个森林结构,森林里每个根对象都是一颗树。对象间有时有一些引用关系,比如,一个对象可以跟随另一个对象移动,这个跟随就不是拥有关系。

这种设计方法或模式,是非常常见的。但是在实现手法上,我闻到了一丝坏味道。
由于类别很多,所以代码中充斥着模仿静态语言如 C++/C# 般的大量构造和析构函数。我一直对同事说 Lua 不是 C++ 大部分同事也认同我的观点,但落到实处,却逃不出过去的很多经验。

比如在这次具体问题上,为什么要实现一套带构造和析构函数的类别系统呢?

点击查看原文 >>

@技术头条 2017-02-05 14:30 / 0个评论
赞过的人: @技术头条
要不要再学学下面的文章?
对比脚本型和编译型游戏服务器的热更新方案 (www.codedump.info)
本文对比游戏服务器中C++搭配脚本语言(Lua、Python)以及纯编译型语言(C++、Golang)来进行开发时,进行线上服务器热更新的方案。
by @技术头条 2024-03-21 23:21 查看详情
iOS备用机自动充电方案 (www.leavesongs.com)
炫酷一下,为了能让备用机一直有电,计划将备用机插在智能插座上,然后通过iOS的Shortcuts来监控手机电量——当手机电量小于30%的时候自动开启插座;当手机电量充到80%的时候自动关闭插座。
by @技术头条 2024-01-28 23:59 查看详情
MinIO的分布式存储实践方案 (l1n.wang)
MinIO是一个开源的分布式对象存储组件,它兼容Amazon S3API,适合于存储大容量的非结构化数据,支持单个对象最大5TB。MinIO特点:部署简单,仅需要单独一个二进制文件;支持纠删码机制,能恢复部分数据块丢失的情况;读写性能高。
by @技术头条 2024-01-17 23:07 查看详情
利用gorm自身提供的方法实现存在更新不存在则创建的能力 (wiki.eryajf.net)
MySQL 有一个语句是 UPSERT 的操作,它结合了 update 和 insert 两种操作的功能。当执行 upsert 操作时,如果指定的记录已经存在,则执行更新操作;如果指定的记录不存在,则执行插入操作。这种操作可以用来确保数据的一致性,并且可以减少对数据库的访问次数。
by @技术头条 2024-01-13 23:49 查看详情
HTTP2 请求走私利用剖析 (paper.seebug.org)
文章将主要对HTTP/2协议的新特性以及HTTP/2中的请求走私进行详细介绍。
by @技术头条 2024-01-13 23:47 查看详情
CPU 混合推理,非常见大模型量化方案:“二三五六” 位量化 (soulteary.com)
本篇文章聊聊网上聊的比较少的具体量化操作,非常见整型位数的量化,来自让各种开源模型能够在 CPU 环境、CPU & GPU 环境混合推理的技术方案:llama.cpp 。
by @技术头条 2023-12-26 22:06 查看详情
如何利用「深度上下文兴趣网络」提升点击率? (tech.meituan.com)
美团到店广告平台在用户行为序列建模算法的迭代落地中,基于对业务实际场景中用户决策心智的观察,创新性地提出了深度上下文兴趣网络,精确建模了用户的兴趣,提升了CTR等线上业务指标。本文介绍了相应算法背后的动机、建模方法以及工程优化,希望能为从事相关工作的同学带来一些启发或帮助。
by @技术头条 2023-11-29 23:40 查看详情
利用HAR文件查看和诊断网络请求 (www.iszy.cc)
HAR(HTTP 归档)是多种 HTTP 会话工具用来导出所记录数据的 一种文件格式。这种格式基本上是 JSON 对象,并具有一组特定的字段。请注意,并非所有 HAR 格式的字段都是必填字段, 很多时候,部分信息不会保存到文件中。
by @技术头条 2023-11-29 23:36 查看详情
真实世界的Go设计模式 - 对象池模式 (colobu.com)
对象池(object pool pattern)是一种设计模式。一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁对象。池的用户可以从池子中取得对象,对其进行操作处理,并在不需要时归还给池子而非直接销毁它。这是一种特殊的工厂对象。

若初始化、实例化的代价高,且有需求需要经常实例化,但每次实例化的数量较少的情况下,使用对象池可以获得显著的效能提升。从池子中取得对象的时间是可预测的,但新建一个实例所需的时间是不确定。

另外,利用对象池,我们可以重用对象,减少对象的分配,对于垃圾回收的编程语言,也是一种提高性能的手段。
by @技术头条 2023-09-10 23:38 查看详情
一个 MySQL 数据库死锁的案例和解决方案 (mazhuang.org)
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
by @技术头条 2023-09-10 23:29 查看详情