1. 在cocos creator中加载的大题流程是
a. download
b. loader
大概这样的形式,那么只要替换调加载的函数就可以了
2. 在download中替换相应的函数
例如: web直接替换loadJson函数
大概:cc.loader.addDownloadHandlers({"json":funcJsonGz});
cc.loader.addDownloadHandlers({"gz":funcJsonGz});
wx大需要修改wx-downloader.js中
readFile函数
内容大概是:
a. 判断后缀是否json文件
b. 使用binary加载
c. 判断头部是否是压缩文件
d. 进行解压或者直接返回数据
压缩思路
1. 编写插件在发布结束的时候,读取所有json后缀文件
2. 判断大小进行gz压缩写会原来的文件
压缩
这里选择的是直接对json进行压缩,文件后缀不变,使用pako库
大体代码(针对web和wx包内资源)
// utils.js web使用的加载方式, wx远程加载没有做设计考虑
"use strict";
var Uint8ArrayToString = function(uint8array){
return new TextDecoder("utf-8").decode(uint8array);
}
//=============================================
var funcJsonGz = function(item, callback) {
// 根据不同情况进行判断处理否则问题多多
var url = item.url;
if (!CC_EDITOR && CC_BUILD && !CC_PREVIEW){
url = url.replace(".json", ".gz");
}
var errInfo = 'Load binary data failed: ' + url + '';
var xhr = cc.loader.getXMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
var arrayBuffer = xhr.response;
if (arrayBuffer) {
var result = new Uint8Array(arrayBuffer);
let outString = "";
let uerr = null;
//===================================
// 判断开头的处理 是否是压缩方式
if (result[0] == 0x1f && result[1] == 0x8b){
try {
outString = pako.inflate(result, { gzip: true, to: 'string'});