第一章JavaScript简介
Javascript的诞生最早是为了处理表单数据验证的问题,以前主要是使用perl这个强大的服务端脚本语言处理的。在未诞生javascript之前,
人们每次提交表单就会与服务器交换数据,每一次请求都与服务器交互,若是仅仅只是一个字段没有填或者密码没有填,每一次都与服务器
端进行交互的话,会大大加重服务器那边的负荷,点击提交就会等待服务器端返回数据以及用户的体验也并不好。
Netscape公司决定发明一种客户端语言来处理这种简单的验证。最后布兰登艾维奇开发了Livescript,可以同时在浏览器与服务器中使用。
最后更名为javascript。Javascript受关注度越来越高,Netscape将自己定位为行业的领袖,微软欲与其竞争,在IE3中加入了名为Jscript的jav
ascript的实现,这两种版本的标准化通用化被提上日程,后定义为ECMAScript的新脚本语言标准。浏览器也各自将ECMAScript作为自己浏览
器实现的标准。也就是说我们所运行的浏览器,其实也是基于javascript来实现的,这就是为什么直接在控制台输入一些api会有很多东西比如函
数,对象或者能够直接运行的原因。也可以把浏览器当做是一个大型的javascript宝库,他里面什么东西都有,就看你的js怎么在这个宝库中展现
自己了。只是到了2008年的时候,五大浏览器才全部做到了与ECMA-262的兼容。IE8是第一个着手实现ECMA-262第五版的浏览器,并在IE9中
提供了完整的支持,火狐4也是紧随其后做到兼容。也就是说,在IE8之前,我们都是要处理浏览器兼容性问题的。
ECMAScript的版本也是极其让人头疼的,本来javascrit是弱类型语言,他没有真正的类的,但是ECMAScript4跨度太大,不仅有强类型语言还
有真正的类和继承,还定义了与数据交互的新方式。事实上javascript比ECMASCript-262规定的多很多,一个完整的JavaScript实现由三个不同的
部分组成。核心是ECMAScript,还有文档对象模型DOM,以及浏览器对象模型BOM。
DOM主要是提供访问和操作网页内容的方法和接口,像我们在网页上面进行的一些基本的交互,比如获取网页的内容,给网页添加颜色,或者
给网页上面的某个元素添加事件,或者操作某个表格或者删除表格中的某行,或者只是一个简单的鼠标移进移出等等。当我们要很密集的给网页添
加和删除内容的时候,就不得不提到的一个问题是dom操作速度很慢,会影响浏览器渲染的效率。其中 layout(布局)和paint(绘制)是最大的。
layout 就是布局变动造成重新计算(耗CPU,有时也很耗内存),paint 就是调用浏览器UI引擎进行渲染展示页面(耗CPU和内存)。像jquery的出现
只是为了减少DOM操作,而Vue和React的出现,则是实质性的减少DOM操作,它用虚拟DOM不会进行排版与重绘操作。虚拟DOM的损耗计算:总
损耗 = 虚拟DOM增删改 + (与Diff算法效率有关)真实DOM差异增删改 + (较少的节点)排版与重绘。真实DOM的损耗计算:总损耗 = 真实DOM
完全增删改 + (可能较多的节点)排版与重绘。像我们经常使用的图片懒加载方法,就是为了减少dom操作,避免图片加载过程中产生的性能问题。
通过动态创建img标签,动态加载图片,以减少dom操作。
通过动图我们可以更清晰的看到渲染的过程。
BOM主要是提供与浏览器交互的方法和接口。你想对浏览器进行的任何操作移动,缩放,关闭,甚至浏览器所在用户显示器的分辨率(screen),
以及浏览器所加载页面的详细信息(location)或者浏览器存储的用户信息(cookie)都可以通过其来实现。现在HTML5.20已经出来了,对已经纳入标准
的BOM来说,还是会因浏览器不同特性表现而异。
Tips:关于ES 6和ECMAScript2015是不是同一样东西呢?当然,由于是ECMA-262 的第六次变更,所有按照惯例称为ES6。但是为了更小版本频繁发布版
本,现在 标准叫法是:ECMAScript2015。 号外:ECMAScript2018也要来啦!!!