type
status
date
slug
summary
tags
category
icon
password
fullWidth
fullWidth
TypeScript、PuerTS、V8优化实践
脚本语言:蓝图、Lua和TS优缺点分析
脚本语言和编程语言的区别:脚本语言是解释执行的,运行时逐行执行;编程语言是编译执行的,代码在运行前被编译成机器码。
蓝图
- 优点:
- 支持热更新
- 可视化编程
- 简单易上手,策划和美术参与度高
- 资源、配置、逻辑三位一体
- 缺点:
- 多人协作不变、版本管理困难(二进制资产无法使用github、Perforce等版本管理工具)
- 运行时出问题难以回溯
- 性能较差
- 复杂逻辑的可维护性低
- 难以跑在非专用游戏服务器上,双端逻辑不共用
Lua
- 优点:
- 支持热更
- 可多人协作
- 语法简洁、Runtime简单、可定制性强
- 行业人才多、团队内部经验丰富
- 性能比蓝图优
- 缺点:
- 无类型语言
- 周边工具如IDE、性能分析工具、调试工具缺少
- 第三方库稀缺
TypeScript
- 优点:
- 支持热更
- 可多人协作
- 周边工具(IDE、Profiler、Debugger、混淆器等)完善
- 有类型的语言、语法简单
- 性能比蓝图优,和lua差不多
- 广泛应用于Web前端,第三方库众多
- 缺点:
- JS引擎复杂度高,维护和定制困难
- 游戏行业存量人才短缺
为什么选择TypeScript
比较维度 | 蓝图 | Lua | TypeScript |
支持热更 | √ | √ | √ |
双端逻辑共用 | × | √ | √ |
可视化编程 | √ | × | × |
多人协作性 | × | √ | √ |
编码效率 | 快 | 中等 | 中等 |
可维护性 | 低 | 中 | 高 |
上手难度 | 低 | 中 | 中 |
第三方库 | 少 | 少 | 多 |
配套开发工具完备性 | 较少 | 少 | 完备 |
运行时性能 | 略低于lua | 中 | 和lua等同 |
脚本引擎定制难度 | 高 | 中 | 高 |
社区成熟度 | 中 | 高 | 低 |
业内人才密度 | 低 | 高 | 低 |
作为一个大团队的大项目,从运行时性能、多人协作性、可维护性、双端逻辑共用的角度综合考虑选用TypeScript
V8 垃圾回收优化
- V8的堆结构分为
- 新生代:又分为From-Space和To-Space,储存大部分新创建的对象
- 老生代:从新生代存活的对象
- 大对象区:存放新生代无法容纳的对象,大对象区的对象不进行复制和移动
- Map Space:保存对象结构
- Code Space:储存编译器编译出来的代码

Orinoco 垃圾回收主要策略
主线程和辅助线程:主线程是应用程序启动时由操作系统创建得第一个线程,主要负责界面更新和响应用户输入,管理应用程序的生命周期;辅助线程用于执行后台任务(计算密集型操作、文件IO操作等)
- Parallel:主线程和辅助线程同时进行GC,GC时主线程也停止
- Incremental:主线程间歇地执行少了GC工作,类似分帧计算
- Concurrent:主线程持续执行JS不中断,由辅助线程在后台执行GC
垃圾回收优化策略
V8的GC触发策略:1.分配新对象且V8堆内存不足;2.达到内存使用阈值;3.内存分配速率达到阈值
- 通用优化
- 减少临时对象的创建
- 使用对象池技术做到对象复用
- 慎用字符串相关操作函数
- 减少从JS向UE4传递参数造成的隐式编码转换
- 闲时回收
- 在每帧耗时低时主动增量GC;在UE4的tick中计算每帧的闲置时间,通知V8进行GC
- 调度策略
- 根据新增的Uobject对象数量来决定主动强制Parallel GC,而不等V8来决定何时进行GC
- 利用弱回调函数
- 弱回调函数使用弱引用来引用对象,该对象不会因为这些引用而阻止被垃圾回收器回收
- 弱回调函数允许在对象被回收前执行一些清理或通知操作
强引用和弱引用:强引用的生命周期和引用它的变量相同,强引用存在时GC不会回收这个对象,容易导致内存泄漏;弱引用的对象会被GC回收,可避免对象被长时间持有
- 语言内置类型
- 把部分结构(如Vector3、Quat等)实现为JS内置类型,在UE4和JS之间使用值传递而不导出成对象
- Author:Yuki
- URL:http://shirakoko.xyz/article/share-01
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts