當前位置:首頁 » 文件管理 » javascript壓縮

javascript壓縮

發布時間: 2022-08-18 18:25:58

1. javascript代碼壓縮用壓縮工具還是自己寫代碼壓縮

一般用工具,可以使用ant做些自動化壓縮設置,
推薦兩個:
1.yui compressor
http://www.oschina.net/p/yui+compressor
2.Google Closure Compiler

2. 求javascript 字元串壓縮演算法

<HTML>
<HEAD>
<TITLE>Decision Helper</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">

<SCRIPT LANGUAGE="JavaScript">
<!--
function Compress(strNormalString)
{
alert("壓縮前長度:" + 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; i<strNormalString.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("壓縮後長度:" + 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; i<strCompressedString.length; i++) {
intLeftOver += 16;
intOutputCode <<= 16;
intOutputCode |= strCompressedString.charCodeAt(i);

3. 如何壓縮javascript和css文件

一、壓縮html和javascript:
我們用站長工具的JavaScript-HTML格式化工具,我們打開頁面,我今天要壓縮的文件js文件:common.js ,把js代碼復制到到JavaScript/HTML格式化工具裡面如下圖所示:

點擊下面的「普通壓縮」和「加密壓縮」按鈕,經過我的精心測試,使用「加密壓縮」,對文件壓縮率是最好的,所以點擊「加密壓縮」,壓縮後如圖:

javascript代碼壓縮後,我們就把這些代碼在復制到common.js文件裡面,在吧這個文件上傳到空間原來的位置,進行訪問是否存在一些錯誤,如果沒有什麼問題說明壓縮成功;

我的common.js 文件壓縮前和壓縮後的對比:
壓縮前:

壓縮後:

文件壓縮前和壓縮後確實有明確的減少,說明壓縮確實減少文件的大小,
我們來測試文件壓縮前和壓縮後所有能的時間做對比(我是用火狐插件測試傳輸速度):
壓縮前所用時間:

壓縮後所用時間:

壓縮前所用時間是:125ms,壓縮後所用時間:78ms ,文件壓縮後給我們節省大量的時間,如果每個js都進行壓縮,我們房子訪問速度會更快的。

(註:html文件和javascript壓縮原來一樣的,當時壓縮html要用到「普通壓縮」按鈕壓縮)

二、壓縮css文件:
我們打開站長工具的Css壓縮/格式化工具頁面,我要壓縮的文件是五色旗保健品商城的css主文件style.css,首先我們打開站長工具的Css壓縮/格式化工具頁面 ,把style.css 代碼放到Css壓縮/格式化工具裡面,如下圖所示:

點擊「壓縮代碼」按鈕後,css代碼壓縮成功,如下圖所示:

後邊就是壓縮後的css代碼,你要不右邊的代碼復制到源文件style.css裡面在上傳到伺服器空間裡面,在訪問一下網,看看網頁樣式有沒有改變,如果有點變化就需要簡單的調試一下,如果沒有變樣,說明你的css壓縮成功了;
下面我們來看看styl.css文件壓縮前和壓縮後的大小和放在訪問速度的大小:
文件大小對比:
壓縮前:

壓縮後:

壓縮前30kb,壓縮後23kb,明顯的文件大小減小了
壓縮前所用時間:

css壓縮前的時間.jpg (7.36 KB, 下載次數: 0)
下載附件
css壓縮前的時間.jpg
2013-11-2 00:35 上傳

壓縮後所用時間:

壓縮前所用時間是:188ms,壓縮後所用時間:93ms ,css壓縮後明顯的節省了95ms;

總結:一個大的網站可能會有很多的javascript和css,如果沒有都進行壓縮的話,一定會減少很多文件大小的,其實減少文件大少並不是很重要,最重要的是,文件容量減少了,能夠快速的提高網站訪問的速度,給用戶帶來好的體驗,我們盡量的把文件壓縮到最小,這樣才有利於用戶快速的打開網站,至此我的五色旗保健品商城優化後,我的每天的訪問量也增加了很多。

4. 如何編寫 JavaScript 使得壓縮後的代碼完全不可讀

大部分壓縮工具為了保證對任意代碼的兼容,通常只縮短 function scope 裡面 local 的變數名,對於全局變數和對象屬性名都是保留的。比如:
function doSomething (longArgumentName) {
var longVarName = 123
return longArgumentName + longVarName
}

var globalObject = {
longMethodName: doSomething
}

其中 doSomething 內部的 longArgumentName 和 longVarName 都可以縮短為單個字母;但是 doSomething, globalObject 以及其他地方對 globalObject.longMethodName 的調用都無法壓縮。這樣壓縮的結果就是 beautify 一下以後多少還是會保留一些原代碼的可讀性。
Google 的 Closure Compiler 在 Advanced Optimization 模式下,可以通過對代碼風格進行一定的限制,以及加上 JSDoc 注釋來提示壓縮工具哪些全局變數、方法名是可以壓縮的,從而實現題主例子里的壓縮效果,但這樣的壓縮並不能作用在任意代碼上。

5. 如何在本地利用javascript解壓縮gzip文件

關於JavaScript的gzip靜態壓縮方法
http://www.jb51.net/article/5960.htm
有代碼示例

6. 壓縮後的JS代碼怎樣解壓縮

一般壓縮都經過混淆,如果你看到變數名都是A,B,C,D之類的無規則的命名,那就是被混淆過的,一般來說也很難閱讀,就算你 還原了格式。

如果是沒有混淆的,你可以試試用js的格式化工具來重新格式化一下的,比如:
/* 美化:格式化代碼,使之容易閱讀 */
/* 凈化:去掉代碼中多餘的注釋、換行、空格等 */
/* 壓縮:將代碼壓縮為更小體積,便於傳輸 */
/* 解壓:將壓縮後的代碼轉換為人可以閱讀的格式 */
/* 混淆:將代碼的中變數名簡短化以減小體積,但可讀性差,經混淆後的代碼無法還原 */

/* 如果有用,請別忘了推薦給你的朋友: */
/* javascript在線美化、凈化、壓縮、解壓:http://tool.lu/js */

/* 以下是演示代碼 */
var Inote = {};
Inote.JSTool = function(options) {
this.options = options || {};
};
Inote.JSTool.prototype = {
_name: 'Javascript工具',
_history: {
'v1.0': ['2011-01-18', 'javascript工具上線'],
'v1.1': ['2012-03-23', '增加混淆功能'],
'v1.2': ['2012-07-21', '升級美化功能引擎'],
'v1.3': ['2014-03-01', '升級解密功能,支持eval,window.eval,window["eval"]等的解密'],
'v1.4': ['2014-08-05', '升級混淆功能引擎'],
'v1.5': ['2014-08-09', '升級js壓縮引擎'],
'v1.6': ['2015-04-11', '升級js混淆引擎']
},
options: {},
getName: function() {return this._name;},
getHistory: function() {
return this._history;}
};
var jstool = new Inote.JSTool();

7. 怎麼用JavaScript在線壓縮圖片

主要用了兩個html5的 API,一個file,一個canvas,壓縮主要使用cnavas做的,file是讀取文件,之後把壓縮好的照片放入內存,最後內存轉入表單下img.src,隨著表單提交。
照片是自己用單反拍的,5M多,壓縮下面3張分別是600多kb,400多kb,300kb的最後那張失真度很大了,壓縮效率蠻高的。

<!DOCTYPE html>
<html><head> <meta charset="utf-8"/> <title>File 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></head><body><input type="file" id="fileImg" ><form> <img src="" id="test" alt=""></form><script> 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真實圖片的寬度 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 ****(***)

8. JavaScript中利用Array filter() 方法壓縮稀疏數組

什麼是稀疏數組

數組元素的索引不一定要連續的,它們之間可以有空缺。每個javaScript數組都有一個length屬性。針對非稀疏數組,該屬性就是數組元素的個數;針對稀疏數組,length比所有元素的個數要大。
Array
filter()
方法會跳過稀疏數組中缺少的元素,它的返回數組總是稠密的。
(1)壓縮稀疏數組的空缺:
var
dense
=
sparse.filter(
function(currentValue)
{
return
true;
}
);
(2)壓縮稀疏數組的空缺,並且刪除
undefined

null
元素:
var
dense
=
sparse.filter(
function(currentValue)
{
return
currentValue
!==
undefined
&&
currentValue!=
null;
}
)
總結
以上所述是小編給大家介紹的JavaScript中利用Array
filter()
方法壓縮稀疏數組,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
您可能感興趣的文章:javascript稀疏數組(sparse
array)和密集數組用法分析JavaScript中的稀疏數組與密集數組[譯]

9. javascript 壓縮版本怎麼使用

壓縮版和開發版使用方式一樣,直接引用就可以了。
只不過壓縮版體積更小,載入更快。
缺點是報錯後不好定位錯誤。

10. 誰有JavaScript壓縮工具 好用的 給我一份

給你我自己用的代碼吧~~~
package com.wanghe;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* 腳本處理類
* 1.實現壓縮單個js文件--去除注釋換行和多個空格,最終輸出一行字元串
* 2.實現批量js壓縮功能,壓縮目錄下的所有js文件到對應的輸出目錄下
* 3.實現js合並功能 根據需要壓縮的列表和輸出文件路徑及是否壓縮生成對應文件
* @author zheng
* @version 1.0
*/
public class ScriptHelp
{
private static final String ENCODE = "GBK";

public static void main(String[] args)
{
//批量壓縮js文件
String baseScriptPath = "D:/easy-tab.js";
String miniScriptPath = "D:/mini/easy-tab-mini.js";
//batchCompressJS(baseScriptPath,miniScriptPath);
compressSingleJS(baseScriptPath,miniScriptPath);
//壓縮單個js文件
//compressSingleJS("D:/workspace/coos/WebRoot/scripts/coos.js","D:/workspace/coos/WebRoot/scripts/mini/coos.js");
/*
//合並js文件
List<String> fileList = new ArrayList<String>();
fileList.add("D:/workspace/coos/WebRoot/scripts/coos.js");
fileList.add("D:/workspace/coos/WebRoot/scripts/coos.extend.ajax.js");
String toFile = "D:/workspace/coos/WebRoot/scripts/mini/coos.js";
mergeJS(fileList,toFile,true);
*/
}
/**
* 批量壓縮js,壓縮當前目錄下的所有js
* @param baseScriptPath 要壓縮的文件目錄
* @param miniScriptPath 輸出壓縮後對應的目錄
*/
@SuppressWarnings("unchecked")
public static void batchCompressJS(String baseScriptPath,String miniScriptPath)
{
//獲取當前目錄下所以js文件路徑(不包括子目錄)
List fileList = getListFiles(baseScriptPath,"js",false);

for (Iterator i = fileList.iterator(); i.hasNext();)
{
String fromFile = (String) i.next();
String toFile = miniScriptPath +fromFile.substring(fromFile.lastIndexOf("/"), fromFile.length());
compressSingleJS(fromFile,toFile);
}
}

/**
* 壓縮單個js文件
* @param fromFile
* @param toFile
*/
public static void compressSingleJS(String fromFile,String toFile)
{
String content = readFile(fromFile);
writeFile(compressJS(content),toFile);
}
/**
* 合並js文件
* @param fileList 文件全路徑的list,需要按順序
* @param toFile 輸出文件的全路徑
* @param isCompress 是否壓縮
*
*/
@SuppressWarnings("unchecked")
public static void mergeJS(List fileList,String toFile,Boolean isCompress)
{
String content = "";
for (Iterator i = fileList.iterator(); i.hasNext();)
{
String fromFile = (String) i.next();
content += readFile(fromFile);
}
if(isCompress == true)
writeFile(compressJS(content),toFile);
else
writeFile(content,toFile);
}
/**
* 去除注釋、多個空格和換行,最終形成一行的字元串
* @param content 要壓縮的內容
* @return 壓縮後的內容
*/
public static String compressJS(String content)
{
//去掉/*some code*/的注釋 注意alert()里不要有/**/
content = content.replaceAll("//.*[\\r\\n]","");
//去掉/*some code*/的注釋 注意alert()里不要有/**/
content = content.replaceAll("\\/\\*(a|[^a])*?\\*\\/","");
/*多餘的空格*/
content = content.replaceAll("\\s{2,}"," ");
//等號兩邊的空格去掉
content = content.replaceAll("\\s*=\\s*","=");
//}兩邊的空格去掉
content = content.replaceAll("\\s*}\\s*","}");
//{兩邊的空格去掉
content = content.replaceAll("\\s*\\{\\s*","\\{");
//冒號兩邊的空格去掉
content = content.replaceAll("\\s*:\\s*",":");
//逗號兩邊的空格去掉
content = content.replaceAll("\\s*,\\s*",",");
//分號兩邊的空格去掉
content = content.replaceAll("\\s*;\\s*",";");
//與兩邊的空格去掉
content = content.replaceAll("\\s*&&\\s*","&&");
//或兩邊的空格去掉
content = content.replaceAll("\\s*\\|\\|\\s*","\\|\\|");
/*替換換行和回車*/
content = content.replaceAll("\\r\\n","").replaceAll("\\n", "");
return content;
}
/**
* 輸出文件,編碼為UTF-8 用記事本另存為:fileContent 全部為英文則為ansi 包含中文則為UTF-8
* @param content 要輸出的文件內容
* @param comspec 全路徑名
*/
public static void writeFile(String content,String comspec)
{
try
{
int i = comspec.lastIndexOf("/");
String dirs = comspec.substring(0,i);
File file = new File(dirs);
if(!file.exists()){
file.mkdir();
}
file = new File(comspec);
if(!file.exists()){
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
Writer out = new OutputStreamWriter(fos,ENCODE);
out.write(content);
System.out.println("成功輸出文件:" + comspec);
out.close();
fos.close();
} catch (IOException e)
{
System.out.println("寫文件操作出錯!");
e.printStackTrace();
}
}

/**
* 讀取文件內容
* @param filePath
* @return String
*/
public static String readFile(String filePath)
{
StringBuilder sb = new StringBuilder();
try
{
File file = new File(filePath);
InputStreamReader read = new InputStreamReader (new FileInputStream(file),ENCODE);
BufferedReader reader=new BufferedReader(read);
String s = reader.readLine();
while (s != null)
{
sb.append(s);
sb.append("\r\n");
s = reader.readLine();
}
reader.close();
} catch (IOException e)
{
e.printStackTrace();
}
return sb.toString();
}

public static List<String> fileList = new ArrayList<String>();
/**
* @param path 文件路徑
* @param suffix 後綴名
* @param isdepth 是否遍歷子目錄
* @return fileList
*/
@SuppressWarnings("unchecked")
public static List getListFiles(String path, String suffix, boolean isdepth)
{
File file = new File(path);
return listFile(path,file ,suffix, isdepth);
}
/**
* 獲取當前目錄下文件路徑
* @param path
* @param f
* @param suffix
* @param isdepth
* @return
*/
@SuppressWarnings("unchecked")
public static List listFile(String path, File f, String suffix, boolean isdepth)
{
//是目錄,同時需要遍歷子目錄
String temp = path.replaceAll("/","\\\\");
if ((f.isDirectory() && isdepth == true) || temp.equals(f.getAbsolutePath()))
{
File[] t = f.listFiles();
for (int i = 0; i < t.length; i++)
{
listFile(path,t[i], suffix, isdepth);
}
}
else
{
addFilePath(f ,suffix, isdepth);
}
return fileList;
}

/**
* 添加文件路徑到list中
* @param f
* @param suffix
* @param isdepth
* @return
*/
@SuppressWarnings("unchecked")
public static List addFilePath(File f, String suffix, boolean isdepth)
{
String filePath = f.getAbsolutePath().replaceAll("\\\\", "/");
if(suffix !=null)
{
int begIndex = filePath.lastIndexOf(".");
String tempsuffix = "";

if(begIndex != -1)//防止是文件但卻沒有後綴名結束的文件
{
tempsuffix = filePath.substring(begIndex + 1, filePath.length());
}
if(tempsuffix.equals(suffix))
{
fileList.add(filePath);
}
}
else
{
fileList.add(filePath);//後綴名為null則為所有文件
}
return fileList;
}

}

熱點內容
s7200編程s7200 發布:2025-05-14 04:28:32 瀏覽:412
安卓定製版蘋果手機是什麼意思 發布:2025-05-14 04:26:27 瀏覽:378
如何搭建php環境虛擬伺服器免費 發布:2025-05-14 04:25:37 瀏覽:102
相冊加密怎麼看 發布:2025-05-14 04:24:53 瀏覽:573
怎麼壓縮郵件 發布:2025-05-14 04:16:51 瀏覽:497
雲伺服器搭建郵箱綁定郁悶 發布:2025-05-14 04:16:48 瀏覽:149
crc校驗c語言演算法 發布:2025-05-14 04:15:15 瀏覽:45
curl靜態編譯 發布:2025-05-14 04:09:52 瀏覽:160
壓縮久期 發布:2025-05-14 04:08:46 瀏覽:942
sql置疑 發布:2025-05-14 04:07:09 瀏覽:441