本片讲解Egret使用JSZip解析加压的js代码,然后将其还原成可执行的js代码。
一 , 先将egret库打包 :
①:在网站根目录建一个egret文件夹,在其中放入类库
②:将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
>
|
网站结构:
使用浏览器查看加载结果:
如果不使用压缩 , 则结果是:
可以看出加载的代价比不压缩要高很多。尤其是当项目很大时。这就是压缩js的意义。。。。。
本文转自Aonaufly51CTO博客,原文链接:http://blog.51cto.com/aonaufly/1970528 ,如需转载请自行联系原作者