Egret之JSZip高级应用:压缩JS

简介:

本片讲解Egret使用JSZip解析加压的js代码,然后将其还原成可执行的js代码。

一 , 先将egret库打包 :

①:在网站根目录建一个egret文件夹,在其中放入类库

wKiom1nXN_HwYQ8tAADKOKxCWbw778.png-wh_50

②:将egret文件夹打包成egret.zip


二 , 将main.min.js打包成main.min.js.zip


三 , index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<!DOCTYPE HTML>
< html >
< head >
     < meta  charset = "utf-8" >
     < title >Egret</ title >
     < meta  name = "viewport"  content = "width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"  />
     < meta  name = "apple-mobile-web-app-capable"  content = "yes"  />
     < meta  name = "full-screen"  content = "true"  />
     < meta  name = "screen-orientation"  content = "portrait"  />
     < meta  name = "x5-fullscreen"  content = "true"  />
     < meta  name = "360-fullscreen"  content = "true"  />
     < style >
         html, body {
             -ms-touch-action: none;
             background: #888888;
             padding: 0;
             border: 0;
             margin: 0;
             height: 100%;
         }
     </ style >
  < script  egret = "libs"  src = "libs/modules/jszip/jszip.min.js" ></ script >
</ head >
< body >
     < div  style = "margin: auto;width: 100%;height: 100%;"  class = "egret-player"
          data-entry-class = "Main"
          data-orientation = "auto"
          data-scale-mode = "showAll"
          data-frame-rate = "30"
          data-content-width = "640"
          data-content-height = "1136"
          data-show-paint-rect = "false"
          data-multi-fingered = "2"
          data-show-fps = "false"  data-show-log = "false"
          data-show-fps-style = "x:0,y:0,size:12,textColor:0xffffff,bgAlpha:0.9" >
     </ div >
< script >
        //加载egret的引擎库
     try
     {
         loadZip("egret.zip",function(zip)
         {
             //压缩进的egret引擎的各个代码文件
             var files = ["egret.min.js", "egret.web.min.js", "res.min.js", "tween.min.js", 
    "dragonBones.min.js","eui.min.js","game.min.js","jszip.min.js","particle.min.js"];
             for (var i = 0; i < files.length; i++)
             {
                 createScript(zip,"egret/"+files[i]);
             }
             //加载游戏代码
             loadZip("main.min.js.zip" + "?v=" + Math.random(),function(zip)
             {
                 createScript(zip,"main.min.js");
                 //全部加载完成,启动egret游戏
                 egret.runEgret({ renderMode: "webgl", audioType: 0,retina:true});
             });
         });
     }
     catch (e)
     {
         //压缩失败,实际项目这里需要改为加载没压缩的js文件。
         console.error("jszip解压文件报错,进行普通文件加载");
     }
     //加载单个zip文件,成功后进行回调
     function loadZip(url,callBack)
     {
         var xhrZip = new XMLHttpRequest();
         xhrZip.open("GET", url, true);
         xhrZip.responseType = "arraybuffer";
         xhrZip.addEventListener("load", function (oEvent)
         {
             var arrayBuffer = xhrZip.response; // 注意:不是oReq.responseText
             if (!arrayBuffer)
             {
                 console.log(url + "解析异常:" + xhrZip);
                 throw new Error("zip异常");
             }
             callBack(new JSZip(arrayBuffer));
         });
         xhrZip.send(null);
     }
     function createScript(zip,file)
     {
         //解压出来变成script脚本
         var text = zip.file(file).asText();
         var script = document.createElement("script");
         script.setAttribute("type", "text/javascript");
         script.text = text;
         document.body.appendChild(script);
         document.body.removeChild(script);
     }
</ script >
</ body >
</ html >

网站结构:

wKioL1nXP8yBUTeWAADWTXDautM482.png-wh_50


使用浏览器查看加载结果:

wKiom1nXQEuRzaO4AAA8tCK2uV0103.png-wh_50


如果不使用压缩 , 则结果是:

wKiom1nXQIChcyN2AACf_zqQe9g426.png-wh_50

可以看出加载的代价比不压缩要高很多。尤其是当项目很大时。这就是压缩js的意义。。。。。















本文转自Aonaufly51CTO博客,原文链接:http://blog.51cto.com/aonaufly/1970528 ,如需转载请自行联系原作者



相关文章
|
1月前
|
开发框架 前端开发 JavaScript
使用JavaScript、jQuery和Bootstrap构建待办事项应用
使用JavaScript、jQuery和Bootstrap构建待办事项应用
11 0
|
1月前
|
自然语言处理 JavaScript 前端开发
探索JavaScript中的闭包:理解其原理与实际应用
探索JavaScript中的闭包:理解其原理与实际应用
19 0
|
2月前
|
前端开发 JavaScript 安全
从前端性能优化角度谈JavaScript代码压缩与混淆
本文从前端性能优化的角度出发,探讨了JavaScript代码压缩与混淆的重要性及实现方式,通过分析不同压缩混淆工具的特点和效果,为开发者提供了实用的指导和建议。
|
26天前
|
JavaScript 前端开发 算法
js开发:请解释什么是虚拟DOM(virtual DOM),以及它在React中的应用。
虚拟DOM是React等前端框架的关键技术,它以轻量级JavaScript对象树形式抽象表示实际DOM。当状态改变,React不直接操作DOM,而是先构建新虚拟DOM树。通过高效diff算法比较新旧树,找到最小变更集,仅更新必要部分,提高DOM操作效率,降低性能损耗。虚拟DOM的抽象特性还支持跨平台应用,如React Native。总之,虚拟DOM优化了状态变化时的DOM更新,提升性能和用户体验。
21 0
|
1月前
|
JavaScript 前端开发 索引
JavaScript字符串检查:从基础到高级
【2月更文挑战第26天】
24 0
JavaScript字符串检查:从基础到高级
|
3天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
23天前
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
11 1
|
1月前
|
JavaScript 前端开发
HTML JS 应用
HTML JS 应用
19 3
|
1月前
|
JavaScript 前端开发 算法
Vue.js的单向数据流:让你的应用更清晰、更可控
Vue.js的单向数据流:让你的应用更清晰、更可控
|
1月前
|
JavaScript 前端开发 API
Vue.js 深度解析:nextTick 原理与应用
Vue.js 深度解析:nextTick 原理与应用