zoukankan      html  css  js  c++  java
  • 前端性能优化

    除了雅虎军规35条,这里再强调几条

    1. 首屏加载

    1. 首屏尽量使用服务端渲染

    2. 首屏尽量使用懒加载

    此懒加载并非图片的懒加载,而是指这个文档内容的懒加载。可以先服务端渲染用户可见的部分内容(实际要大于此,因为用户可能会滚动屏幕),

    剩余的部分用js去加载和渲染,这样可以尽快的显示首屏,又不影响用户的浏览。

    2. DNS预读取

    DNS预读取是一项使浏览器主动去执行域名解析的功能。DNS请求需要的带宽非常小,但是延迟却有点高。 下面是引用MDN的一句话:
    在某些浏览器中这个预读取的行为将会与页面实际内容并行发生(而不是串行)。正因如此,某些高延迟的域名的解析过程才不会卡住资源的加载。 这样可以极大的加速(尤其是移动网络环境下)页面的加载。在某些图片较多的页面中,在发起图片加载请求之前预先把域名解析好将会有至少 5% 的图片加载速度提升。
    具体做法: head标签里加上

    <link rel="dns-prefetch" href="https://data.dadaabc.com/">

    data.dadaabc.com为静态资源的域名,如还有其他链接的域名,都一起加进去。

    3. 脚本预解析

    在head中使用script的defer,能够使得浏览器提前解析脚本,但是有不会阻塞文档,并且会在文档加载完成后执行脚本。

    <script defer src="script.js">

    实际上,目前的浏览器在script阻塞浏览器加载的时候,会开启另一个线程来读取下面的html文档,继续对下面的资源进行解析和加载,
    但是不修改DOM树。

    4. 字体、图片预加载

    link的preload可以预加载一些字体和资源文件,显示的时候可以加快速度

    <link rel="preload" as="font" href="xxx.woff>

    跨域资源预加载要添加crossorigin属性

    <link rel="preload" crossorigin as="script" href="xxx.js">

    preload 加载页面必需的资源如 CDN 上的字体文件, prefetch 预先加载下一屏数据

    5. 多域名分发静态资源

    同域下浏览器能并发的请求有限,为了增加并发,尤其是一些静态资源上,可以使用多个域名。但由于域名DNS解析本身也是耗时的,
    所以也不是越多越好,chrome最大支持6路并发,所以一般设置2-4个域名较为合适。
    具体的做法是:再增加cdn域名来下载静态资源。比如图片全部用img.dadaabc.com/域名,
    css资源全部用css.dadaabc.com/域名,这些域名最终全部指向同样的cdn服务器。
    静态资源域名加前缀可以用gulp-rev-replace来实现。

    6. 优化关键渲染路径

    优化关键渲染路径,可以减少白屏时间。关键渲染路径表示浏览器呈现页面的所有必须步骤。 我们想要找到最小的阻塞CSS集合,或者关键 CSS,以使页面显示给用户。
    关键css指首屏视口内的css,非视口内的元素的css仍然为非关键css

    1.内联嵌入关键 CSS 样式

    内联可以加快解析渲染,缺点是不能缓存

    2.预加载非关键 CSS

    异步加载(或预加载preload)非关键css
    <link href="/style.96106fab.css" rel="preload" as="style" onload="this.rel='stylesheet'">

    相关工具

    webpack插件
    html-critical-webpack-plugin

    优化 Critical Rendering Path(关键渲染路径),尽可能减少阻塞渲染的 JavaScript 和 CSS。
    常见做法包括使用 async/defer 让浏览器下载 JavaScript 的同时不阻塞 HTML 解析,
    内联页面关键部分的样式到 HTML 中等。

  • 相关阅读:
    转帖:linux 下注册apache开机自启动
    apache 编译 rewrite 模块
    Skyline开发入门(C#)
    matlab的m文件怎么集成到vs里?
    C#打包安装与卸载
    OnClick与OnClientClick的时序和条件
    javascript弹出窗口代码大全
    .NET开发人员必知的八个网站
    [转] GIS算法源码集合
    最短路径算法——Dijkstra and Floyd算法
  • 原文地址:https://www.cnblogs.com/mengff/p/9487566.html
Copyright © 2011-2022 走看看