微信小游戲 RES版本控制+緩存策略 (resplugin和ResSplitPlugin插件使用)


參考:

RES版本控制

使用 AssetsManager 靈活定制微信小游戲的緩存策略

 

一、我們的目標

目標就是讓玩家快速進入游戲,然后根據游戲的進度加載相應的資源,並可對資源進行版本控制、本地緩存、熱更新。

如果美術改一張圖或者策划修改一個配置文件就要發布版本再審核,就比較麻煩了。

所以方法3是我們要實現的目標。

翻看Egret的教程,提供了RES版本控制和緩存資源來個教程。下面窩來試試能不能實現方法3。

 

二、先來說說RES版本控制

RES版本控制使用插件resplugin.ts,對資源的名稱進行規范化,增加版本號或校驗碼比對等功能。具體查看RES版本控制

 

未使用RES版本控制的發布形式,資源原封不動的發布到微信小游戲項目的resource文件夾下。

 

 使用RES版本控制后,圖片被加上了crc32碼,並通過version.json和VersionController.ts控制版本、校驗對比。

 

那么問題來了,資源放到遠程服務器,不放在主包中,才能實現熱更。所以目前是不能實現熱更的,但是官方的教程也只寫到了這里。

 

問題:

1. 修改VersionController的版本號currentVersion后,會進行本地緩存的清理。路徑是wx.env.USER_DATA_PATH + "/cache_crc32/assets"。

const dir = wx.env.USER_DATA_PATH + "/cache_crc32/assets";
             fs.readdir({
                dirPath: dir,
                success: (e) => {
                    const result = this.getRemoveList(e.files);
                    const length = result.length;
                    for (let i = 0; i < length; ++i) {
                        console.log("VersionMananger >> 刪除", dir + "/" + result[i])
                        fs.unlinkSync(dir + "/" + result[i]);
                    }
                },
                fail: (e) => {
                    // console.log(e);
                }
            });

那么在微信項目中image.js緩存的路徑需要修改為file-util.js的最下方的配置文件

 

 

 

總結:只實現了版本控制,沒有實現熱更新。

 

 三、再看看《使用 AssetsManager 靈活定制微信小游戲的緩存策略》

使用 AssetsManager 靈活定制微信小游戲的緩存策略

這個教程主要是2個點

1. 使用ResSplitPlugin將資源發布時放到外部文件夾,而不是放在主包中。這樣我們就可以將資源放到遠程服務器加載,實現熱更。

2. 使用 image.js 和 text.js等緩存加載的遠程服務器資源,避免重復加載。

 

未使用ResSplitPlugin發布時,資源原封不動得發布到了小游戲項目

 

使用ResSplitPlugin發布時,資源發布到了外部文件夾。這個外部資源文件夾可以放到遠程服務器進行加載。

 

官方教程已經在教程里說了,將這個外部資源文件夾搭建一個本地服務器來訪問。發布正式的時候,將訪問地址改為自己服務器地址即可。

 修改Main.ts的

await RES.loadConfig("resource/default.res.json", "resource/");

為  

await RES.loadConfig("default.res.json","http://localhost:5000/resource/");

 

問題:

1. 這個做法沒有實現版本管理。需要額外一步操作。這個外部資源文件夾放到遠程服務器上時,使用ResDepot進行添加crc碼發布。當有圖片或配置修改時,再使用ResDepot發布上傳一次即可。

2. 每次版本更新需要手動調用file_util.js的remove來清理本地緩存,防止超過微信50M限制。

3. 發布時微信小游戲項目的js下總缺少兩個文件:default.thm.js、game.js。 這兩個文件被生成到了外部資源文件夾里了,需要自己復制到微信小游戲項目下。

4. 直接編譯這個插件是不生效的,需要使用命令發布:egret publish --target wxgame。(終端選項在Egret Wing IDE 正下方菜單欄第4個,調試和輸出選項旁邊)

 

總結:實現了熱更新和本地緩存、版本控制。但是版本控制不如插件resplugin.ts方便、自動化。

 

四、將resplugin和ResSplitPlugin兩個插件結合使用,實現熱更、本地緩存、版本控制

1. 按照2和3步驟使用兩個插件

2. 項目主要分為微信主包preload.res.json和遠程資源包default.res.json

3. 修改config.wxgame.ts

    修改資源發布配置,resource下的主包和遠程包資源分開

    找到項目目錄下scripts/config.wxgame.ts,修改資源分離配置 (根據你自身需求,來配置,配置表中的資源會發布到wxgame_remote下,不會被發布微信小游戲項目下)

    

4. 修改ResPlugin

   找到項目scripts/resplugin.ts,設置需要版本控制的文件夾和文件類型

   versionPath:你的資源控制的文件夾

   versioConfigPath:你的版本控制文件

   

   在設置版本控制的文件類型,例如龍骨的".dbbin"官方沒有寫。

   下圖中增加一個 file.extname === ".dbbin"

   

 5. 修改VersionMananger

項目src/VersionMananger.ts,修改版本控制類的配置。

 

 6. 修改file-util.js

找到微信小游戲項目library/file-util.js,修改

  這里的配置,對應於VersionMananger.ts中的存儲路徑。就是將http://192.168.16.24:8010/resource/assets/main路徑下載的文件,保存在手機cache_crc2/assets文件夾下。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM