Shim和Polyfill的区别


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/04/16/Shim%E5%92%8CPolyfill%E7%9A%84%E5%8C%BA%E5%88%AB/

摘要

本文主要讲述了:

  1. shim
  2. polyfill

正文

shim

一种通过新增 API 的方式来纠正现存代码行为的第三方库。

由于需要开发者显式调用,因此 shim 也被称作硬垫片。

示例:jQuery.ajax用于纠正XMLHttpRequestActiveXObject

polyfill

一种为老版本浏览器提供非原生支持的现代功能的第三方库,即把新版本浏览器原生支持的现代功能移植到老版本浏览器上去。

由于不需要开发者显式调用,因此 polyfill 也被称作软垫片。

示例:placeholder.js

使用前:

learn_placeholder/index.html

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<input placeholder="test" />
</body>
</html>

在 IE10-中打开时,上述代码相当于:

learn_placeholder/index.html

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<input />
</body>
</html>

使用后:

learn_placeholder/index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<input placeholder="test" />
<script src="./placeholders.min.js"></script>
</body>
</html>

在 IE10-中打开时,上述代码相当于:

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<input placeholder="test" />
</body>
</html>

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/04/16/Shim%E5%92%8CPolyfill%E7%9A%84%E5%8C%BA%E5%88%AB/


本文对你有帮助?请支持我


支付宝
微信