這個(gè)站點(diǎn)里面有四個(gè)壓縮引擎,一個(gè)YUI壓縮,一個(gè)UglifyJS壓縮,一個(gè)JSPacker壓縮,和一個(gè)新的JsMin壓縮。
成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶(hù)提供成都服務(wù)器托管 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。
一般用UglifyJS引擎壓縮就可以。jQuery和好些其他的前端項(xiàng)目就是用他壓縮的。
另外給個(gè)建議,你把你的JS文件用匿名函數(shù)的方式封裝起來(lái),對(duì)外只給一個(gè)接口。這樣JS壓縮引擎就可以把你匿名函數(shù)中不對(duì)外開(kāi)放的內(nèi)部變量名稱(chēng)都給替換成a,b,c,d這樣的單字符,很能節(jié)省體積。
主要用了兩個(gè)html5的 API,一個(gè)file,一個(gè)canvas,壓縮主要使用cnavas做的,file是讀取文件,之后把壓縮好的照片放入內(nèi)存,最后內(nèi)存轉(zhuǎn)入表單下img.src,隨著表單提交。
照片是自己用單反拍的,5M多,壓縮下面3張分別是600多kb,400多kb,300kb的最后那張失真度很大了,壓縮效率蠻高的。
!DOCTYPE html
htmlhead meta charset="utf-8"/ titleFile API Test/title script type="text/javascript" src="js/jquery-1.11.0.min.js"/script script type="text/javascript" src="js/JIC.js"/script style #test{ display: none; } /style/headbodyinput type="file" id="fileImg" form img src="" id="test" alt=""/formscript function handleFileSelect (evt) { // var filebtn = document.getElementById(id); // console.log(filebtn); // var files = filebtn.target.files; // console.log(filebtn.target); // console.log(files); var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. // console.log(evt.target.files[0]); // console.log(e.target); console.log(e.target.result); var i = document.getElementById("test"); i.src = event.target.result; console.log($(i).width()); console.log($(i).height()); $(i).css('width',$(i).width()/10+'px'); //$(i).css('height',$(i).height()/10+'px'); console.log($(i).width()); console.log($(i).height()); var quality = 50; i.src = jic.compress(i,quality).src; console.log(i.src); i.style.display = "block"; }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('fileImg').addEventListener('change', handleFileSelect, false);/script/body/html
var jic = { /** * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed * @param {Image} source_img_obj The source Image Object * @param {Integer} quality The output quality of Image Object * @return {Image} result_image_obj The compressed Image Object */ compress: function(source_img_obj, quality, output_format){ var mime_type = "image/jpeg"; if(output_format!=undefined output_format=="png"){ mime_type = "image/png"; } var cvs = document.createElement('canvas'); //naturalWidth真實(shí)圖片的寬度 cvs.width = source_img_obj.naturalWidth; cvs.height = source_img_obj.naturalHeight; var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0); var newImageData = cvs.toDataURL(mime_type, quality/100); var result_image_obj = new Image(); result_image_obj.src = newImageData; return result_image_obj; }, function ****(***)
簡(jiǎn)單的壓縮一般是:刪除注釋和空白符,替換變量名。
更激進(jìn)點(diǎn)的做法還包括:刪除無(wú)用代碼,內(nèi)聯(lián)函數(shù),等價(jià)語(yǔ)句替換等。
有些開(kāi)發(fā)者出于保護(hù)代碼的原因,還可能會(huì)對(duì)代碼進(jìn)行混淆處理。
通常深度壓縮JS都必須要做的一步就是盡量地縮短變量名,因?yàn)橐环蒹w積巨大的JS代碼,其中的變量名會(huì)占去不少空間。
壓縮js必須要注意:
1、壓縮前的代碼格式要標(biāo)準(zhǔn)。因?yàn)槿サ魮Q行與空格時(shí),所有語(yǔ)句就變成一行,如果你的代碼有瑕疵(比如某行少了個(gè)分號(hào)),那就會(huì)導(dǎo)致整個(gè)文件報(bào)錯(cuò)。當(dāng)然,現(xiàn)在有的壓縮工具已經(jīng)比較智能了。
2、備份原文件。壓縮很可能不會(huì)一次成功,一般要多試,多改。
js壓縮工具:
1. YUI Compressor
2. Google Closure Compiler
就是將標(biāo)準(zhǔn)的javascript按照一定方式進(jìn)行體積壓縮,但是功能不變,體積變小了,便于傳輸
HTML
HEAD
TITLEDecision Helper/TITLE
META http-equiv=Content-Type content="text/html; charset=gb2312"
SCRIPT LANGUAGE="JavaScript"
!--
function Compress(strNormalString)
{
alert("壓縮前長(zhǎng)度:" + strNormalString.length);
var strCompressedString = "";
var ht = new HashTable;
for(i = 0; i 128; i++) {
var e = new HashTableElement;
e.key = i;
e.code = i;
ht.Insert(e);
}
var used = 128;
var intLeftOver = 0;
var intOutputCode = 0;
var pcode = 0;
var ccode = 0;
var k = 0;
for(var i=0; istrNormalString.length; i++) {
ccode = strNormalString.charCodeAt(i);
k = (pcode 8) | ccode;
if((intSearch = ht.Search(k)) != null) {
pcode = intSearch;
} else {
intLeftOver += 12;
intOutputCode = 12;
intOutputCode |= pcode;
pcode = ccode;
if(intLeftOver = 16) {
strCompressedString += String.fromCharCode( intOutputCode ( intLeftOver - 16 ) );
intOutputCode = (Math.pow(2,(intLeftOver - 16)) - 1);
intLeftOver -= 16;
}
if(used 4096) {
used ++;
var e = new HashTableElement;
e.key = k;
e.code = used - 1;
ht.Insert(e);
}
}
}
if(pcode != 0) {
intLeftOver += 12;
intOutputCode = 12;
intOutputCode |= pcode;
}
if(intLeftOver = 16) {
strCompressedString += String.fromCharCode( intOutputCode ( intLeftOver - 16 ) );
intOutputCode = (Math.pow(2,(intLeftOver - 16)) - 1);
intLeftOver -= 16;
}
if( intLeftOver 0) {
intOutputCode = (16 - intLeftOver);
strCompressedString += String.fromCharCode( intOutputCode );
}
alert("壓縮后長(zhǎng)度:" + strCompressedString.length);
return strCompressedString;
}
function Decompress(strCompressedString)
{
var strNormalString = "";
var ht = new Array;
for(i = 0; i 128; i++)
{
ht[i] = String.fromCharCode(i);
}
var used = 128;
var intLeftOver = 0;
var intOutputCode = 0;
var ccode = 0;
var pcode = 0;
var key = 0;
for(var i=0; istrCompressedString.length; i++) {
intLeftOver += 16;
intOutputCode = 16;
intOutputCode |= strCompressedString.charCodeAt(i);
分享標(biāo)題:javascript壓縮,js壓縮算法
文章出自:http://jinyejixie.com/article8/dssehop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、ChatGPT、網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站設(shè)計(jì)、微信小程序、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)