@demonly
2017-10-14T04:01:44.000000Z
字数 3152
阅读 997
零碎知识
使用 font-face 定义字体系列时需要提供多种格式的字体文件
使用 unicode-range 描述符,我们可以指定一个以逗号分隔的范围值的列表,其中的范围值可以是单一代码点(例如 U+416)、间隔范围(例如 U+400-4ff)或者通配符范围(例如 U+4??)
@font-face {font-family: 'Awesome Font';font-style: normal;font-weight: 400;src: local('Awesome Font'),url('/fonts/awesome-l.woff2') format('woff2'),url('/fonts/awesome-l.woff') format('woff'),url('/fonts/awesome-l.ttf') format('ttf'),url('/fonts/awesome-l.eot') format('eot');unicode-range: U+4e00-9fff; /* Chinese glyphs */}
使用字体加载优化 API
//引入字体var font = new FontFace("Awesome Font", "url(/fonts/awesome.woff2)", {style: 'normal', unicodeRange: 'U+000-5FF', weight: '400'});font.load();//在字体加载完毕之后替换网页字体font.ready().then(function() {document.fonts.add(font);document.body.style.fontFamily = "Awesome Font, serif";var content = document.getElementById("content");content.style.visibility = "visible";});
浏览器首次描绘页面的步骤,尽可能缩短这几个步骤中的时间。
使用 HTML 和 CSS 媒体查询将一些 CSS 标记为不阻塞渲染,不阻塞渲染的 CSS 仅仅是不会暂停浏览器的首次渲染,依然会被下载。
应该尽早在 HTML 文档中指定所有 CSS 资源,使浏览器可以尽早发现<link>标签,并尽早发出 CSS 请求。
避免使用 CSS import。
在浏览器解析时遇到 script 标签会停止 DOM 树的构建,然后执行 JavaScript 脚本,如果这个脚本是外部文件引入的,那么还需要等待外部文件的下载。加入 async 关键字可以使脚本不阻塞 DOM 树的构建。
CSSOM 的构建会阻塞 JavaScript 脚本的执行。
<script src="app.js" async></script>
用 JS 修改 CSS 有三种常用的流水线。
- 修改布局属性,经过 计算样式、布局、绘制、渲染层合并。
- 修改绘制属性,经过 计算样式、绘制、渲染层合并。
- 修改非布局非绘制属性,经过 计算样式、渲染层合并。
对于动画和滚动这类负荷重的操作尽量采用第三种。
var taskList = breakBigTaskIntoMicroTasks(monsterTaskList);requestAnimationFrame(processTaskList);function processTaskList(taskStartTime) {var taskFinishTime;do {var nextTask = taskList.pop();processTask(nextTask);taskFinishTime = window.performance.now();} while (taskFinishTime - taskStartTime < 3);if (taskList.length > 0)requestAnimationFrame(processTaskList);}
.moving-element {will-change: transform;}
对于不支持 will-change 的浏览器
.moving-element {transform: translateZ(0);}
使用 will-change 属性可以创建一个新的渲染层,在这个渲染层中使用 transform 来实现移动效果将不会对其他绘制层产生影响。