PageSpeed Insights规则背景:优化关键渲染路径时的注意事项以及原因 - Web前端
作者:98wpeu发布时间:2026-09-15分类:网页前端技术浏览:2
关于PageSpeed 很久之前分享过一篇文章:谷歌新出性能优化工具-PageSpeed Insights,分析了此工具如何使用,大家可以去看下,今天我们来讨论下它用于优化渲染的一些知识点。
消除阻塞渲染的 javascript 和 CSS
要以最快速度完成首次渲染,需要最大限度减少网页上关键资源的数量并(尽可能)消除这些资源,最大限度减少下载的关键字节数,以及优化关键路径长度。
优化 JavaScript 的使用
默认情况下,Javascript 资源会阻塞解析器,除非将其标记为 async 或通过专门的 javascript 代码段进行添加。阻塞解析器的 javaScript 会强制浏览器等待 cssOM 并暂停 DOM 的构建,继而大大延迟首次渲染的时间。
首选使用异步 JavaScript 资源
异步资源不会阻塞文档解析器,让浏览器能够避免在执行脚本之前受阻于 CSSOM。通常,如果脚本可以使用 Async 属性,也就意味着它并非首次渲染所必需。可以考虑在首次渲染后异步加载脚本。
避免同步服务器调用
使用 navigator.sendBeacon() 方法来限制 XMLHttpRequests 在 unload 处理程序中发送的数据。 因为许多浏览器都对此类请求有同步要求,所以可能减慢网页转换速度,有时还很明显。 以下代码展示了如何利用 navigator.sendBeacon() 向 pagehide 处理程序而不是 unload 处理程序中的服务器发送数据。
<script>
function() {
window.addEventListener('pagehide', logdata, false);
function logData() {
navigator.sendBeacon(
'https://putsreq.herokuAPP.com/Dt7t2QzUkG18aDTMMcop',
'Sent by a beacon!');
}
}();
</script>
新增的 fetch() 方法提供了一种方便的数据异步请求方式。由于它尚未做到随处可用,因此您应该利用功能检测来测试其是否存在,然后再使用。该方法通过 Promise 而非多个事件处理程序来处理响应。不同于对 xmlhttpRequest 的响应,从 Chrome 43 开始,Fetch 响应将是 Stream 对象。这意味着调用 json() 也会返回 promise。
<script>
fetch('./API/some.JSON')
.then(
function(response) {
if (response.status !== 200) {
console.log('Looks like there was a PRoblem. Status code: ' + response.status);
return;
}
// Examine the text in the response
response.JSon().then(function(data) {
console.log(data);
});
}
)
.catch(function(err) {
console.log('Fetch error :-S', err);
});
</script>
fetch() 方法也可处理 post 请求。
<script>
fetch(url, {
method: 'post',
headers: {
"Content-type": "application/x-www-FORM-urlencoded; charset=UTF-8"
},
body: 'foo=bar&lorem=ipsum'
}).then(function() { // Aditional code });
</script>
延迟解析 JavaScript
为了最大限度减少浏览器渲染网页的工作量,应延迟任何非必需的脚本(即对构建首次渲染的可见内容无关紧要的脚本)。
避免运行时间长的 JavaScript
运行时间长的 JavaScript 会阻止浏览器构建 dom、CSSOM 以及渲染网页,所以任何对首次渲染无关紧要的初始化逻辑和功能都应延后执行。如果需要运行较长的初始化序列,请考虑将其拆分为若干阶段,以便浏览器可以间隔处理其他事件。
优化 CSS 的使用
CSS 是构建渲染树的必备元素,首次构建网页时,JavaScript 常常受阻于 CSS。确保将任何非必需的 CSS 都标记为非关键资源(例如打印和其他媒体查询),并应确保尽可能减少关键 CSS 的数量,以及尽可能缩短传送时间。
将 CSS 置于文档 head 标签内
尽早在 html 文档内指定所有 CSS 资源,以便浏览器尽早发现 <link> 标记并尽早发出 CSS 请求。
避免使用 CSS import
一个样式表可以使用 CSS import (@import) 指令从另一样式表文件导入规则。不过,应避免使用这些指令,因为它们会在关键路径中增加往返次数:只有在收到并解析完带有 @import 规则的 CSS 样式表之后,才会发现导入的 CSS 资源。
内联阻塞渲染的 CSS
为获得最佳性能,您可能会考虑将关键 CSS 直接内联到 HTML 文档内。这样做不会增加关键路径中的往返次数,并且如果实现得当,在只有 HTML 是阻塞渲染的资源时,可实现“一次往返”关键路径长度。
相关推荐
- 了解下JavaScript运算符种类、规则以及应用中的注意事项 - Web前端
- Google:这是造成我们全球范围内严重停电的原因 - Web前端
- 如何在SVG中创建复杂路径 - Web前端
- 数据库:温故JSON语法规则的应用知识 - Web前端
- SEO优化:Backlink反向连结构建时的注意事项 - Web前端
- JS Canvas小应用:实现酷炫动态背景,鼠标滑动背景跟着动 - Web前端
- 实例解析jQuery插件EasyUI最常用的表单验证规则 - Web前端
- jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法 - Web前端
- jQuery实现点击弹出背景变暗遮罩效果实例代码 - Web前端
- BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击) - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 4【第六章】Foundation之按钮和下拉功能 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6jQuery编写widget的一些技巧分享 - Web前端
- 7分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 8jQuery实现鼠标移到元素上动态提示消息框效果 - Web前端
- 9在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


