作为一个前端的coder,不知道你平时读文章时会不会遇到一些个标准名词,而这些名词的引入而引起前因后果的关联关系总让人费解。我有此经历,于是想一探究竟。 本文收集了平时经常碰到的一些个专业名词但不包括全部,大抵包括w3c、MDN、ECMAScript、富文本、超文本、polyfill、shim等,希望对此溯源后能对自己的平时看文章有帮助,也希望对看这篇文章的你有所帮助。
w3c
w3c,全称World Wide Web Consortium,中文叫万维网联盟。 万维网联盟是国际最著名的标准化组织。它是一个组织,这个组织建立于1994年,其宗旨是通过促进通用协议的发展并确保其通用型,以激发 web 世界的全部潜能。
这个是官方回应,读完之后感觉每个字都认识,但是这些字放到一起好像也并不知道其在说什么。那么这个组织究竟是干嘛得呢?跟我们平时的开发有什么关系呢?
万维网联盟这个词让我一下想到了英雄联盟,联盟嘛,感觉就是在做一些公共的事情一样。
1、w3c是一个组织,并且是一个标准化的组织。
标准化我们是理解的,网络上充斥着各种各样的信息,这些信息涉及到很多方的角色,平台提供者、应用开发者、内容提供者等。我们知道万维网的目的是希望尽可能多的用户能够接收到一致的信息。
W3C为解决 Web 应用中不同平台、技术和开发者带来的不兼容问题,保障 Web 信息的顺利和完整流通,万维网联盟制定了一系列标准并督促 Web 应用开发者和内容提供者遵循这些标准。标准的内容包括使用语言的规范,开发中使用的导则和解释引擎的行为等等。
2、这个标准化的组织主要做什么事?平时我们接触到的标准有哪些?
这个组织致力于对web 进行标准化,最重要的工作是发展 Web 规范(称为推荐,Recommendations),这些规范描述了 Web 的通信协议(比如 HTML 和 XHTML)和其他的构建模块。 平时我们接触到的标准,比如:超文本标记语言、HTML5规范、事件规范,我们平时接触到DOM一级、二级规范都是该组织制定的。
3、如何标准化?换句话就是,一个新标准是如何诞生的?
w3c标准化程序主要有7个步骤。此处步骤引用于w3cSchool的w3c程序, 分别是:
- 1、W3C 收到一份提交
- 2、由 W3C 发布一份记录
- 3、由 W3C 创建一个工作组
- 4、由 W3C 发布一份工作草案
- 5、由 W3C 发布一份候选的推荐
- 6、由 W3C 发布一份被提议的推荐
- 7、由 W3C 发布推荐
W3C是实行会员制的,每个会员可以根据需要向W3C组织提交,然后经过一些列步骤达到标准化。当然并非每一份提交都会被标准化。
4、标准制定后就完了吗?
标准制定后,就需要各方支持实现。当然并非强制性实现,我想这也是w3c将其标准称为推荐的原因之一吧。我们平时开发中,会涉及到现代浏览器是标准浏览器,意思就是说,这些浏览器实施了w3c制定的这些规范(比如html、CSS、DOM标准、BOM标准),得到了浏览器厂商的支持,所以会有一致的表现。
从前面标准化程序中也能看到,一项新标准被标准化是很严格的,可能经历的时间也是很长的,而在具体标准的落实上,不同浏览器支持时间上也是不一样的。
ECMAScript
ECMAScript也是一种标准,这个标准主要用于标准化JavaScript这种语言的,比如我们平时使用的es6、es7等都是该标准的产物。该标准由ECMA International进行,TC39 委员会进行监督。之所以叫ECMAScript的原因,主要是因为当时Javascript已经被注册商标,所以委员会采取了ECMAScript命名规范。
该标准的由来有一个小故事,说微软在其IE3.0版本中发明了JScript语言。Javascript的发明者网景担心其被垄断,就赶紧将Javascript提交给ECMA(欧洲计算机制造协会),用于将该语言标准化。ECMA为了建立语言的标准化,于1997年将JavaScript 1.1作为草案提交给欧洲计算机制造商协会(ECMA),第三十九技术委员会(TC39)被委派来“标准化一个通用的,跨平台的,中立于厂商的脚本语言的语法和语意标准”。最后在Netscape、Sun、微软、Borland等公司的参与下制订了ECMA-262,该标准定义了叫做ECMAScript的全新脚本语言。
目前使用的大多数JavaScript语法都是ECMA-262标准。除了ECMA-262标准外,比较著名的标准有ES5,于2009年完成标准化,这个规范在所有现代浏览器中都相当完全的实现了;ES6,于2015年完成标准化。这个标准被部分实现于大部分现代浏览器;ES7、ES8、ES9等。平时开发中多了解一下这些新的规范也很重要,可以避免一些问题。
与w3c一样,一项新标准会标准化也会经历一定的步骤。ECMAscript新标准形成的步骤主要有五个阶段:
- Stage 0 - Strawman(展示阶段)
- Stage 1 - Proposal(征求意见阶段)
- Stage 2 - Draft(草案阶段)
- Stage 3 - Candidate(候选人阶段)
- Stage 4 - Finished(定案阶段)
shim & polyfill
提到ESMAscript的标准,就会联想到另外两个名词,一个是polyfill,一个是shim。他们分别是什么呢?
我们知道,现代浏览器已经完全实现了ES5标准,es6标准大部分已经实现了。而ES7、es8等提案还没有实现,此时如果我们想使用,一般需要特殊处理。这个过程一般叫做polyfill、shim。这两个名词都是源于浏览器的不够标准化以及浏览器引擎实现的语言标准还没有达到更高,需要做的patch,可以理解为打补丁。
1、shim
Shim 指的是在一个旧的环境中模拟出一个新 API ,而且仅靠旧环境中已有的手段实现,以便所有的浏览器具有相同的行为。
我们在开发中会说,Vue没办法再IE8中使用,原因是Object.definePropery是一个无法shim的属性,也是这个原因。
2、polyfill
polyfill 是一段代码(或者插件),提供了那些开发者们希望浏览器原生提供支持的功能。程序库先检查浏览器是否支持某个API,如果不支持则加载对应的 polyfill。
比如为了能够在低版本里使用高版本语法,就会引入一个polyfill,最典型的就是babel-polyfill。
MDN
MDN全称Mozilla Developer Network, 它和前面的w3c和ECMAscript不太一样,这个组织不是为了标准化而诞生的。在MDN的官网上的左上角写着MDN web docs, 很明显这是一个专为开发者服务的开发文档。
当然,w3c和ECMAScript也有对应的文档,但是平时开发的过程中,大家都比较习惯用MDN去查询资料,主要是MDN做的也太好了,有各种比较容易理解的使用说明和兼容性说明等。
MSDN
全称为microsoft developer network, 开发在IE浏览器上运行的程序需要参考的文档。鉴于平时IE支持到11后,很多属性都已经标准化了,所以平时用的比较少。