当前位置: 首页 > news >正文

前端面试题之性能优化大杂烩

主要内容为下面几大类:移动端、图片、JavaScript、css、html、页面内容、服务器、cookie。

移动端性能优化:

  1. 保持单个文件小于25KB
    移动网站页面要求下载资源,如果文件过大,会大大减慢页面加载速度。

  2. 打包内容为分段multipart文档
    由于HTTP请求每一次都会执行三次握手,每次握手都会消耗较多的时间。使用multipart,实现了多文件同时上传,可用一个HTTP请求获取多个组件。

图片优化:

  1. CSS sprites
    俗称 CSS 精灵、雪碧图,雪花图等。即将多张小图片合并成一张图片,达到减少 HTTP 请求的一种解决方案。可通过 CSS中的background 属性访问图片内容。这种方案同时还可以减少图片总字节数,节省命名词汇量。

  2. 压缩图片
    图片占据资源极大,因此尽量避免使用多余的图片,使用时选择最合适的格式大小,然后使用智图压缩,同时在代码中用Srcset来按需显示。(切记不要过分压缩 可能会导致图片迷糊)

  3. 尽量避免重设图片大小
    重设图片大小是指在页面、CSS、JavaScript等中多次重置图片大小,多次重设图片大小会引发图片的多次重绘,影响性能。

  4. 图片尽量避免使用DataURL
    DataURL图片没有使用图片的压缩算法文件会变大,并且要解码后再渲染,加载慢耗时长。

  5. 图片懒加载
    图片对页面加载速度影响非常大。比如,当一个页面内容比较多的时候,加载速度就会大大的降低,极大的影响到用户体验 。更有甚者,一个页面可能会有几百个图片,但是页面上仅仅只显示前几张图片,那其他的图片是否可以晚点加载用于提高性能。具体可见 >>

JavaScript相关优化

  1. 把脚本放在页面底部
    放在前面js加载会造成阻塞,影响后面dom的加载

  2. 使用外部JavaScript和CSS
    在现实环境中使用外部文件通常会产生较快的页面,因为 JavaScript 和 CSS 有机会被浏览器缓存起来。对于内联的情况,由于 HTML 文档通常不会被配置为可以进行缓存的,所以每次请求 HTML 文档都要下载 JavaScript 和 CSS。所以,如果 JavaScript 和 CSS 在外部文件中,浏览器可以缓存它们,HTML 文档的大小会被减少而不必增加 HTTP 请求数量。

  3. 压缩JavaScript和CSS
    压缩文件是为了降低网络传输量,减少页面请求的响应时间。

  4. 减少DOM操作
    操作dom会产生几种动作,极大的影响渲染的效率。其中layout(布局)和paint(绘制)是最大的。

  5. js开销缩短解析时间
    开销:加载-》解析和编译-》执行
    js的解析和编译,执行要花很长时间(谷歌开发工具中的performance中可以查看。选中main主线程中的某一段。)
    解决方案:

    • 代码拆分按需加载
    • tree shaking代码减重
    • 避免长任务
    • requestAnimationFrame和repuestIdleCallback进行时间调度
  6. v8编译原理(代码优化)

    • 解析js代码成抽象语法树-》字节码-》机器码
      编译过程会进行优化
      运行时可能会发生反优化
    • v8内部优化
      脚本流:边下载边解析
      字节码缓存:常用的字节码会存起来(这个文件用到其他的文件也用到的参数)
      函数懒解析:先解析用到的
    • 对象优化(迎合v8进行优化)
      保证对象初始化顺序一致(对象初始化时v8会生成隐藏属性以便后续复用并且是按照顺序排序的)
      不要直接赋值对象新属性(追加的属性需要通过描述数组间接查找)
      使用数组代替类数组(v8会对数组进行优化)比如先将类数组转化成数组
      避免读取数组越界(比如for循环多查找1个下标会照成性能相差6倍)

