浏览器环境概述

最后更新于:2022-04-02 03:25:33

[TOC] ## `integrity`属性 验证外部加载js 的文件hash ``` ``` 如果`application.js`的脚本hash 改变,则不会加载 ## URL 协议 a标签 `点击` 如果javascript 中是字符串,则会打开一个文件,里面是字符串内容 如果是可执行代码.则执行 ## script 的属性 ### defer 属性 延迟执行 如果脚本之间有依赖关系,就使用`defer`属性 ``` ``` 1. 浏览器开始解析 HTML 网页。 2. 解析过程中,发现带有`defer`属性的` 上面的example.js默认就是采用 HTTP 协议下载,如果要采用 HTTPS 协议下载,必需写明。 但是有时我们会希望,根据页面本身的协议来决定加载协议,这时可以采用下面的写法。 ``` ### 重流和重绘 * 读取 DOM 或者写入 DOM,尽量写在一起,不要混杂。不要读取一个 DOM 节点,然后立刻写入,接着再读取一个 DOM 节点。 * 缓存 DOM 信息。 * 不要一项一项地改变样式,而是使用 CSS class 一次性改变样式。 * 使用`documentFragment`操作 DOM * 动画使用`absolute`定位或`fixed`定位,这样可以减少对其他元素的影响。 * 只在必要时才显示隐藏元素。 * 使用`window.requestAnimationFrame()`,因为它可以把代码推迟到下一次重流时执行,而不是立即要求页面重流。 * 使用虚拟 DOM(virtual DOM)库。 ### window.requestAnimationFrame() 推迟重绘 ``` // 重绘代价高 function doubleHeight(element) { var currentHeight = element.clientHeight; element.style.height = (currentHeight * 2) + 'px'; } all_my_elements.forEach(doubleHeight); // 重绘代价低 function doubleHeight(element) { var currentHeight = element.clientHeight; window.requestAnimationFrame(function () { element.style.height = (currentHeight * 2) + 'px'; }); } all_my_elements.forEach(doubleHeight); ```
';