Link: 原文连接javascript
译文开始:html
对网站进行性能优化对一个最容易的方法就是把JS和CSS进行打包压缩。可是当你须要调试这些压缩文件中的代码的时候,会发生什么?可能会是一场噩梦。可是,不用惧怕,即将有一个解决方案到来,它就是Source Maps。html5
source maps提供一种将压缩文件中的代码映射回源文件中原始位置的方法。这意味着,借助一些软件的帮助,即便你的资源被压缩,你也能够轻易调试你的程序。Chrome和Firefox内置的开发者工具都支持source maps了。java
在这篇文章中,你将会学习到source maps的实现原理以及怎么去生成source maps。咱们主要是关注JavaScript代码的source maps,可是这些原则一样适用于CSS的source maps。git
顾名思义,source map(源映射)就是包含一堆的信息,能够将压缩文件的代码映射回到源代码。你能够为每一个压缩文件指定不一样的source map。 经过在压缩文件底部添加特殊的注释,向浏览器代表souce map是可用的。github
//# sourceMappingURL=/path/to/script.js.map
复制代码
该注释一般会被用于生成source map的程序添加。仅当开发者工具支持source map启用了以及打开的时候,开发者工具才会加载这些文件。数组
也能够在压缩的JavaScript文件的响应中经过设置X-SourceMap的HTTP响应头来开启source map。浏览器
X-SourceMap: /path/to/script.js.map
复制代码
下面来看看source map文件的内容:一个JSON对象,包含文件说明以及JavaScript源文件。看个例子:性能优化
{
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..."
}
复制代码
具体每一个属性的说明:bash
UglifyJS是一个用于合并压缩JS文件的命令行工具。版本2支持不少有助于生成source map的命令行标识。
//# sourceMappingURL=/path/to/script.js.map
复制代码
以上所有选项可查看文档
来看个试一下生成一个source map,在一个目录中建立一个JS文件test.js test.js内容:
function test(){
console.log('test')
}
复制代码
uglifyjs test.js -o test.min.js --source-map "url='test.min.js.map'"
复制代码
若是没有安装,须要先安装uglifyJs,执行命令后,生成三个文件。
以上没有用原文的例子,使用本身实现的例子。
test.min.js输出后到代码:
function test(){console.log("test")}
//# sourceMappingURL=test.min.js.map
复制代码
还有如下其余工具也能够用于生成source maps:
为了方便演示,已经偏离原文的例子。
以前生成的test.min.js文件,咱们经过引入到html文件中进行调试。 html文件:
<html>
<head>
<title>test</title>
</head>
<body>
<script src="./test.min.js"></script>
<script>
test()
</script>
</body>
</html>
复制代码
先看看没开启source map的状况是如何:
没开启source map,只加载了test.min.js文件
发现会加载test.js源文件,以及在源文件进行调试。
使用source map可使开发人员维护直接的调试环境,同时优化其站点的性能。
(完)