此篇原理和数据支撑较少,因此更多的作为个人学习笔记,不作为分享资料。
一些前提
资源加载顺序:模型-画作-页面上一些其他 ui(按钮图标等)
优化对象:加载时长主要就取决于模型资源加载时间较长,所以对于加载优化也是针对模型资源的加载时长。
加载优化
这个项目的模型资源是动态的,模型个数都是不一定的,分批加载肯定是必要的。就这个项目来说,每批加载 5 层模型(5m ~ 10m 左右),发现首次加载还是比较慢。那对于每一批数据还能做哪些优化尽量提高加载速度呢?
模型体积减小
纹理关联的图片资源尺寸减小,纹理贴图由 2048x2048 降低为 512x512 并进一步压缩处理,资源体积减小。
画质影响?请看上篇性能优化-渲染
前置资源处理
模型加载过程中有等待页面用于过度,等待页面应该尽量简洁。否则会推迟模型开始加载资源的时间起点,造成适得其反的影响。
下面我就用艺术馆中用到的优化举个例子:
- 过度页面由视频形式变成 loading gif 图 视频资源体积比较大会阻塞模型的加载,且自动播放视频在移动端兼容性差。本来用视频是想要提高用户体验,但实际上成了累赘。所以,最后我们把视频替换成 loading 配合进度条显示。
- 空相框纹理原来是页面初始化时候就创建,优化后移到模型之后。
总结起来就是不必要的资源后置,必要的尽量小。
适度 Promise.all
资源体积减小、前置资源处理都做了,正常情况下,无缓存 5s-8s 加载结束,有缓存 2s 以内加载结束,但仍然偶现浏览器请求很慢的情况。有的时候几分钟都加载不出来。
把并行请求改成了串行,没有出现几分钟加载不出来的问题了,但是有的时候还是很慢要十几秒才能加载出来。
并行太多浏览器压力太大了?
继续探索
- 模型材质不手动处理成 basic 是不是快,渲染对加载有阻塞?
- 静态资源放在本地是不是快?绘儿乐都是本地的
- 绘儿乐资源更多,但是加载很流畅,它的资源形式不是 glft+bin+几个大图,是.json+大量的小图。所以是不是资源形式有问题?