| 赞 | 0 |
| VIP | 0 |
| 好人卡 | 0 |
| 积分 | 1 |
| 经验 | 0 |
| 最后登录 | 2025-11-15 |
| 在线时间 | 10 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 54
- 在线时间
- 10 小时
- 注册时间
- 2025-10-26
- 帖子
- 2
|
本帖最后由 mamamiyas 于 2025-10-27 13:53 编辑
一些关于Drill_TitleGif.js加载图片的小优化:
起因是我玩的某个rpgmv游戏,该游戏的标题图是个动态的白毛异瞳美少女,然而我每次开游戏进标题或从别的界面返回标题界时都要会明显延迟一下然后再黑屏一会儿才逐渐显示出标题图,美少女很好看但这界面加载加载速度太拉了,连原神和黑猴用的的实体地图标题都没见卡过的怎么这个反倒卡了。于是我就找到了该游戏用来设置标题用的这个Drill_TitleGif.js和图片文件打算优化一下。
我首先看了图文件,分为静态图的和动态光点图和动态少女图,大头是进行动态播放的少女图片组,一组就有540张图片9秒循环播放来实现动态效果,,,另外还有一组差分也是540张,根据游戏进度换成差分组的来播放。结果js里的加载逻辑是每次进标题都要重新创建元素和读取图片,设置为隐藏的也照样读进内存只是不显示,额如果是普通gal一共就十几张图片全加载也没事但这个的读取总量是破千张的图片组而且每次都重读。我试了下,加载设置为隐藏的图片消耗的时间大约是设置为显示的图片的一半少一点。然后我就把隐藏的判断跳过不读取了,然后加载总时间降到了大约原来的2/3。但这样还是会明显黑屏,明明有标题的快照结果返回标题又重新黑屏这就观感很不好,我就看了看刷新机制,要等到判定全读取完才创建元素节点从时机上来看有些慢了,于是我就加了个异步加载的机制,然后把首次的create从updata里提前放到了backgroundcreaate里面执行,提前了元素创建的时机,先读最多30帧的图片然后再慢慢加载,现在进标题已经基本感觉不到什么延迟和明显黑屏了而且图片播放是正常的。我测了下函数完成执行的时间,大约是从原来的460多ms降到了7到12ms这样,我也不知道就0.5秒为什么能有那么大的延迟感但总之现在没什么延迟感了。
另外我发现这个js的initialize函数在读档的那一刻不知道为什么也会执行一次,而原本的initialize也写了图片的读取,这就导致读档的那一下变得很卡,我注释了读取部分结果读档在也不卡了,,,。initialize的读取部分看的出来是打算做预读取做缓存,但后面执行的create函数里有一模一样的函数再读取一遍图片,create读缓存更快一些吧但这样好像意义不大还让多判断一次缓存。我是第一次接触rpg的插件修改,搞不太懂为什么读档时也要初始化一次TitleGif。
附件是我优化的TitleGif-fix.js,和与游戏用的TitleGif.js的差异对比报告diff,版本都是1.7。另外我也拿网盘里给的最新版TitleGif.js(看着也是1.7版本)试过了,同样和游戏的一样会有延迟和黑屏。
Drill_TitleGif.zip
(13.67 KB, 下载次数: 1)
|
|