JS / CSS 程式碼壓縮
貼上程式碼即出壓縮結果,並告訴你省了多少字元。
壓縮結果
怎麼用
- 把 JavaScript 或 CSS 粘進輸入框——下面的壓縮結果隨輸入即時更新,沒有按鈕要點。
- 語法預設「自動」,識別錯了就點一下 JavaScript / CSS,結果立刻按新語法重壓。
- 標題行直接給「字元:壓縮前 → 壓縮後(省多少)」,可以一鍵複製或下載成 .js / .css 檔案。
示例
輸入
// 購物車合計:含稅金額與免運費判斷 const 稅率 = 0.08; function 合計(明細, 優惠券) { let 小計 = 0; for (const 項 of 明細) { 小計 += 項.單價 * 項.數量; // 單價 × 數量 } if (優惠券) { 小計 -= 優惠券; } return { 金額: 小計 * (1 + 稅率), 免運費: 小計 > 50 }; }
壓縮後
const 稅率=0.08;function 合計(明細,優惠券){let 小計=0;for(const 項 of 明細){小計+=項.單價*項.數量;}if(優惠券){小計-=優惠券;}return{金額:小計*(1+稅率),免運費:小計>50};}
註解被刪掉,空白被摺疊,但中文識別符號一個都沒改名、數字寫法一個都沒改。讀數是 216 → 126 字元(省 42%)。
規則、侷限與已知問題
- 只動空白與註解:不改名、不折疊語句、不刪程式碼。所以壓出來一定還能跑,但體積會比 Terser 大。
- 以 /*! 、//! 開頭,或內文裡寫著 @license / @preserve 的註解會保留(法律宣告),其餘註解刪除。
- 換行只在「刪了會改變程式行為」的地方保留:return / throw / break / continue / yield / async 之後,以及兩條語句之間會被自動插入分號的地方(a\nb、x={}\nfoo())。其餘程式碼通常壓成一行。
- JavaScript 走詞法掃描而不是語法分析:字串、正則、範本字面量裡的 /* 與換行一個字元都不動。除號與正則靠上一個 token 區分;跨行的 / 按除號處理。
- CSS 只刪沒有歧義的空白:{ } ; , > ~ ! 兩側、: 之後、} 之前的最後一個分號。選擇器裡的後代空格保留(.a .b 不是 .a.b),: 之前的空格保留(a :hover 不是 a:hover),calc(100% - 10px) 裡的空格是語法要求,原樣保留。
- 不做改名(mangle)、不做死程式碼消除、不做 drop_console:這些都會改變執行時行為,壓縮工具不該悄悄做。
- 不支援:HTML / SVG(空白語義依賴 <pre>、<textarea> 與內聯元素)、TypeScript 型別層改寫、JSX/TSX 輸入、source map、多檔案合併。檢測到 JSX 會給警告。
- 字串、範本、註解或 url( 在末尾沒閉合只給警告,不算錯誤:後面的程式碼照常壓縮。括號數量對不上同樣只警告——本工具不是語法校驗器。
- 字元數按 Unicode 碼點計(不是位元組,也不是 UTF-16 單元);百分比取整,壓縮後反而變大時顯示 +n%。全部在瀏覽器裡完成:不上傳、不儲存、不進 URL。
- 超過 20 萬字符時,結果會在停止輸入約 0.6 秒後更新,不截斷文本。輸出統一用 LF,末尾不帶換行。
相關工具
壓完還想對照原樣,或者換一種格式看看?