造成undefined和数字比较
数组也是对象,当找不到对应下标的时候回沿着原型链向上找造成额外开销
业务上无效

  1. js内存,避免造成内存泄漏
    通过变量是否能被访问到来判断内存是否释放。
  • 局部变量: 函数执行完没有闭包引用会被标记回收
  • 全局变量: 直到浏览器被卸载页面释放
  • 回收机制:
    引用计数:每调用一次加一,当计数为0的时候进行回收。缺点是不能解决循环引用(例如a对象依赖于b对象,标记清除(垃圾回收): 从根节点去访问,当访问到不能被访问的对象就进行标记然后进行垃圾回收。(当a对象
    解决:避免意外的全局变量;避免反复运行引发的闭包;避免脱离的dom元素没有被回收(所以react有ref这个api)。

CSS 相关优化

  1. 把样式表放在标签中
    css放在head标签中比css放在body标签尾部少了一次构建RenderTree, 一次计算布局和一次渲染网页, 因此性能会更好。
  2. 不要使用CSS样式表
  3. 使用替代@import
  4. 不要使用filter
  5. 避免元素类型转化(数组中放多种类型不利于v8引擎优化代码)
    • 降低css对渲染的阻塞(按需加载,放在dom前面加载)
    • 利用pu完成动画(前面讲到的复合)
    • 使用contain进行优化(优化强度大。例如: contan:layout告诉浏览器这个节点内部的子元素和外面的使用font-display进行优化:让文字更早的显示在页面上,减轻文字闪动的问题

html 相关优化

  1. 减少iframes使用
  2. 压缩空白符
  3. 避免嵌套层次太深
  4. 避免使用table布局
  5. 减少没必要的注释
  6. 删除元素默认属性(比如默认checkbox等)

开发内容相关优化

  1. 减少HTTP请求数
  2. 减少DNS重定向
  3. 缓存AJax请求
  4. 延迟加载
  5. 预加载
  6. 减少DOM元素的数量
  7. 划分内容到不同域名
  8. 尽量减少使用iframe
  9. 避免404错误

服务器相关优化

  1. 使用CDN
  2. 添加Expires或Cache-Control响应头
  3. 启用Gzip
  4. 配置Etag
  5. 尽早输出缓冲
  6. Ajax请求使用GET方法
  7. 避免图片src为空
  8. 传输加载优化
    服务器启用gzip
  9. keep Alive(持久TCP连接)
    keepalive_requests 100;请求100次后开启http的keepAlive有keepalive_timeout 65;65秒后关闭。
  10. http缓存
    最好是用no-cache(要用的时候需要在服务器那边Etag验证下)
  11. service workers
    • 加速重复访问
    • 离线支持

Cookie相关优化

  1. 减少cookie大小
  2. 静态资源使用无cookie域名

首屏加载优化

  1. 资源压缩、传输压缩、代码拆分、tree shaking、http缓存
  2. 路由懒加载、预渲染、inlineCss、虚拟列表
  3. prefetch和preload调整加载顺序js内存管理

相关文章:

前端面试题之性能优化大杂烩

主要内容为下面几大类:移动端、图片、JavaScript、css、html、页面内容、服务器、cookie。 移动端性能优化: 保持单个文件小于25KB 移动网站页面要求下载资源,如果文件过大,会大大减慢页面加载速度。 打包内容为分段multipart文…...

SpringBoot+Vue实现养老智慧服务平台

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...

tigervnc2023

sudo apt-get install tigervnc-standalone-server 配置用户 /etc/tigervnc/vncserver.users :1user1 :2user2 :3user3 全局配置 /etc/tigervnc/vncserver-config-defaults $localhost"no"; $geometry "1920x1200"; 分别进入user1 user2 user3 用户…...

智能三子棋(人机大战)—— 你会是最终赢家吗?万字讲解让你实现与自己对弈

魔王的介绍:😶‍🌫️一名双非本科大一小白。魔王的目标:🤯努力赶上周围卷王的脚步。魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍&#x1…...

【自制开发板】自制STM32F407开发板(含TFT 8080串口屏幕接口)

【2023 年 2 月 14 日】 许久没有更新,最近做了个小开发板玩了玩。更新一下吧,作为记录!! 主要是象试一下LVGL在STM32上的应用,所以开发板的大小都是基于屏幕大小来设计的。 分享出来,给大家一个板子结构…...

openvino yolov5/ssd 实时推流目标检测在html上显示

安装ffmepg并添加到环境变量中,流媒体使用m7s 运行效果 SSD:检测在10ms左右,yolov5在100ms左右 app.py #!/usr/local/bin/python3 # encodin: utf-8import subprocess import threading import time import cv2 import osfrom OpenVinoYoloV…...

基于FPGA的 SPI通信 设计(1)

引言 低速通信目前搞过 UART串口通信、IIC通信。其实 SPI 也算是中低速(有时也可以用作高速通信)串行通信的范畴,但是一直还没真正实现过,所以此系列就 SPI的协议以及FPGA设计作几篇博客记录。欢迎订阅关注~ SPI 标准协议 x1模式…...

为什么西门子、美的等企业这样进行架构升级,看看改造效果就知道了

在工业领域, 生产、测试、运行阶段都可能会产生大量带有时间戳的传感器数据,这都属于典型的时序数据。时序数据主要由各类型实时监测、检查与分析设备所采集或产生,涉及制造、电力、化工、工程作业等多个行业,具备写多读少、量非常…...

open3d点云配准函数registration_icp

文章目录基本原理open3d调用绘图基本原理 ICP, 即Iterative Closest Point, 迭代点算法。 ICP算法有多种形式,其中最简单的思路就是比较点与点之间的距离,对于点云P{pi},Q{qi}P\{p_i\}, Q\{q_i\}P{pi​},Q{qi​}而言,如果二者是同一目标&am…...

HTML编码规范

本篇文章是基于王叨叨大佬师父维护的文档梳理的,有兴趣可以去看一下原文HTML编码规范。 1. 缩进与换行 【建议】 使用 2 个空格作为一个缩进层级,不允许使用tab字符 解释: ​ 具体项目,可以使用2个空格,也可以使用…...

PDF SDK for Linux 8.4.2 Crack

PDF SDK for Linux 是适用于任何 Linux 企业或云应用程序的强大解决方案,非常适合需要完全可定制的 PDF 查看器或后端流程的任何 Linux 开发人员。 将 Foxit PDF SDK 嵌入到基于 Linux 的应用程序中非常容易。只需打开您最喜欢的 Linux IDE,复制您需要的…...

vb 模块和作用域的关系

模块在VB中有三种类型的模块,分别是窗体模块、标准模块和类模块。窗体模块窗体模块中包含了窗体以及窗体中所有控件的事件过程,文件扩展名为(*.frm),窗体文件中不仅包含窗体对象的外观设计,也包含窗体模块(…...

Redis分布式锁

一、背景 与分布式锁相对应的是「单机锁」,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来「互斥」,以保证共享变量的正确性,其使用范围是在「同一个进程」中。单机环境下&#xff0…...

京东前端经典面试题整理

img的srcset属性的作⽤&#xff1f; 响应式页面中经常用到根据屏幕密度设置不同的图片。这时就用到了 img 标签的srcset属性。srcset属性用于设置不同屏幕密度下&#xff0c;img 会自动加载不同的图片。用法如下&#xff1a; <img src"image-128.png" srcset&qu…...

django+mysql实现一个简单的web登录页面

目录 一、使用pyacharm创建一个django项目 二、启动django项目验证 三、配置mysql数据库 1、本地安装mysql数据库 1&#xff09;安装mysql数据库 2&#xff09;自己创建一个数据库 2、安装 pymysql 3、配置mysql数据库 1&#xff09;在项目同名包下的_init_.py里面添加…...

python cartopy手动导入地图数据绘制底图/python地图上绘制散点图:Downloading:warnings/散点图添加图里标签

……开学回所&#xff0c;打开电脑spyder一看一脸懵逼&#xff0c;简直不敢相信这些都是我自己用过的代码&#xff0c;想把以前的自己喊过来科研了&#xff08;&#xff09; 废话少说&#xff0c;最近写小综述论文&#xff0c;需要绘制一个地图底图&#xff0b;散点图&#xff…...

JavaScript中常用的数组方法

在日常开发中&#xff0c;我们会接触到js中数组的一些方法&#xff0c;这些方法对我们来说&#xff0c;可以很便利的达到我们想要的结果&#xff0c;但是因为方法比较多&#xff0c;有些方法也不常用&#xff0c;可能会过一段时间就会忘记&#xff0c;那么在这里我整理了一些数…...

磁疗为什么“没效果”?原来真相是这样!

很多人磁疗之后&#xff0c; 总爱迫不及待问一个问题&#xff1a; “这个多长时间见效啊&#xff1f;” …… 还有些人几天没有效果&#xff0c; 就果断下结论&#xff1a; “这东西没用&#xff01;” …… 有不少人错误地把磁疗等同于“药品”一样看待&#xff0c;总觉得…...

【直击招聘C++】5.1函数模板

5.1函数模板一、要点归纳1.定义函数模板2.实例化函数模板3.重载模板函数4.函数调用的匹配顺序一、要点归纳 1.定义函数模板 定义函数模板的一般格式如下&#xff1a; template<类型形参表> 返回类型 函数名&#xff08;形参表&#xff09; {函数体&#xff1b; }例如以…...

谈谈Java多线程离不开的AQS

如果你想深入研究Java并发的话&#xff0c;那么AQS一定是绕不开的一块知识点&#xff0c;Java并发包很多的同步工具类底层都是基于AQS来实现的&#xff0c;比如我们工作中经常用的Lock工具ReentrantLock、栅栏CountDownLatch、信号量Semaphore等&#xff0c;而且关于AQS的知识点…...

国际化语言,多语言三种方式

可以用透传的方式&#xff0c;自己写local的json文件&#xff0c;不需要配置什么&#xff0c;直接传&#xff0c;自己写方法i18n nextjsi18n umi4一、透传的方式 export const AppContext React.createContext<any>({})app.tsx 用context包裹import type { AppProps } f…...

C++——哈希3|位图

目录 常见哈希函数 位图 位图扩展题 位图的应用 常见哈希函数 1. 直接定址法--(常用) 这种方法不存在哈希冲突 取关键字的某个线性函数为散列地址&#xff1a;Hash&#xff08;Key&#xff09; A*Key B 优点&#xff1a;简单、均匀 缺点&#xff1a;需要事先知道关键字的…...

75 error

全部 答对 答错 选择题 3. 某公司非常倚重预测型方法交付项目&#xff0c;而其招聘的新项目经理却习惯于运用混合型方法。项目范围包含很多不清晰的需求。项目经理应该如何规划项目的交付&#xff1f; A company that is heavily focused on delivering projects using predi…...

ESP-C3入门8. 连接WiFi并打印信息

ESP-C3入门8. 连接WiFi并打印信息一、ESP32 连接WiFi的基本操作流程1. 初始化nvs存储2. 配置WiFi工作模式3. 设置WiFi登陆信息4. 启动WiFi5. 开启连接6. 判断是否成功二、事件处理函数1. 定义事件处理函数2. 创建事件组3. 在事件处理函数中设置事件组位4. 在其他任务中等待事件…...

使用python将EXCEL表格中数据转存到数据库

使用Python将excel表格中数据转存到数据库 1. 思路&#xff1a; 1&#xff09; 使用python读取excel表格中数据 2&#xff09;根据数据生成sql语句 3&#xff09;批量运行sql语句 2. 代码&#xff1a; import pandas as pddef readExcel(path, excel_file):return pd.read_e…...

【C++】类和对象(三)

目录 一、构造函数补充 1、初始化列表 1.1、初始化列表概念 1.2、初始化列表性质 2、explicit关键字 二、static成员 1、概念及使用 2、性质总结 三、友元 1、友元函数 2、友元类 四、内部类 五、拷贝对象时的一些编译器优化 一、构造函数补充 在《类和对象&#x…...

vTESTstudio - VT System CAPL Functions - General/Trigger Function

前面文章中我们已经介绍了常用的几种板卡的基本信息&#xff0c;那这些板卡该如何去通过软件调用呢&#xff1f;带着这个问题我们开始新的一块内容 - VT系统相关的自动化控制函数介绍&#xff0c;我会按照不同的板卡来分类&#xff0c;对其可控制的函数进行介绍&#xff0c;方便…...

IDEA 快捷键

ctrlD &#xff1a;复制当前行到下一行 ctrlO : 重写当前类的方法 ctrlshiftu : 大小写转化 Alt 上/下 &#xff1a;跳到上一个、下一个函数 Alt 左/右 : 回到上一个、下一个文件 Alt 回车 &#xff1a; 代码修正 Alt Insert &#xff1a; 插入代码 Ctrl Alt L &#xf…...

2023新华为OD机试题 - 入栈出栈(JavaScript) | 刷完必过

入栈出栈 题目 向一个空栈中依次存入正整数 假设入栈元素N(1 <= N <= 2^31-1) 按顺序依次为Nx ... N4、N3、N2、N1, 当元素入栈时,如果N1=N2+...Ny (y的范围[2,x],1 <= x <= 1000) 则N1到Ny全部元素出栈,重新入栈新元素M(M=2*N1) 如依次向栈存储6、1、2、3,当存…...

微信公众号扫码授权登录思路

引言 上学期研究了一下微信登录相关内容&#xff0c;也写了两三篇笔记&#xff0c;但是最后实际登录流程没有写&#xff0c;主要因为感觉功能完成有所欠缺&#xff0c;一直也没有好的思路&#xff1b;这两天我又看了看官方文档&#xff0c;重新构思了一下微信公众号登录相关的…...

网站制作机构/网站建设网站设计

试卷编号&#xff1a;0363 座位号 2018—2019学年度第一学期期末考试 市场调查与预测 试题 2019年01月 “你的手机是什么品牌&#xff1f;”&#xff0c;该问题犯的错误是&#xff08; &#xff09;。 A.断定性提问 B.诱导式问题 C.逻辑错误 D.个人隐私&#xff08; &#xf…...

最专业的网站建设seo优化服务公司/国外浏览器搜索引擎入口

1.1 数据结构 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系&#xff0c;并对这种结构定义相应的运算&#xff0c;而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 例子&#xff1a;就像我们在用 计算机的文件的存储。就是树型存储。 数据结构…...

手机网站与电脑网站的区别/网络营销技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广西省安全员B证最新解析是安全生产模拟考试一点通总题库中生成的一套广西省安全员B证新版试题&#xff0c;安全生产模拟考试一点通上广西省安全员B证作业手机同步练习。2021年广西省安全员B证最新解析及广西省安全员…...

三亚网站建设方案/整合营销传播策划方案

计算机编程有很多专业的术语&#xff0c;如构造函数&#xff0c;有人会说构造函数不是编程方法吗?其实这两者还是有些区别的&#xff0c;下面小编告诉你。构造函数与方法的区别1.在C#中&#xff0c;一些都是对象。你要用一个对象&#xff0c;就必须用new来实例化类static类例外…...

网页图片设置/seo优化专家

对于刚装完java的环境&#xff0c;在运行jar包时可能会遇到证书问题&#xff1a; javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException sun.security.provider.certpath.SunCertPathBuilderException 可以尝试以下办法&#xff1a; 以windows为例&…...

iis发布网站无法访问/电商网站建设方案

第一部分&#xff1a;预备知识 原文&#xff1a;Part I: Initial Knowledge 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要学习的第一件事就是一切事情。我知道这是吓人的&#xff0c;但我在介绍中提到&#xff0c;你在整本书中只会练习三个…...