Shim、Polyfill
目录
基础知识
简介
Shim
Pollyfill
实例
ES6 polyfill
ES6 Promise polyfill
基础知识
简介
Shim
Shim【垫片】可理解为是指仅依靠旧的环境里已有的方法实现模拟出一个新的API,方便不同的浏览器表现出相同的效果。
Shim的一种通常做法是针对旧版本浏览器对新特性支持的不足,做一些兼容性的库,例如JQuery里的$.ajax封装了window.XMLHttpRequest和IE里的ActiveXObject来创建xhr对象。
Shim的一个特点是拦截浏览器里的一些旧的API调用,并提供自己的API实现。
Shim是实践优雅降级开发理念的一种方法。
Pollyfill
Pollyfill【填充物】可以理解为是用于为旧版本浏览器提供它没有原生支持的较新语法和功能的实现代码,通俗点说可以理解为通过js代码【插件】提高程序运行时的浏览器兼容性。
Pollyfill的一种通常做法是检查当前浏览器是否支持某个API,不支持的话就加载对应的Pollyfill,使其支持该API。例如ajax提交表单时,在IE浏览器中增加window.XMLHttpRequest,而内部实现用IE浏览器自带的ActiveXObject。
Pollyfill可以理解为是Shim的一种,但是其API是遵循标准的,而Shim设计的API则是自定义设计的【不一定遵循标准】。
例如有的旧版本浏览器不支持js ES6语法新特性,而开发的程序中却用到了js ES6新特性,这时就要考虑使用Pollyfill。
实例
ES6 polyfill
代码示例:
<script type="text/javascript" src ="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script>
如果引入加载速度慢的话可以考虑把文件下载到本地文件夹并引用。
ES6 Promise polyfill
代码示例:
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.js"></script>
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script>
Shim、Polyfill相关推荐
- shim和polyfill的区别,重点是Polyfill的作用和使用
在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别? 一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手 ...
- shim和polyfill的区别,重点是Polyfill的作用和使用。
在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别? 一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手 ...
- 【概念集锦】之 shim和polyfill
shim 是一个小的类库(lib),提供独立的API,以弥补人们在不同的环境下使用原生语言需要考虑兼容性的问题. 比如:使用js原生Ajax操作时,你用 XMLHttpRequest 创建xhr对象, ...
- shim和polyfill有什么区别?
为什么80%的码农都做不了架构师?>>> 在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别? 1.Shim 一个s ...
- 前端调试、兼容、适配指南与工具分享
前端调试 1.对于新型创业公司来说,我们一般需要考虑以下的各种典型的浏览器: PC端: chrome.firefox.IE.360.搜狗 移动端: IE.360.UC.safari.安卓.QQ浏览器 ...
- OpenStack基金会携手Intel、Hyper发布开源Kata Containers项目
OpenStack基金会本周二发布了新的开源项目Kata Containers,其目标是将虚拟机(VM)的安全优势与容器的高速及可管理性结合起来,为用户带来最出色的容器解决方案,同时提供最强大的虚拟机 ...
- 前端“黑话”polyfill
前言 在Web前端开发这个日新月异的时代,总是需要阅读一些最新的英文技术博客来跟上技术的发展的潮流.而有时候会遇到一些比较高频的"黑话",在社区里面可能已经是人人皆知的" ...
- fabric shim安装合约_智能合约简介_智能合约开发_Hyperledger Fabric_开发指南_区块链服务 BaaS - 阿里云...
概述 在 Hyperledger Fabric 中,链码(Chaincode)又称为智能合约(下文中我们统一称为链码),是用Go,node.js或Java编写的程序,主要用于操作账本上的数据.用户的应 ...
- polyfill了解吗?
[问]polyfill了解吗? [答]:Polyfill是指给旧浏览器提供向后兼容的新特性,比如让旧版IE,也支持object.assign方法等.和此相关的概念还有shim, 是指抽象出一层API来 ...
- AngularJS2.0 quick start——其和typescript结合需要额外依赖
AngularJS2 发布于2016年9月份,它是基于ES6来开发的. 运行条件! 由于目前各种环境(浏览器或 Node)暂不支持ES6的代码,所以需要一些shim和polyfill(IE需要)让ES ...
最新文章
- windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况...
- 艾伟也谈项目管理,项目做完了,总结一下
- 如何把python可视化到前端_python数据可视化的效果如何在web页面中展示_北京可视化股票...
- Angular应用的index.html
- Magento模块开发之数据库SQL操作方法说明
- navicat安装指南
- 【Scala】Scala语言的介绍以及循环的定义(while,for,break,九九乘法表的计算代码)
- 设置git客户端不经过代理
- Atitit 程序设计概论 艾提拉著作 目录 1. 界面ui设计	1 2. 编程语言部分	1 3. 面向对象的程序设计	1 4. 算法章节 数据结构	1 5. 第21章 标准库	2 5.1. 文件i
- 昆仑mcgs 通讯控制台达B2伺服采用modbus rtu方式,昆仑屏直接控制台达b2伺服的正反转,停止及速度设定,简单好上手
- 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(4)
- serialVersionUID 问题处理
- 用户分层之RFM模型
- php 句号,句号 - Programming Life - PHP博客
- 移动端页面底部导航被浏览器工具栏遮盖解决方法
- 教你如何拍好人像摄影
- JAVA开发方向和就业方向
- Android SOS功能模块开发
- 知物由学 | 未来50年网络安全行业发展愿景
- 如何将电梯门禁卡复制到手机/手环上
热门文章
- 2353410-06-5,TCO-PEG8-TFP ester单分散交联剂,含有TCO部分和PFP酯
- 电脑钢琴模拟器(初学WINDOW库)
- sentiment analysis
- 联想计算机不能进入系统桌面,联想电脑无法重装系统-联想电脑怎么重装系统我的电脑启动后到不了桌面,最后屏幕上没有任何 爱问知识人...
- win7 安装IE11 教程
- JavaScirpt 与 ECMAScript 的关系
- Kotlin的SAM转换
- Spring中关于IOC的详解
- 将进酒:写在26岁生日这一天
- 计算机sumifs函数怎么操作,excel中SUMIFS函数的公式语法及使用方法教程