码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • web 性能提升(将持续更新……)


    尽量减少文档大小

    • 不添加不必要的容器

    使用时加载

    • 图片懒加载
      https://blog.csdn.net/weixin_41192489/article/details/126263221
    • 视频先用一张带播放按钮的图片显示,待点击播放时,才加载视频
      在这里插入图片描述

    不使用图片

    img 标签或 background-image 样式通过路径/网址来引用图片时,都会产生 http 请求,用以下不使用图片的方案,便能通过减少http请求来提升页面渲染性能。

    方案1. 将图片转换为Base64编码的数据

    适用场景:单次使用的小图片

    很多网站都提供了转换功能,如:
    http://tu.chacuo.net/imagetodataurl/

    上传图片后,复制图片的 URL 数据作为 img 标签的 src 值即可。

    <img src="data:image……省略具体图片的URL代码……" alt="">
    
    • 1

    在这里插入图片描述
    缺点:

    1. 浏览器无法再缓存图片(当需要在页面中多次引用同一张图片时,不得不在多处粘贴代码并且占用传输带宽),同时增大了样式文件体积。
    2. 移动设备上将Base64编码转化为图片物料也是需要设备的计算成本的,需要“加载”时间。

    方案2. 使用CSS绘图

    https://blog.csdn.net/weixin_41192489/article/details/126133834

    较少 HTTP 请求

    将请求进行合并,减少请求数量

    http请求耗时的地方有:域名跳转、DNS查找、TCP链接初始化、从缓存中查询等

    • 来自10个不同域名的请求所花费的时间多于来自5个不同域名请求所花费的时间
    • 自5个不同域名请求所花费的时间又多于来自5个相同域名的请求所花费的时间
    • 来自5个相同域名请求所花费的时间多余来自单个(将5个请求图片合并为一个图片)文件所需要花费的时间

    减少传输代价的常见技术手段有:

    • 使用CDN
    • 利用浏览器缓存
    • 使用CSS精灵(CSSSprites)
    • 使用Gzip压缩
    • 使用图标字体减少实体图片的请求数
    • 使用数据URI替代图片
      ……

    你不知道的性能消耗

    隐藏图片的加载

    <div id="test">  
    <img src="images/test.png" alt="" />  
    div>  
    
    @media all and (max-width: 600px) {  
        #test {   
            display:none;   
        }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    页面的宽度不足600px时。虽然图片元素随父容器#test被隐藏而不可见,但实际上图片请求仍然被发出。

    更快的样式选择器

    getElementsByClassName的OPS更高(几乎是querySelectorAll的800倍),效率更好。
    使用类名进行选择时,请优先使用 getElementsByClassName

    let elements = Array.prototype.slice.call(  
        document.getElementsByClassName  
        ? document.getElementsByClassName(lazyElementClassName)  
        : document.querySelectorAll('.' + lazyElementClassName)  
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    此处为兼容性写法:IE8不支持document.getElementsByClassName,所有的浏览器都支持document.querySelectorAll

    使用 requestAnimationFrame 提升 web 性能

    https://blog.csdn.net/weixin_41192489/article/details/126247756

    能使用CSS实现的功能勿用JavaScript

    JavaScript脚本的运行成本是很高的!

    借助后端的力量

    • 服务端渲染
    • 媒体查询改为后端通过判断用户设备浏览器的user-agent,精确返回该设备所需要的前端代码和相关资源。
    • 后端对图片、音频、视频进行实时压缩

    性能测试工具

    • 想查看不同浏览器(甚至低版本IE)的资源加载情况,可以使用Dynatrace的dynaTrace Ajax;
    • 想实际测试页面在不同设备上的情况,可以使用BrowserStack服务;
    • 想更细致地分析底层网络请求情况,可以使用CloudShark;
    • 想了解用户的用户体验,可以使用WebPagetest。

    更多技术

    欢迎大家留言共创,将持续更新哦!

  • 相关阅读:
    SQLServe联合主键、联合索引、唯一索引,聚集索引,和非聚集索引、主键、唯一约束和外键约束、索引运算总结
    Scrapy 下载多层请求、多页图片 (重写get_media_requests、file_path方法)
    基于微信体育馆预约小程序系统设计与实现 开题报告
    spring为什么使用三级缓存而不是两级
    地下水除砷工艺
    HP路由器和交换机日志分析
    ​一款开源的.NET程序集反编译、编辑和调试神器
    架构与思维:秒杀和竞拍的业务架构,永不过时的话题
    2009奥巴马的秋季开学演讲稿
    【代码】Android|判断asserts下的文件存在与否,以及普通文件存在与否
  • 原文地址:https://blog.csdn.net/weixin_41192489/article/details/126127108
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号