• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >CSS > CSS 异步加载技术 不影响页面渲染

CSS 异步加载技术 不影响页面渲染

作者:php爱好者 字体:[增加 减小] 来源:互联网 时间:2017-05-30

本文主要包含异步加载css,ajax异步加载页面,异步刷新页面,ajax异步刷新页面,页面异步加载等相关知识,php爱好者希望在学习及工作中可以帮助到您

CSS 异步加载技术 不影响页面渲染

触发异步样式下载的诀窍是使用一个 <link> 元素,并 为media 属性设置一个不可用的值 (我用的是 media=”none”, 不过其它的任何值也是可以的)。当一个媒体查询的结果值计算出来是 false 的时候,浏览器仍然会下载样式表,但是不会在渲染页面之前等待样式表的资源可用。

<link rel="stylesheet" href="css.css" media="none">

样式表一下载好,media 属性就必须被设置一个可用的值,以便样式规则能被应用到 html 文档中onload 事件就可以用来将 media 属性切换到all:

<link rel="stylesheet" href="css.css" media="none" onload="if(media!='all')media='all'">

这种加载 CSS 的方法将比标准的方法在向访问者传送有用信息的速度上快很多。至关重要的 CSS 加载时仍然可以用一般的阻塞方式处理 (或者你也可以为了最终的性能对它进行内联处理) ,而不重要的样式则可以慢慢下载,并在解析/渲染过程的后面一点的阶段进行应用.

这一技术使用了 JavaScript,但是你也可以在一个<noscript>元素中封装一个等价的阻塞方式的 <link> 元素来处理不能运行 JavaScript 的浏览器:

<link rel="stylesheet" href="css.css" media="none" onload="if(media!='all')media='all'">

<noscript><link rel="stylesheet" href="css.css"></noscript>

这项技术有一个副作用。当一个非阻塞的样式表完成加载,文档就将进行重绘,以反映它定义的任何新的样式规则。而注入新的样式到页面中会触发内容回流, 但这也只是在这对第一次没有历史缓存的页面加载过程中会是一个问题。由于任何跟性能有关的东西,你都将要在需要控制一次回流耗费超过潜在的速度优势时,进行必要的调整。

使用非阻塞 CSS 加载字体

字体第一次绘制的性能是一个问题,它们是阻塞式的资源,也会让应用它们的文本在该字体下载时不可见 。使用上述示例中的非阻塞链接,就可能在幕后下载包含字体数据的样式表,不阻塞压面的渲染:

<link rel="stylesheet" href="main.css">

<link rel="stylesheet" href="font.css" media="none" onload="if(media!='all')media='all'">

font.css 包含一个 base64 编码的 WOFF 版本的 Merriweather 字体。

@font-face {

font-family: Merriweather;

font-style: normal;

font-weight: 400;

src: local('Merriweather'), url('data:application/x-font-woff;charset=utf-8;base64,...')

}

main.css 包含了需要应用到站点的所有样式规则。下面是字体的声明:

body {

font-family: Merriweather, "Lucida Grande", ...;

}

当字体正在下载时,第一个匹配到的备用回退字体 (这里就是 Lucida Grande) 被用来渲染页面的内容。 一旦字体样式表被应用了,Merriweather 就会被使用. 我尝试去确保回退的字体将相似的布局特征共享给优先选择的字体,那样不可避免的回流就尽可能微妙了。

我在基于一个模拟的 3G 网络连接的 Chrome 中,使用我的 Google Analytics Debugger 站点 拿阻塞和非阻塞方式进行了对比测试。本地的测试产生了如下所示的网络图;注意 DOMContentLoaded 在更早的 450ms 触发了,而资源在运用了非阻塞技术后下载起来更快了:

 

模拟 3G 网络的图形。顶部显示了阻塞式的字体。底部显示了非阻塞式的字体。

将其部署到一个测试服务器并在 3G 连接环境下运行 webpagetest 构造产生了如下时间线 :

 

3G 时间线。顶部显示阻塞式的字体,底部展示非阻塞式的字体。

两种方法都花了2.8秒钟来完整的渲染页面,但是非阻塞方法比一般的阻塞方法使得绘制早了1秒钟。在在主样式表进行了内联的情况下运行相同的测试,显示了在将非阻塞 CSS 被应用于处理字体时有0.7秒的时间优势:

 

主 CSS 内容的 3G 时间线。顶部显示阻塞式字体,底部显示非阻塞式字体。

这一技术对于字体的效果确实很好,但是我也建议对新的 CSS 字体加载模块保持密切关注,它会给与我们超过字体加载的更多的控制能力。

总结

加载字体是应用非阻塞技术的一个例子,而他也可以被用于其它的目的,比如从核心的 CSS 处分离出 JavaScript 增强的样式。

我已经开始去尝试将样式分成框架(核心布局) 和展现 (其它所有的东西)这种想法,它可以让重要的页面布局阻塞页面渲染,而可见的样式数据延迟一会。

您可能想查找下面的文章:

  • CSS 异步加载技术 不影响页面渲染

相关文章

  • 2017-08-06深入剖析z-index属性
  • 2017-08-06用CSS3来实现社交分享按钮
  • 2017-08-06IE6下css设置容器高度的BUG不能小于某个值
  • 2017-08-06CSS解决页面图片水平垂直居中问题的方法
  • 2017-08-06轻松掌握CSS3中的字体大小单位rem的使用方法
  • 2017-08-06css中style和class的加载顺序示例介绍
  • 2017-08-06使用CSS去掉网页中超链接的下划线示例
  • 2017-08-06固定浮动定位(fixed)实现思路及代码
  • 2017-08-06CSS画出各种三角形如等边三角形
  • 2017-08-06对css性能优化的一点看法

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • DIV 自动滚动功能及滚动条颜色修改的代码
    • 有利于SEO优化的DIV+CSS的命名规则小结
    • CSS3 text-shadow实现文字阴影效果
    • 8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
    • css span右对齐 css li标签中span日期靠右布局实现代码
    • 利用css绘制三角形的方法及拓展
    • CSS美化下拉框select在火狐和谷歌浏览器下已测试
    • CSS定位的几个类型简单介绍
    • CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
    • 在IE8 FF中使用padding设置select控件文字垂直居中

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有