- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
JQuery有两个版本可供下载,一个是Production(19KB,压缩和 Gzipped),另一个是Development(120KB,未压缩代码)。
现在压缩版只有19kb,如果你下载它,你会看到仍然是一段javascript可执行代码。他们是如何压缩它的?我怎样才能像那样“缩小”我的代码?
最佳答案
DIY 缩小
没有压缩器可以正确压缩错误代码。
在这个例子中,我只想展示一个 minifier 做了多少。
在缩小之前你应该做什么
关于 jQuery...我不使用 jQuery。jQuery 是用于旧浏览器的,它是出于兼容性原因而制作的..检查 caniuse.com,几乎所有内容都适用于每个浏览器(现在 ie10 已标准化) ,我认为现在它只是为了减慢您的 Web 应用程序...如果您喜欢 $()
您应该创建自己的简单函数。如果您的客户需要,为什么还要费心压缩您的代码每次都下载 100kb 的 jquery 脚本?你的未压缩代码有多大? 5-6kb..?更不用说您为了简化操作而添加的大量插件。
原始代码
当你写一个函数时,你有一个想法,开始写东西,有时你最终会得到类似下面代码的东西。代码有效。现在大多数人停止思考并将它添加到压缩器并发布它。
function myFunction(myNumber){
var myArray = new Array(myNumber);
var myObject = new Object();
var myArray2 = new Array();
for(var myCounter = 0 ; myCounter < myArray.length ; myCounter++){
myArray2.push(myCounter);
var myString = myCounter.toString()
myObject[ myString ] = ( myCounter + 1 ).toString();
}
var myContainer = new Array();
myContainer[0] = myArray2;
myContainer[1] = myObject;
return myContainer;
}
这是精简代码(我添加了新行)
缩小使用 ( http://javascript-minifier.com/ )
function myFunction(r){
for(var n=new Array(r),t=new Object,e=new Array,a=0;a<n.length;a++){
e.push(a);
var o=a.toString();
t[o]=(a+1).toString()
}
var i=new Array;
return i[0]=e,i[1]=t,i
}
但是所有这些变量、if、循环和定义都是必要的吗?
大多数时候不!
可选(提高性能并缩短代码)
Math
)while
,for
...而不是forEach
)"{}","()",";",空格,换行符
现在,如果一个压缩器可以压缩代码,那你就错了。
没有压缩器可以正确压缩错误代码。
DIY
function myFunction(a,b,c){
for(b=[],c={};a--;)b[a]=a,c[a]=a+1+'';
return[b,c]
}
它的作用与上面的代码完全相同。
性能
你总是需要思考你需要什么:
在你说“没有人会编写像下面这样的代码”之前,请检查这里的前 10 个问题......
以下是我每十分钟看到的一些常见示例。
想要一个可重复使用的条件
if(condition=='true'){
var isTrue=true;
}else{
var isTrue=false;
}
//same as
var isTrue=!!condition
只有存在时才提示是
if(condition==true){
var isTrue=true;
}else{
var isTrue=false;
}
if(isTrue){
alert('yes');
}
//same as
!condition||alert('yes')
//if the condition is not true alert yes
警报是或否
if(condition==true){
var isTrue=true;
}else{
var isTrue=false;
}
if(isTrue){
alert('yes');
}else{
alert('no');
}
//same as
alert(condition?'yes':'no')
//if the condition is true alert yes else no
将数字转换为字符串,反之亦然
var a=10;
var b=a.toString();
var c=parseFloat(b)
//same as
var a=10,b,c;
b=a+'';
c=b*1
//shorter
var a=10;
a+='';//String
a*=1;//Number
四舍五入
var a=10.3899845
var b=Math.round(a);
//same as
var b=(a+.5)|0;//numbers up to 10 decimal digits (32bit)
楼层数
var a=10.3899845
var b=Math.floor(a);
//same as
var b=a|0;//numbers up to 10 decimal digits (32bit)
开关盒
switch(n)
{
case 1:
alert('1');
break;
case 2:
alert('2');
break;
default:
alert('3');
}
//same as
var a=[1,2];
alert(a[n-1]||3);
//same as
var a={'1':1,'2':2};
alert(a[n]||3);
//shorter
alert([1,2][n-1]||3);
//or
alert([1,2][--n]||3);
尝试捕捉
if(a&&a[b]&&a[b][c]&&a[b][c][d]&&a[b][c][d][e]){
console.log(a[b][c][d][e]);
}
//this is probably the onle time you should use try catch
var x;
try{x=a.b.c.d.e}catch(e){}
!x||conole.log(x);
更多如果
if(a==1||a==3||a==5||a==8||a==9){
console.log('yes')
}else{
console.log('no');
}
console.log([1,3,5,8,9].indexOf(a)!=-1?'yes':'no');
但是 indexOf
读起来很慢 https://stackoverflow.com/a/30335438/2450730
数字
1000000000000
//same as
1e12
var oneDayInMS=1000*60*60*24;
//same as
var oneDayInMS=864e5;
var a=10;
a=1+a;
a=a*2;
//same as
a=++a*2;
我发现了一些关于按位/速记的好文章/网站:
http://mudcu.be/journal/2011/11/bitwise-gems-and-other-optimizations/
http://www.jquery4u.com/javascript/shorthand-javascript-techniques/
如果您使用自己喜欢的搜索引擎进行搜索,还有许多 jsperf 站点显示速记和 bitwsie 的性能。
我可以坚持几个小时……但我认为现在已经足够了。
如果您有任何问题,请尽管提出。
记住
没有压缩器可以正确压缩错误代码。
关于javascript - 如何 'minify' Javascript代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737388/
我的 js 文件中有这样的行 console.log('FunctionName()'); 默认的 Ajax Minifier 设置不会从 .min.js 输出中删除这些行。 我在这个讨论中注意到一个
我使用 uglifyJS 缩小了 Javascript 和 CSS 文件,磁盘上的文件大小已大大减小。但在使用 Chrome 开发者工具检查网络选项卡中加载资源的总时间时,我发现没有区别。那么缩小真的
我正在探索将单个流文件传输到自定义处理器中的两个或多个关系的选项,我在文档中没有找到任何帮助,NIFI 支持此功能吗? 示例代码: session.transfer(flowFile, REL_SUC
我有一个 JS 文件,我正试图缩小它,但它遇到了一些问题。这是文件: $(document).ready(function () { function DisplayMessage(message,
我能找到的几乎所有 CSS 压缩器基本上都是去除空格的正则表达式。有没有更聪明的 CSS 压缩器?比如合并相似的选择器/属性等? 最佳答案 您可以在 Google 上搜索“CSS 优化器”或“CSS
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improv
我正在使用这个压缩器: #!/usr/bin/perl use Getopt::Std; use strict; my %opts; getopts('f:t:h', \%opts) || usage
我正在尝试编写一个可用于根据文件类型缩小 html、css 和 js 的 minify 函数。我想将现有的 gulp 插件用于这 3 个缩小过程来进行实际的缩小。我遇到的问题是我不知道如何在单个黑胶唱
我正在努力成为一个好男孩,并且用口香糖最小化我的css。我目前正在使用gulp-sass(不是gulp-ruby-sass),它似乎没有内置的缩小功能。所以现在我正在使用gulp-minify-css
我想使用 Laravel Elixir 来缩小我的 css/files 文件。但我不想使用混合方法并将它们合并。我想要的只是从我原来的“custom.js”生成一个“custom.min.js”文件。
有没有办法告诉 UglifyJS 跳过特定的代码部分,也许使用这样的注释: // uglifyjs:skipStart filter = function(item){ /* some crazy f
我是 jquery 新手,我可以用它进行简单的编码。我想更多地了解这些文件“缩小”“未压缩”以及何时应该使用每个文件? 最佳答案 每个文件的缩小版本和压缩版本只是在具有相同功能的情况下缩小尺寸的版本。
可以在不添加 -min 后缀的情况下缩小 js 文件吗? 我想保留原来的名字。 gulp.task("js-external-release", function() { gulp.src(c
在 page1.html 上说我需要 mootools.js 和 main.js ......我猜这些工具应该生成一个缩小的 js 文件(比如 min1.js)。 然后在 page2.html 我需要
我最近从 require.js 迁移到 webpack,并且一些 node_module 内置了 .min 文件。当我使用 node_module 中的文件时,我只做 require('my-modu
我正在使用 libman.json 将客户端库从 cdnjs 拉到我项目的一个文件夹中。然后我想将这些库捆绑并缩小到一个 js 文件中,该文件将在 Web 应用程序中部署和引用。为此,我使用了一个名为
我下载了 cordova-minify 插件,它可以压缩我的 Cordova 应用程序 javascript 代码。我尝试运行命令: cordova build browser 我明白了 cordov
我正在构建一个 angular2 应用程序,并开始进行我的构建/缩小过程。我可以使用未缩小的单个 JS 文件在开发模式下成功构建和运行我的应用程序。但是,当我将它们构建为单个串联文件时,我的应用程序将
Minify对我来说工作正常,但在更改其中一个源文件后,我收到一个空白页面。刷新页面不会改变任何东西。没有缓存的刷新(Strg + F5)解决了这个问题。在没有缓存的情况下刷新一次后,我可以返回使用缓
我经常看到“缩小”这个词,但我似乎从未选择过“缩小”的脚本(即来自 jQuery 插件),但我想我应该这样做。如果我是对的,缩小意味着在不改变其功能的情况下从源代码中删除所有不必要的东西,那么为什么我
我是一名优秀的程序员,十分优秀!