DIY Minyatür
Hiçbir minifier, kötü bir kodu düzgün şekilde sıkıştıramaz.
Bu örnekte bir minifier'in ne kadar yaptığını göstermek istiyorum.
Küçültmeden önce ne yapmalısınız?
Ve jQuery ile ilgili olarak ... jQuery kullanmıyorum. JQuery eski tarayıcılar içindir, uyumluluk nedeniyle yapılmıştır .. caniuse.com'u kontrol edin, hemen hemen her şey her tarayıcıda çalışıyor (ayrıca ie10 artık standartlaştırılmıştır), sanırım şimdi sadece web uygulamanızı yavaşlatmak için burada ... isterseniz $()
kendi basit işlevinizi oluşturmalısınız. Ve müşterilerinizin her seferinde 100kb jquery betiğini indirmesi gerekiyorsa, neden kodunuzu sıkıştırmaya zahmet etmelisiniz? sıkıştırılmamış kodunuz ne kadar büyük? 5-6kb ..? Daha kolay hale getirmek için eklediğiniz tonlarca eklentiden bahsetmeyin.
Orijinal Kod
Bir işlevi yazdığınızda bir fikriniz olur, bir şeyler yazmaya başlarsınız ve bazen aşağıdaki kod gibi bir şey elde edersiniz: Kod çalışır.Artık çoğu insan düşünmeyi bırakıp bunu bir minifier'a ekleyip yayınlar.
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;
}
İşte küçültülmüş kod (yeni satırları ekledim)
Kullanılarak minified ( 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
}
Ancak tüm bu değişkenler, eğerler, döngüler ve tanımlar gerekli midir?
Çoğu zaman HAYIR !
- Gereksiz if, loop, var kaldır
- Orijinal kodunuzun bir kopyasını saklayın
- Minifier'ı kullanın
İSTEĞE BAĞLI (performansı artırır ve kodu kısaltır)
- steno operatörleri kullanın
- bitsel operatörler kullanın (kullanmayın
Math
)
- geçici değişkenleriniz için a, b, c ... kullanın
- eski sözdizimini kullan (
while
, for
... değil forEach
)
- işlev bağımsız değişkenlerini yer tutucu olarak kullanın (bazı durumlarda)
- gereksiz olanı kaldırmak
"{}","()",";",spaces,newlines
- Minifier'ı kullanın
Şimdi bir minifier kodu sıkıştırabilirse, yanlış yaparsınız.
Hiçbir minifier, kötü bir kodu düzgün şekilde sıkıştıramaz.
DIY
function myFunction(a,b,c){
for(b=[],c={};a--;)b[a]=a,c[a]=a+1+'';
return[b,c]
}
Yukarıdaki kodlarla tam olarak aynı şeyi yapar.
Verim
http://jsperf.com/diyminify
Her zaman neye ihtiyacınız olduğunu düşünmeniz gerekir:
"Kimse aşağıdaki gibi kod yazmaz" demeden önce gidip buradaki ilk 10 soruyu kontrol edin ...
İşte her on dakikada bir gördüğüm bazı yaygın örnekler.
Yeniden kullanılabilir bir koşul ister
if(condition=='true'){
var isTrue=true;
}else{
var isTrue=false;
}
//same as
var isTrue=!!condition
Evet, yalnızca varsa uyar
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
Evet veya hayır uyarısı
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
Bir sayıyı dizeye veya tersine dönüştürme
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
Bir sayı yuvarlayın
var a=10.3899845
var b=Math.round(a);
//same as
var b=(a+.5)|0;//numbers up to 10 decimal digits (32bit)
Bir sayı tabanı
var a=10.3899845
var b=Math.floor(a);
//same as
var b=a|0;//numbers up to 10 decimal digits (32bit)
yer değiştir
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);
yakalamaya çalış
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);
daha fazla eğer
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');
ama indexOf
yavaş bu https://stackoverflow.com/a/30335438/2450730 okuyun
sayılar
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;
Bitsel / steno hakkında bulduğum bazı güzel makaleler / siteler:
http://mudcu.be/journal/2011/11/bitwise-gems-and-other-optimizations/
http://www.140byt.es/
http://www.jquery4u.com/javascript/shorthand-javascript-techniques/
En sevdiğiniz arama motoruyla arama yaparsanız, steno ve bitwsie'nin performansını gösteren birçok jsperf sitesi de vardır.
Saatlerce gidebilirim .. ama şimdilik yeterli olduğunu düşünüyorum.
eğer bazı sorularınız varsa sadece sorun.
Ve Hatırla
Hiçbir minifier, kötü bir kodu düzgün şekilde sıkıştıramaz.