查看百度首頁引入的 `jquery-1.10.2.min.js` 等文件,代碼連成一行、變量名全是單字母、無註釋換行。三大原因:
1. 壓縮
- 移除空白、換行、註釋,縮短變量名 (`function a(b,c){...}`)。
- 體積減少 60-80%,節省頻寬、加快加載。
- 文件名慣例帶 `.min.` 標識。
2. 混淆
- 將有意義標識符重命名為無意義字符,提高逆向工程難度,保護商業邏輯。
- 非加密,僅增加閱讀成本。
3. 打包合併
- Webpack/Rollup 將數百模組打包成單文件,消除模塊邊界、內聯依賴、Tree-shaking 剔除死代碼。
- 產出的 `bundle.js` 邏輯極難直接閱讀。
如何研讀
- Source Map:生產環境若開啟 `.map` 文件,瀏覽器 DevTools 可映射回原始 TypeScript/ES6 源碼。
- 預格式化:DevTools Sources 面板點擊 `{}` 美化按鈕,恢復縮進換行(變量名仍是混淆後)。
- 下載本地斷點調試:存盤、配置本地映射、逐步執行觀察變量。
- 關注非混淆部分:Polyfill、第三方庫 (jQuery 等) 通常不混淆,可直接閱讀官方源碼對照。
總結:壓縮為性能,混淆為保護,打包為工程效率,非故意製造「無結構復雜」。