当前位置:首页 » 文件管理 » 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;
}

}

热点内容
python文件删除一行 发布:2025-05-14 08:06:58 浏览:720
如何下载奥特曼高级化3安卓版 发布:2025-05-14 07:47:31 浏览:346
qml文件修改后编译未生效 发布:2025-05-14 07:31:00 浏览:331
内到内算法 发布:2025-05-14 07:29:11 浏览:34
文件夹名字不显示 发布:2025-05-14 07:27:47 浏览:775
oracle的数据库驱动jar 发布:2025-05-14 07:23:20 浏览:556
我的世界电脑版服务器手机版能进吗 发布:2025-05-14 07:22:01 浏览:679
达内培训php多少钱 发布:2025-05-14 07:19:10 浏览:27
python字节转字符串 发布:2025-05-14 07:06:35 浏览:423
subplotpython 发布:2025-05-14 06:53:51 浏览:662