DIY Minification
ไม่มีตัวย่อใดสามารถบีบอัดโค้ดที่ไม่ถูกต้องได้อย่างถูกต้อง
ในตัวอย่างนี้ฉันแค่อยากจะแสดงให้เห็นว่า minifier ทำได้มากแค่ไหน
สิ่งที่คุณควรทำก่อนลดขนาด
และเกี่ยวกับ jQuery ... ฉันไม่ได้ใช้ jQuery.jQuery สำหรับเบราว์เซอร์รุ่นเก่ามันถูกสร้างขึ้นด้วยเหตุผลด้านความเข้ากันได้ .. ตรวจสอบ caniuse.com เกือบทุกอย่างใช้งานได้บนทุกเบราว์เซอร์ (ตอนนี้ ie10 เป็นมาตรฐาน) ฉันคิดว่าตอนนี้มันเป็น ที่นี่เพื่อทำให้เว็บแอปพลิเคชันของคุณช้าลง ... ถ้าคุณชอบ$()
คุณควรสร้างฟังก์ชันง่ายๆของคุณเองและทำไมต้องบีบอัดโค้ดของคุณหากลูกค้าของคุณต้องการดาวน์โหลดสคริปต์ jquery 100kb ทุกครั้งรหัสที่ไม่บีบอัดของคุณใหญ่แค่ไหน? 5-6 กิโล .. ? ไม่ต้องพูดถึงปลั๊กอินมากมายที่คุณเพิ่มเข้าไปเพื่อให้ง่ายขึ้น
รหัสเดิม
เมื่อคุณเขียนฟังก์ชันที่คุณมีความคิดให้เริ่มเขียนสิ่งต่าง ๆ และบางครั้งคุณก็ลงเอยด้วยรหัสต่อไปนี้รหัสใช้งานได้ตอนนี้คนส่วนใหญ่เลิกคิดและเพิ่มสิ่งนี้ลงในตัวย่อขนาดและเผยแพร่
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
}
แต่ vars, ifs, loops & definitions จำเป็นทั้งหมดหรือไม่?
ส่วนใหญ่ไม่ !
- ลบ if, loop, var ที่ไม่จำเป็นออก
- เก็บสำเนารหัสเดิมของคุณ
- ใช้ minifier
ไม่บังคับ (เพิ่มประสิทธิภาพและรหัสที่สั้นลง)
- ใช้ตัวดำเนินการชวเลข
- ใช้ตัวดำเนินการระดับบิต (อย่าใช้
Math
)
- ใช้ a, b, c ... สำหรับ temp vars ของคุณ
- ใช้ไวยากรณ์เก่า (
while
, for
... ไม่ใช่forEach
)
- ใช้อาร์กิวเมนต์ของฟังก์ชันเป็นตัวยึดตำแหน่ง (ในบางกรณี)
- ลบสิ่งที่ไม่จำเป็นออก
"{}","()",";",spaces,newlines
- ใช้ minifier
ตอนนี้ถ้า minifier สามารถบีบอัดโค้ดได้แสดงว่าคุณทำผิด
ไม่มีตัวย่อใดสามารถบีบอัดโค้ดที่ไม่ถูกต้องได้อย่างถูกต้อง
DIY
function myFunction(a,b,c){
for(b=[],c={};a--;)b[a]=a,c[a]=a+1+'';
return[b,c]
}
มันทำสิ่งเดียวกันกับรหัสด้านบนทุกประการ
ประสิทธิภาพ
http://jsperf.com/diyminify
คุณต้องคิดเสมอว่าคุณต้องการอะไร:
ก่อนที่คุณจะพูดว่า "ไม่มีใครเขียนโค้ดเหมือนข้างล่างนี้" ไปดู 10 คำถามแรกได้ที่นี่ ...
นี่คือตัวอย่างทั่วไปที่ฉันเห็นทุกๆสิบนาที
ต้องการสภาพที่ใช้ซ้ำได้
if(condition=='true'){
var isTrue=true;
}else{
var isTrue=false;
}
var isTrue=!!condition
แจ้งเตือนใช่เฉพาะเมื่อมีอยู่
if(condition==true){
var isTrue=true;
}else{
var isTrue=false;
}
if(isTrue){
alert('yes');
}
!condition||alert('yes')
แจ้งเตือนใช่หรือไม่
if(condition==true){
var isTrue=true;
}else{
var isTrue=false;
}
if(isTrue){
alert('yes');
}else{
alert('no');
}
alert(condition?'yes':'no')
แปลงตัวเลขเป็นสตริงหรือในทางกลับกัน
var a=10;
var b=a.toString();
var c=parseFloat(b)
var a=10,b,c;
b=a+'';
c=b*1
var a=10;
a+='';
a*=1;
ปัดเศษตัวเลข
var a=10.3899845
var b=Math.round(a);
var b=(a+.5)|0;
ชั้น A
var a=10.3899845
var b=Math.floor(a);
var b=a|0;
เปลี่ยนกรณี
switch(n)
{
case 1:
alert('1');
break;
case 2:
alert('2');
break;
default:
alert('3');
}
var a=[1,2];
alert(a[n-1]||3);
var a={'1':1,'2':2};
alert(a[n]||3);
alert([1,2][n-1]||3);
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]);
}
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
1e12
var oneDayInMS=1000*60*60*24;
var oneDayInMS=864e5;
var a=10;
a=1+a;
a=a*2;
a=++a*2;
บทความ / ไซต์ดีๆที่ฉันพบเกี่ยวกับ bitwise / shorthand:
http://mudcu.be/journal/2011/11/bitwise-gems-and-other-optimizations/
http://www.140byt.es/
http://www.jquery4u.com/javascript/shorthand-javascript-techniques/
นอกจากนี้ยังมีไซต์ jsperf จำนวนมากที่แสดงประสิทธิภาพของชวเลข & bitwsie หากคุณค้นหาด้วย Searchengine ที่คุณชื่นชอบ
ฉันสามารถไปได้หลายชั่วโมง .. แต่ฉันคิดว่ามันเพียงพอแล้วสำหรับตอนนี้
หากคุณมีคำถามเพียงแค่ถาม
และจำไว้ว่า
ไม่มีตัวย่อใดสามารถบีบอัดโค้ดที่ไม่ถูกต้องได้อย่างถูกต้อง