小别致真东西
文章77
标签31
分类26
性能优化之浏览器篇

性能优化之浏览器篇

把 Css 放在head 中加载

在浏览器解析完head 部分后、让浏览器知道需要引入哪些css文件,开始并行的去下载css资源,一边下载Css文件一边解析Html, 能够使页面更早的开始渲染

  • 让页面更早的开始渲染、避免闪屏 (DOM 结构先加载出来,css慢了一拍 页面重新渲染)
  • 最好能包含关键渲染路径的样式、首页的样式应该尽快的完成加载、提高用户体验

JS放在 body 标签结束前加载

js 资源的加载会阻塞 HTML 的解析 和 Css的渲染

不使用CSS 表达式

在css属性后使用 expression() 连接一段JavaScript表达式,css属性的值是JavaScript表达式的结果。

background-color: expression((new Date()).getHours()%2?"#FFFFFF": "#000000" );

看似强大, 实际性能开销很大,可能导致页面卡顿

表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给 CSS 表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到 10000 次以上的计算量。
calc() 性能待验证

移除无匹配的样式

移除无匹配的样式,有两个好处:

  • 删除无用的样式后可以缩减样式文件的体积,加快资源下载速度;

  • 对于浏览器而言,所有的样式规则的都会被解析后索引起来,即使是当前页面无匹配的规则。移除无匹配的规则,减少索引项,加快浏览器查找速度;

用外链的方式引入css 和 js

  • 通过使用外链可以减少html 文件的体积
  • 作为外链文件、Css/Js 可以作为静态资源、通过合理的利用浏览器的缓存对需要的文件进行缓存; 在第二次访问时可以加快页面的加载速度

不要重复加载JS

  • 在IE中,例如在加载一个jquery以后再加载一个jquery,仍然是算作两个不同的请求,不能发挥缓存的优势
  • 重复加载js意味着更长的JS执行时间

用 Get 方式发起 Ajax 请求

  • Get 方式可以缓存
  • 如果是获取信息 Get 更加语义化

如果是提交数据 使用Post 更加语义化

组件延迟加载

规划页面中引用的姿态资源加载顺序、优先级的能力

  • 保障关键页面资源的优先加载: 浏览器的并发数限制

    在同一个域名下面,一般现代浏览器的并发数为6

  • 按需加载 Lazyload 典型: 电商网站

    在图片比较多的电商网站中,lazyload 十分实用 data-src -> src

避免在页面中使用iFrame

  • 会阻塞父文档的 onload 事件
  • 即使是空白iFrame 也比较耗时

减少COOKIE体积

  • COOKIE每次请求都会全都带上
    COOKIE了解更多

    每次请求跟主文档相关的信息,所有的cookie都会带上

减少 JS 中的 DOM 访问

JS中对DOM 的访问是不可避免的, 但可以进行一下优化

  • 对于查找到的元素, 先将其缓存在变量中
  • 节点增加时合理利用 DocumentFragment
  • 不要用JS 去频繁修改样式

使用常见的图片优化手段

相比代码, 图片的体积很大

不要在HTML中缩放图片

在实际中使用什么尺寸的图片就提供多大尺寸的图片

  • 徒增渲染开销, 提供适当尺寸即可

    不要把图片的src置空

  • 在主流浏览器中 IE、Chrome、FireFox 都会引发指向当前主文档的额外请求

参考文档

高性能 CSS