@demonly
2017-10-14T04:01:44.000000Z
字数 3152
阅读 946
零碎知识
使用 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 来实现移动效果将不会对其他绘制层产生影响。