Cocos Creator 打包WebMobile,实现资源代码分离,部署 cdn

前言

CDN优势

大型Web应用对速度的追求并没有止步于仅仅利用浏览器缓存,因为浏览器缓存始终只是为了提升二次访问的速度,对于首次访问的加速,我们需要从网络层面进行优化,最常见的手段就是CDN(Content Delivery Network,内容分发网络)加速。CDN通过分布式方案,通过空间换时间的方法,用冗余的空间换取时间,是典型的分布式实例。

其核心就在于用户和网站服务器的物理距离以及传输速度,CDN通过缓存机制简单粗暴地缩短用户和访问内容的距离,以达到加速访问的效果。通过将静态资源缓存到离用户很近的相同网络运营商的CDN节点上,不但能提升用户的访问速度,还能节省服务器的带宽消耗,降低负载

正文

v2.4 以下

如果打包WebMobile 后结构如下
在这里插入图片描述

main文件改之前

window.boot = function () { 
    var settings = window._CCSettings;
	...
    // init assets
    cc.AssetLibrary.init({
        libraryPath: 'res/import',
        rawAssetsBase: 'res/raw-',
        rawAssets: settings.rawAssets,
        packedAssets: settings.packedAssets,
        md5AssetsMap: settings.md5AssetsMap,
        subpackages: settings.subpackages
    });

    cc.game.run(option, onStart);
};

main文件改之后

window.boot = function () {
    var remote_url = "https://<your cdn domain>/<publishConfig.baseDir>/<versionFolder>/";
    var settings = window._CCSettings;
	...
    // init assets
    cc.AssetLibrary.init({
        libraryPath: remote_url + 'res/import',
        rawAssetsBase: remote_url + 'res/raw-',
        rawAssets: settings.rawAssets,
        packedAssets: settings.packedAssets,
        md5AssetsMap: settings.md5AssetsMap,
        subpackages: settings.subpackages
    });

    cc.game.run(option, onStart);
};

v2.4

Cocos Creator 从 v2.4 开始,推出了 Asset Bundle 功能,支持 代码、资源 和 场景 的分包加载。结构做出了相应改变,但是只要我们细心查找 一定能发现 cc.assetManager.loadBundle 加载资源使用的,接下来我们就从此入手。

如果打包WebMobile 后结构如下
在这里插入图片描述

main文件修改之前

window.boot = function () {
	...
    var bundleRoot = [INTERNAL];
    settings.hasResourcesBundle && bundleRoot.push(RESOURCES);

    var count = 0;
    function cb (err) {
        if (err) return console.error(err.message, err.stack);
        count++;
        if (count === bundleRoot.length + 1) {
            cc.assetManager.loadBundle(MAIN, function (err) {
                if (!err) cc.game.run(option, onStart);
            });
        }
    }

    cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x;}), cb);

    for (var i = 0; i < bundleRoot.length; i++) {
	    cc.assetManager.loadBundle(bundleRoot[i], cb);
    }
	...
}

main文件修改之后

// CDN 路径
var remote_url="https://<your cdn domain>/<publishConfig.baseDir>/<versionFolder>/assets/";

window.boot = function () {
	...
    var bundleRoot = [INTERNAL];
    settings.hasResourcesBundle && bundleRoot.push(RESOURCES);

    var count = 0;
    function cb (err) {
        if (err) return console.error(err.message, err.stack);
        count++;
        if (count === bundleRoot.length + 1) {
            console.log('main 地址:' + MAIN);
            cc.assetManager.loadBundle(remote_url + MAIN, function (err) {
                if (!err) cc.game.run(option, onStart);
            });
        }
    }

    cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x;}), cb);

    // for (var i = 0; i < bundleRoot.length; i++) {
    //     cc.assetManager.loadBundle(bundleRoot[i], cb);
    // }

    for (var i = 0; i < bundleRoot.length; i++) {
        console.log('其他地址:' + bundleRoot[i]);
        cc.assetManager.loadBundle(remote_url+bundleRoot[i], cb);
    }
	...
}

若阅读上述后还是没看明白,建议到Cocos Creator官方地址进行查看。官方还给出了
通过自定义构建模板功能修改 main.js 中的代码,简附

// ...

let bundleRoot = [];
// 加入 internal bundle 的 URL 地址
bundleRoot.push('http://myserver.com/assets/internal');
// 如果有 resources bundle, 则加入 resources bundle 的 URL 地址
bundleRoot.push('http://myserver.com/assets/resources');
// 加入 main bundle 的 URL 地址
bundleRoot.push('http://myserver.com/assets/main');

var count = 0;
function cb (err) {
    if (err) {
        return console.error(err.message, err.stack);
    }
    count++;
    if (count === bundleRoot.length + 1) {
        cc.game.run(option, onStart);
    }
}

cc.assetManager.loadScript(settings.jsList.map(x => 'src/' + x), cb);

for (let i = 0; i < bundleRoot.length; i++) {
    cc.assetManager.loadBundle(bundleRoot[i], cb);
}
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值