一、时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。
注:时间戳是不会跟着时区的改变而改变,同一时刻的时间戳都是相同的。
window 对象通过 history 对象提供了对浏览器历史的访问。它暴露了很多有用的方法和属性,允许你在用户浏览历史中向前和向后跳转,同时——从HTML5开始——提供了对history栈中内容的操作。
1 | window.history.back(); // 与点击浏览器回退按钮的效果相同 |
pushState() 需要三个参数: 一个状态对象, 一个标题 (目前被忽略),和 (可选的) 一个URL。让我们来解释下这三个参数详细内容:
popstate事件被触发时,该事件的state属性包含该历史记录状态对象的副本640k的大小限制pushState() 后浏览器并不会立即加载这个URLpushState() 会抛出一个异常。该参数是可选的,缺省为当前URL1 | // http://mozilla.org/foo.html 假设当前url |
注: pushState() 绝对不会触发 hashchange 事件,即使新的URL与旧的URL仅哈希不同也是如此。vue-router 底层调用的正是history.pushState和history.replaceState。
Page Visibility API 在document对象上,新增了一个document.visibilityState属性。该属性返回一个字符串,表示页面当前的可见性状态,共有三个可能的值。
hidden:页面彻底不可见visible:页面至少一部分可见prerender:页面即将或正在渲染,处于不可见状态其中,hidden状态和visible状态是所有浏览器都必须支持的。prerender状态只在支持”预渲染”的浏览器上才会出现,比如 Chrome 浏览器就有预渲染功能,可以在用户不可见的状态下,预先把页面渲染出来,等到用户要浏览的时候,直接展示渲染好的网页。
只要页面可见,哪怕只露出一个角,document.visibilityState属性就返回visible。只有以下四种情况,才会返回hidden。
注意,document.visibilityState属性只针对顶层窗口,内嵌的<iframe>页面的document.visibilityState属性由顶层窗口决定。使用 CSS 属性隐藏<iframe>页面(比如display: none;),并不会影响内嵌页面的可见性。
performace允许访问当前页面性能相关的信息,主要功能都是由Performance Timeline API、the Navigation Timing API、the User Timing API、 the Resource Timing API提供的。
| 名称 | 作用(这里所有时间戳都代表UNIX毫秒时间戳) |
|---|---|
| connectEnd | 浏览器与服务器之间的连接建立时的时间戳,连接建立指的是所有握手和认证过程全部结束 |
| connectStart | HTTP请求开始向服务器发送时的时间戳,如果是持久连接,则等同于fetchStart。 |
| domComplete | 当前网页DOM结构生成时,也就是Document.readyState属性变为“complete”,并且相应的readystatechange事件触发时的时间戳。 |
| domContentLoadedEventEnd | 当前网页DOMContentLoaded事件发生时,也就是DOM结构解析完毕、所有脚本运行完成时的时间戳。 |
| domContentLoadedEventStart | 当前网页DOMContentLoaded事件发生时,也就是DOM结构解析完毕、所有脚本开始运行时的时间戳。 |
| domInteractive | 当前网页DOM结构结束解析、开始加载内嵌资源时,也就是Document.readyState属性变为“interactive”、并且相应的readystatechange事件触发时的时间戳。 |
| domLoading | 当前网页DOM结构开始解析时,也就是Document.readyState属性变为“loading”、并且相应的readystatechange事件触发时的时间戳。 |
| domainLookupEnd | 域名查询结束时的时间戳。如果使用持久连接,或者从本地缓存获取信息的,等同于fetchStart |
| domainLookupStart | 域名查询开始时的时间戳。如果使用持久连接,或者从本地缓存获取信息的,等同于fetchStart |
| fetchStart | 浏览器准备通过HTTP请求去获取页面的时间戳。在检查应用缓存之前发生。 |
| loadEventEnd | 当前网页load事件的回调函数结束时的时间戳。如果该事件还没有发生,返回0。 |
| loadEventStart | 当前网页load事件的回调函数开始时的时间戳。如果该事件还没有发生,返回0。 |
| navigationStart | 当前浏览器窗口的前一个网页关闭,发生unload事件时的时间戳。如果没有前一个网页,就等于fetchStart |
| redirectEnd | 最后一次重定向完成,也就是Http响应的最后一个字节返回时的时间戳。如果没有重定向,或者上次重定向不是同源的。则为0 |
| redirectStart | 第一次重定向开始时的时间戳,如果没有重定向,或者上次重定向不是同源的。则为0 |
| requestStart | 浏览器向服务器发出HTTP请求时(或开始读取本地缓存时)的时间戳。 |
| responseEnd | 浏览器从服务器收到(或从本地缓存读取)最后一个字节时(如果在此之前HTTP连接已经关闭,则返回关闭时)的时间戳 |
| responseStart | 浏览器从服务器收到(或从本地缓存读取)第一个字节时的时间戳。 |
| secureConnectionStart | 浏览器与服务器开始安全链接的握手时的时间戳。如果当前网页不要求安全连接,则返回0。 |
| unloadEventEnd | 如果前一个网页与当前网页属于同一个域下,则表示前一个网页的unload回调结束时的时间戳。如果没有前一个网页,或者之前的网页跳转不是属于同一个域内,则返回值为0。 |
| unloadEventStart | 如果前一个网页与当前网页属于同一个域下,则表示前一个网页的unload事件发生时的时间戳。如果没有前一个网页,或者之前的网页跳转不是属于同一个域内,则返回值为0。 |

