大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交。
乌尔禾ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
照片是自己用单反拍的,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真实图片的宽度 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 ****(***)
就是将标准的javascript按照一定方式进行体积压缩,但是功能不变,体积变小了,便于传输
一、下载并安装NodeJS for Windows 0.6.5 或进入NodeJS官网下载最新版本。
二、查看版本:
运行cmd
node -v
npm -v
如果上诉两个命令出错,请打开系统环境变量Path,直接点确定。再试。
三、安装UglifyJS 这里我们安装最新的版本,具体版本可在npm官网查看,uglify-js版本页面。
npm install uglify-js -g
然后等待命令完成,这个过程时间可能有点长。
如果出错请删除
C:\Users\Administrator\AppData\Roaming\npm 内相关内容
C:\Users\Administrator\AppData\Roaming\npm-cache 内相关内容
C:\Users\Administrator 下的错误信息文件
然后再次运行
四、修改配置
上述安装后自动生成的配置文件是不可直接使用的,我们需要手工去修改。
打开C:\Users\Administrator\AppData\Roaming\npm\uglifyjs.cmd
内容为:
:: Created by npm, please don't edit manually.
"%~dp0\.\node_modules\uglify-js\bin\uglifyjs" %*
修改为:
:: Created by npm, please don't edit manually.
@IF EXIST "%~dp0"\"node.exe" (
"%~dp0"\"node.exe" "%~dp0\.\node_modules\uglify-js\bin\uglifyjs" %*
) ELSE (
node "%~dp0\.\node_modules\uglify-js\bin\uglifyjs" %*
)
五、使用uglifyjs对javascript进行压缩美化
压缩:
uglifyjs f.js f.min.js
美化:
uglifyjs -b f.min.js f.b.js
今天小编要跟大家分享的文章是关于Web前端新手应该知道的JavaScript开发技巧有哪些?熟悉Web前端的小伙伴都知道,Javascript
的很多扩展的特性是的它变得更加的犀利,同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站。
尽管很多的开发人员都乐于颂扬javascript,但是仍旧有人看到它的阴暗面。
使用很多javascript代码的Web页面会加载很慢,过多的使用javascript使得网页丑陋和拖沓。很快如何有效地使用
javascript成为一个非常火热的话题。
今天小编就为Web前端新手准备了这篇JavaScript开发技巧,希望能够对你有所帮助,下面我们一起来看一看吧!
1、尽可能的保持代码简洁
可能大家都听到过了N遍这个代码简洁问题了。作为一个开发人员你可能在你的代码开发过程中使用了很多次,但千万不要在js开发中忘记这点。
§尽量在开发模式中添加注释和空格,这样保持代码的可读性
§在发布到产品环境前请将空格和注释都删除,并且尽量缩写变量和方法名
§使用第三方工具帮助你实现压缩javascript。
2、思考后再修改prototypes
添加新的属性到对象prototype中是导致脚本出错的常见原因。
yourObject.prototype.anotherFunction='Hello';
yourObject.prototype.anotherMethod=function(){...}
在上面代码中,所有的变量都会被影响,因为他们都继承于yourObject。这样的使用会导致意想不到的行为。所以建议在使用完后删除类似的修改。
yourObject.prototype.anotherFunction='Hello';
yourObject.prototype.anotherMethod=function(){};
test.anotherMethod();
deleteyourObject.prototype.anotherFunction='Hello';
deleteyourObject.prototype.anotherMethod=function(){};
3、DebugJavascript代码
即使最好的开发人员都会犯错。为了最大化的减少类似错误,请在你的debugger中运行你的代码,确认你没有遇到任何细微的错误。
4、避免Eval
你的JS在没有eval方法的时候也可以很好的工作。eval允许访问javascript编译器。如果一个字符串作为参数传递到
eval,那么它的结果可以被执行。
这会很大的降低代码的性能。尽量避免在产品环境中使用eval。
5、最小化DOM访问
DOM是最复杂的API,会使得代码执行过程变慢。有时候Web页面可能没有加载或者加载不完整。最好避免DOM。
6、在使用javascript类库之前先学习javascript
互联网充斥着很多的javascript类库,很多程序员都往往使用js类库而不理解负面影响。强烈建议你在使用第三方类库之前学习基本的JS
代码,否则,你就准备着倒霉吧。
7、不要用“SetTimeOut”和“Setinterval”方法来作为“Eval”的备选
setTimeOut("document.getID('value')",3000);
在以上代码中document.getID(‘value’)在setTimeOut方法中被作为字符串来处理。这类似于eval
方法,在每个代码执行中来执行一个字符串,因此会降低性能,因此,建议在这些方法中传递一个方法。
setTimeOut(yourFunction,3000);
8、[]比newArray();更好
一个常犯的错误在于使用当需要数组的时候使用一个对象或者该使用对象的时候使用一个数组。但是使用原则很简单:
“当属性名称是小的连续整数,你应该使用数组。否则,使用一个对象”_DouglasCrockford,JavaScript:Good
Parts的作者.
建议:
vara=['1A','2B'];
避免:
vara=newArray();
a[0]="1A";
a[1]="2B";
9、尽量不要多次使用var
在初始每一个变量的时候,程序员都习惯使用var关键字。相反,建议你使用逗号来避免多余的关键字,并且减少代码体积。如下:
varvariableOne='string1',
variableTwo='string2',
variableThree='string3';
10、不要忽略分号“;”
这往往是大家花费数个小时进行debug的原因之一。
我很确信你肯定也在其它的文章中阅读过以上相关的内容,但是大家可能往往都忽略了很多基本的规则。你是不是也曾经忽略过分号。是不是也遇到过eval
关键字问题导致性能问题?
以上就是小编今天为大家分享的关于Web前端新手应该知道的JavaScript
开发技巧有哪些?的文章,希望本篇文章能够对刚刚接触Web前端行业的新手们有所帮助。想要了解更多Web前端知识记得关注北大青鸟Web前端培训官网!
*声明:内容与图片均来源于网络(部分内容有修改),版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
这个站点里面有四个压缩引擎,一个YUI压缩,一个UglifyJS压缩,一个JSPacker压缩,和一个新的JsMin压缩。
一般用UglifyJS引擎压缩就可以。jQuery和好些其他的前端项目就是用他压缩的。
另外给个建议,你把你的JS文件用匿名函数的方式封装起来,对外只给一个接口。这样JS压缩引擎就可以把你匿名函数中不对外开放的内部变量名称都给替换成a,b,c,d这样的单字符,很能节省体积。
HTML
HEAD
TITLEDecision 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; 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("压缩后长度:" + 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);