在之前很多帖子中,我有谈到过目前 Prefab 加载速度慢的原因。Prefab 第一次实例化时,会自动进行一次预优化。预优化需要不少时间,但是预优化后,后续再次实例化同一个 prefab,速度就会飞快,比手动创建节点还快。
但是有不少人将 Prefab 作为多人协作或者分步加载的工具,这些 Prefab 实际上只会实例化一次,这样一来预优化反而会大大降低 UI 的创建速度。
既然知道原因,如何优化就很明确了。只需要在 Prefab 上加一个选项,让用户选择是否启用预优化即可。可惜我最近琐事太多,这个功能虽然被排到了 1.8,但 1.8 最快也要春节前。因此在这里先介绍一个方法,让大家自己先手动禁用预优化。
这个方法只支持 1.7,具体做法是:在实例化 Prefab 之前,手动设置 cc.supportJit = false;
,在实例化之后,需要把这个标记重置为 true。
就像这样:
if (cc.supportJit) {
cc.supportJit = false;
var ui = cc.instantiate(prefab);
cc.supportJit = true;
}
else {
// 如果是特殊的不支持 JIT 的平台,则不需要优化,也不能强制设置 cc.supportJit 为 true
var ui = cc.instantiate(prefab);
}
欢迎大家反馈一下这样优化的效果如何。
更新:1.10.0 会直接整合该优化,如果你已经使用了上面的代码进行优化,1.10.0 不会报错,但需要重新在 UI 上选择一遍,否则优化会失效。