组合值的意义
DNS查询耗时 :domainLookupEnd - domainLookupStart
TCP链接耗时 :connectEnd - connectStart
request请求耗时 :responseEnd - responseStart
解析dom树耗时 : domComplete - domInteractive
白屏时间 :responseStart - navigationStart
domready时间 :domContentLoadedEventEnd - navigationStart
onload时间 :loadEventEnd - navigationStart
white-space CSS 属性是用来设置如何处理元素中的空白。
1 | white-space: normal | pre | nowrap | pre-wrap | pre-line |
normal:连续的空白符会被合并,换行符会被当作空白符来处理。填充line盒子时,必要的话会换行。
nowrap:和 normal 一样,连续的空白符会被合并。但文本内的换行无效。
pre:连续的空白符会被保留。在遇到换行符或者<br/>元素时才会换行。
pre-wrap:连续的空白符会被保留。在遇到换行符或者<br/>元素,或者需要为了填充line盒子时才会换行。
pre-line:连续的空白符会被合并。在遇到换行符或者<br/>元素,或者需要为了填充line盒子时会换行。
CSS Scroll Snap是CSS中一个独立的模块,可以让网页容器滚动停止的时候,自动平滑定位到指定元素的指定位置,包含scroll-*以及scroll-snap-*等诸多CSS属性。
Scroll Snap模块相关CSS属性可以分为两类,一类作用在滚动容器上,一拨作用在你希望有滚动定位点的子元素上。具体参见下表:
| 作用在滚动容器上 | 作用在定位子项上 |
|---|---|
| scroll-snap-type | scroll-snap-align |
| scroll-snap-stop | scroll-margin/scroll-margin-* |
| scroll-padding/scroll-padding-* |
ASCII时代,字节和字符是一样的。当Unicode出现后,事情有所不同了。字节(octet)是一个八位的存储单元,取值范围一定是0~255。而字符(character,或者word)为语言意义上的符号,范围就不一定了。例如在UCS-2中定义的字符范围为0~65535,它的一个字符占用两个字节。
UCS-2和UCS-4Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。代码点的值通常写成U+ABCD的格式。而文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。顾名思义,UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF。
为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。
要注意,UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-8。
注:
Unicode不是一次性定义的,而是分区定义。每个区可以存放65536个字符,称为一个平面(plane),定义了17个平面,目前Unicode字符集的大小是1,114,112。 65536个字符位,称为基本平面(缩写BMP),是Unicode最先定义和公布的一个平面。 传递到任何记录方法的第一个参数可能包含一个或多个格式说明符。格式说明符由一个 % 符号与后面紧跟的一个字母组成,字母指示应用到值的格式。字符串后面的参数会按顺序应用到占位符。
1 | // Sam has 100 points |
格式说明符的完整列表为:
| 说明符 | 输出 |
|---|---|
| %s | 将值格式化为字符串 |
| %i 或 %d | 将值格式化为整型 |
| %f | 将值格式化为浮点值 |
| %o | 将值格式化为可扩展 DOM 元素。如同在 Elements 面板中显示的一样 |
| %O | 将值格式化为可扩展 JavaScript 对象 |
| %c | 将 CSS 样式规则应用到第二个参数指定的输出字符串 |