När jag använde en javascriptkomprimerare för att minska ner mängden kod i min applikation för att mäta i panoramabilder så var det flera saker som hände.
Alla onödiga tabbar och mellanslag, samt alla kommentarer försvann. Dessa behövs inte och även om de inte exekveras i webbläsaren så tar de bandbredd att överföra.
Långa variabler byttes i en del fall ut mot betydligt kortare, av samma skäl som tidigare.
En hel del åtgärdades inte, vilket främst har att göra med att jag skrivit kod efter hand och inte själv gjort vad jag kunnat för att exempelvis reducera antalet funktioner.
Det som var mer intressant för mig var att en del saker, som är fullständigt korrekta och framför allt begripliga, ändrades till något som fortfarande är korrekt, men betydligt svårare att begripa när man inte är van.
Ett exempel:
var testdata = true; // sätt värde till sann var testvariabel; // definiera variabel if (testdata == true) { // prova om värdet är sann testvariabel = "sant"; // om sann lägg in "sant" i variabel } else { // om vilkoret inte är sant testvariabel = "falskt"; // lägg in värdet "falskt" i variabeln } // avsluta vilkoret alert(testvariabel); // skriv ut värdet i variabeln
Och efter komprimeringen:
var testdata=!0,testvariabel; testvariabel=1==testdata?"sant":"falskt",alert(testvariabel);
Från att ha varit 376 bytes så blev det 90, men vad står det egentligen?
Även utan kommentarerna i den första koden så är det inte så svårt att läsa sig till vad det är som händer. I den andra så börjar det bli lite överkurs för mig.
Jag antar att ”!0” är ett annat sätt att skriva sant, eller ”icke falskt” och då förstår jag den första delen (fram till semikolonet).
Nästa del får jag nog dela lite på för att förstå…
”testvariabel=” betyder att testvariabeln skall tilldelas ett värde, som är beroende av om testdata är lika med 1, eller ”sant”(”1==testdata”).
Om så är fallet (”?”) så tilldelas värdet ”sant”, om inte (”:”) ”falskt”. Det kommatecken som kommer före utskriften av resultatet hänger jag inte med på riktigt. Eftersom det inte är ett semikolon så hänger det ihop med det tidigare på något sätt, men det enda sätt jag kan få till kopplingen är att utskriften skall göras efter det att villkoret är kört?
Hur som helst, det finns funktioner för att komprimera kod och är det mycket kod så kan effekterna bli märkbara. Däremot så blir det inte mer läsbart, så se till att du skriver din kod betydligt mer överskådligt med massor av kommentarer. När du är nöjd så kan du använda exempelvis http://refresh-sf.com/ för att komprimera.
a!=b?"olika":"lika";
Är ni med? Om a är olik b så är de ”olika”, annars är de ”lika”.
villkor ? sant : falskt ;
På komprimeringssidan som jag länkat till ovan så går det att komprimera även CSS och HTML på samma sätt. En annan site som också baseras på UglifyJS är http://jscompress.com/.
Det är en skillnad på if-sats och ?: i JavaScript (och alla programmeringsspråk baserade på C-syntax).
En if-sats är en sats som inte har ett värde.
Medans ?: är ett triär uttryck, dvs en operation som tar tre argument. + är binärt uttryck som tar två argument och – kan vara både binärt och unärt (bara ett argument). Dvs de räknar ut ett värde.
Så ?: kan du ha i uttryck, som i en formel, en tilldelning eller utskrift. Vilket man inte kan med if-sats, eftersom en sats inte har något värde.
if (b != 20) then
a = 10;
else
a = 20;
ger samma resultat som
a = b != 20 ? 10 : 20;
Man kan inte skriva följande i JavaScript.
a = if (b != 20) then 10; else 20;
I C-syntax-språk så kan man använda komma som delare mellan satser. Men då betraktas de som en sats, inte flera.
Ex följande ger samma resultat.
for (a=0; a < 10; print a, a++)
;
eller
for (a = 0; a < 10; a++)
print a;
Det andra är mer lättläst och -tolkat, medans den första är mer komprimerad men svårtolkad. Mer komprimerad, eftersom man inte behöver ha { och } runt satserna och ;-tecken efter satserna.
Men som du skriver, man bör alltid använda det lättolkade sättet att skriva när man själv kodar.