原文連接html
組合而且壓縮你的JavaScript 和 CSS文件是提升性能最方便的方式之一。可是當你須要調試這些壓縮後的代碼的時候會發生什麼呢?它多是異常噩夢。不過不用怕,這裏有一個經過source maps的name來解決的問題的方案。html5
source maps提供了一種將壓縮後的文件代碼映射到源文件的初始位置的方式。這意味着在軟件的幫助下,你能夠輕易的調試你的應用甚至在你已經作了代碼優化(壓縮)處理的狀況下。谷歌以及火狐瀏覽器的開發者工具目前都內置了對source maps的支持。git
這篇博客將告訴你source maps的工做原理以及如何生成。咱們將主要關注JS的源映射,CSS的源映射也是相同原理。github
注意:Firefox的開發人員工具默認啓用對源映射的支持。您可能須要在Chrome中手動啓用支持。要執行此操做,請啓動Chrome開發工具並打開「 設置」窗格(右下角的齒輪)。在常規選項卡中,確保啓用JS源地圖和啓用CSS源的地圖都打勾。數組
顧名思義,源映射由一大堆文件組成,使壓縮後的代碼能夠映射回源文件。你能夠爲每個壓縮後的文件提供不一樣的源映射。瀏覽器
經過在優化(壓縮)後的文件的底部添加特殊註釋,向瀏覽器提供可用的源映射。bash
//# sourceMappingURL=/path/to/script.js.map
複製代碼
此註釋一般由用於生成源映射的程序添加。若是啓用了對源映射的支持而且開發人員工具已打開,則開發人員工具將僅加載此文件。服務器
您還能夠經過X-SourceMap在壓縮的JavaScript文件的響應中發送HTTP header來指定源映射。app
X-SourceMap: /path/to/script.js.map
複製代碼
源映射文件包含一個JSON對象,其中包含有關映射自己和原始JavaScript文件的信息。這是一個簡單的例子:ide
{
version: 3,
file: "script.js.map",
sources: [
"app.js",
"content.js",
"widget.js"
],
sourceRoot: "/",
names: ["slideUp", "slideDown", "save"],
mappings: "AAA0B,kBAAhBA,QAAOC,SACjBD,OAAOC,OAAO..."
}
複製代碼
讓咱們仔細看看每一個屬性。
UglifyJS是一個受歡迎的命令行工具,能夠對你的文件進行組合壓縮。版本2 支持大量的命令行標誌用以生成source maps。
以下示例:
uglifyjs [input files] -o script.min.js --source-map script.js.map --source-map-root http://example.com/js -c -m
複製代碼
除此以外還有其餘的工具能夠用來生成source maps。列表以下:
檢查頁面的HTML,確認僅引用了壓縮的JavaScript文件。開發工具正在加載源映射文件,而後獲取每一個原始源文件。
若是您但願查看壓縮版本,請單擊選項卡右上角的齒輪圖標,而後取消選擇 Show original sources(顯示原始源)。
使用Source Maps容許開發人員維護以及修復代碼時,直接進行調試,同時優化其站點以提升性能。