• 静态资源优化:图片、HTML、CSS优化


    笔记:刘威(putaoshu)的前端全链路性能优化实战

    1、图片

    JPEG:适合颜色丰富的照片、彩色图大焦点图、通栏banner图、结构不规则的图形;不适合线条图像、不支持透明度等(常用:照片)

    PNG:适合纯色、透明、线条绘图、图标;边缘清晰、有大块相同颜色区域;颜色数较少但需要半透明;由于是无损存储,彩色图像体积太大(常用:图标)

    GIF:适合动画、会动的图标。只能完全透明或完全不透明。

    webp:适用于图形和半透明图像。不适合彩色图片。比GIF有更好的动画,可以设置透明度。无损的webp比PNG小,有损的webp比JPEG小。

    (不确定是不是webp还未支持ie,目前看到jd首页给ie返回的是jpg图片,给chrome返回了webp格式的图片)

    2、压缩工具

    (1)压缩png:node-pngquant-native

    可以npm install直接安装。

    使用:pngquant.option({}).compress(buffer);

    (2)压缩jpg:jpegtran

    使用:jepgtran -copy none -optimize -outfile out.jpg in.jpg

    (3)压缩gif:Gifsicle,通过改变每帧比例,同时可以使用透明来达到更小的文件大小

    使用:优化基本设置为不小于2. gitsicle --optimize=3 -o out.gif in.gif

    3、图片尺寸随网络环境变化

    通过在图片URL后缀加不同参数来控制不同网络环境下加载不同尺寸和像素的图片

    4、响应式图片

    不同窗口大小、不同设备上展示不同大小的图片

    (1)JavaScript绑定事件检测窗口大小

    (2)CSS媒体查询

    @media screen and (max-640px){

      my_image{640px;}  }

    (3)img标签属性

    <img srcset='img-320w.jpg,img-640w.jpg 2x,img-960w.jpg 3x',

      src="img-960w.jpg" alt="img"> 

    5、逐步加载图像

    (1)统一使用占位符

    (2)使用LQIP:低质量图片占位,可通过npm install lqip安装

    (3)使用SQIP:基于svg的图像占位符,可通过npm install sqip安装

    6、真的需要图片吗?

    (1)web font代替图片

    (2)使用data url代替图片

    (3)采用image sprite(雪碧图)

    7、图片服务器自动优化

    图片服务器自动化优化是可以在图片url上增加不同特殊参数,服务器自动化生产不同格式、大小、质量的图片

    处理方法:图片裁剪(剪切、填充、拉伸、缩放等)、图片格式转换、图片处理(加水印、高斯模糊、重心处理等)、AI能力(鉴黄、智能抠图、智能排版等)

    8、精简HTML代码

    (1)减少HTML的嵌套

    (2)减少DOM节点数

    (3)减少无语义代码

    (4)删除http或者https。如果url的协议头和当前页面的协议头一致,或多协议头都可用,就可以考虑删除协议头

    (5)删除多余的空格、换行、缩进和不必要的注释

    (6)省略冗余标签和属性

    (7)使用相对路径的URL

    (8)文件放在合适位置

    a)css样式文件链接尽量放在页面头部

    b)js引用放在html,防止阻塞渲染

    c)设置favicon.ico:防止控制台报错,且出于用户观感考虑

    d)增加首屏必要的css和js:出于用户体验考虑

    9、css的优化:

    1)提升css渲染性能

      谨慎使用expensive属性(如:nth-child伪类、position:fixed定位);尽量减少样式层级数;尽量避免使用占用过多CPU和内存的属性(如text-indnt:-9999px);尽量避免使用耗电量大的属性(CSS3 3D transforms、CSS3 transitions、Opacity);

      尽量避免使用CSS表达式;尽量避免使用通配符选择器;尽量避免类正则的属性选择器;

    2)提升CSS文件加载性能

      使用外链的css;尽量避免使用@import

    3)精简css代码

      a)使用缩写语句

      b)删除不必要的零、不必要的单位、过多的分号;

      c)删除空格和注释

      d)尽量减少样式表的大小

    4)合理使用Web Fonts

      a)将字体布署CDN上

      b)将字体以base64形式保存在css中并通过localstorage进行缓存

      c)Google字体库使用国内托管服务

    5)css动画优化

      a)尽量避免同时动画

      b)延迟动画初始化

      c)结合SVG

  • 相关阅读:
    第二节:如何正确使用WebApi和使用过程中的一些坑
    nodejs中function*、yield和Promise的示例
    关于nodejs访问mysql的思考
    nodejs使用log4js记录日志
    nodejs初识
    Spring学习笔记(入门)
    mybatis使用注解开发
    MyBatis配置文件中的常用配置
    using 自动释放资源示例
    Java将byte[]和int的互相转换
  • 原文地址:https://www.cnblogs.com/cvv54/p/13245844.html
Copyright © 2020-2023  润新知