js Task1

2017-08-21  本文已影响41人  YM雨蒙

网页

什么是网页?

每个学习编程语言的第一个编程肯定是打印出"Hello World"来看看JavaScript是怎么实现的.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>认识js</title>
</head>
<body>
    <script>
        document.write("Hello World")   //会在页面中出现Hello World
    </script>
</body>
</html>

来看一下JavaScript的发展历史

谁也想不到,1995年被当做营销策略推出的JavaScript语言,在2017年成为了最受欢迎平台(web)上的核心语言。JavaScript现在不仅可以在浏览器中运行,它还被用作开发桌面和手机应用,用于嵌入式设备,甚至NASA还拿它来设计太空组件。

发展
JS标准制定简史(简略)

问题:ES3、ES5、ES6指什么?

参考:


浏览器的渲染机制

了解渲染机制之前,我们先了解几个概念

浏览器渲染过程

渲染流程图
渲染流程图
  1. 用户输入一个URL的时候,浏览器就会发送一个请求,请求URL对应的资源。
  2. 浏览器的HTML解析器会将这个文件解析,并且构建成一棵DOM树。(在生成DOM的最开始阶段(应该是Bytes → characters后),并行发起css、图片、js的请求,无论他们是否在HEAD里。)
    • 注意:发起js文件的下载request并不需要DOM处理到那个script节点,比如:简单的正则匹配就能做到这一点,虽然实际上并不一定是通过正则:)。这是很多人在理解渲染机制的时候存在的误区
  3. 在构建DOM树的时候,遇到 js
    CSS元素,HTML解析器就换将控制权转让给JS解析器或者是CSS解析器。开始构建CSSOM
  4. DOM树构建完之后,浏览器把DOM树中的一些不可视元素去掉,然后与CSSOM合成一棵render tree
  5. Layout:有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系。下一步操作称之为Layout,顾名思义就是计算出每个节点在屏幕中的位置。
  6. Painting:Layout后,浏览器已经知道了哪些节点要显示(which nodes are visible)、每个节点的CSS属性是什么(their computed styles)、每个节点在屏幕中的位置是哪里(geometry)。就进入了最后一步:Painting,按照算出来的规则,通过显卡,把内容画到屏幕上。

以上几个步骤因为DOM、CSSOM、Render Tree都可能在第一次Painting后又被更新多次,比如JS修改了DOM或者CSS属性。LayoutPainting也会被重复执行,除了DOM、CSSOM更新的原因外,图片下载完成后也需要调用Layout 和 `Painting来更新网页

关于Repaint 和 Reflow

Repaint Reflow也就是中文中的重绘和回流

引起RepainReflow的一些操作

参考:

重绘,回流概念
重绘和回流


如何异步加载脚本

HTML页面中插入JavaScript的方法,就是使用<script>标签,我们先来了解一下<script>定义了6个属性

<script src="script.js"></script>
<script async src="script1.js"></script>
<script async src="script2.js"></script>
<script defer src="script.js"></script>

解释白屏和 FOUC(无样式内容闪烁)

原理:

当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花屏现象。

解决方法:

使用LINK标签将样式表放在文档HEAD中。

CSS 和 JS 放置顺序, 异步机制

对于图片和CSS, 在加载时会并发加载(如一个域名下同时加载两个文件). 但在加载 JavaScript 时,会禁用并发,并且阻止其他内容的下载. 所以把 JavaScript 放入页面顶部也会导致 白屏 现象.

白屏
上图我们可以看到对于chrome浏览器来说,等所有的css加载完成并解析完成,CSSOM计算完成,把页面你全部展示出来,所以会出现解析时间的白屏
FOUC
上图我们可以看到开始时字体比较小都是html的正常字体大小,然后当css加载完成后会出现加载css央视后的字体,页面发生了变化,这是firefox的处理机制(无样式内容闪烁)
上一篇 下一篇

猜你喜欢

热点阅读