web前端性能优化

一、什么是前端性能优化
     从用户访问资源到资源完整的展现在用户面前的过程中,通过技术手段和优化策略,缩短每个步骤的处理时间从而提升整个资源的访问和呈现速度。
二、为什么要做前端性能优
  提升网站性能,提升用户体验
三、前端性能优化的原则
  1、因地制宜
  2、不出bug
四、从浏览器发起请求到页面能正常浏览都有哪些阶段
  预处理——>DNS解析——>建立连接——>发起请求——>等待响应——>接受数据——>处理元素——>布局渲染
五、性能优化的具体方法
一)内容层面
  1、DNS解析优化(DNS缓存、减少DNS查找、keep-alive、适当的主机域名)
  2、避免重定向
  3、切分到多个域名
  4、杜绝404
二)网络传输阶段
  1、减少传输过程中实体的大小
  请减少HTTP请求基本原理:当我们请求的网页文件中有很多图片、CSS、JS甚至音乐等信息时,将会频繁的与服务器建立连接,与释放连接,这必定会造成资源的浪费,且每个HTTP请求都会对服务器和浏览器产生性能负担。解决方法:请看第二点。
1)缓存
2)cookie优化
因为Cookie是本地的磁盘文件,每次浏览器都会去读取相应的Cookie,所以建议去除不必要的Coockie,使Coockie体积尽量小以减少对用户响应的影响;
      使用Cookie跨域操作时注意在适应级别的域名上设置coockie以便使子域名不受其影响;
      Cookie是有生命周期的,所以请注意设置合理的过期时间,合理地Expire时间和不要过早去清除coockie,都会改善用户的响应时间。
      3)文件压缩(Accept-Encoding:g-zip)
      图片数据最大关键是压缩图片
1)图片的格式
2)使用base64(转换为二进制编码)嵌入
原理:引入图片路径,通过base64转换为二进制,(定义一个函数),在其中通过转换的编码canvas绘制出一个新的图片
         3)压缩图片和使用图片Sprite技术
            基本原理:
            注:其实压缩图片和图片精灵是两个方面的技术,可是既然都是关于图片的优化还是放到一块吧。
            现在由于工作的细分,专业的前端工程师已经少有机会去切图了,可是关于图片压缩还是得略微了解,一般图片压缩的方式有:
              1.缩小图片分辨率;
              2.改变图片格式;
              3.降低图片保存质量
  2、减少请求的次数
      1)文件适当的合并
2)雪碧图
  3、异步加载(并发,requirejs)
  4、预加载、延后加载、按需加载
 5、请正确理解 Repaint 和 Reflow
    注:Repaint 和 Reflow 也就是重绘和重排
    基本原理:
      Repaint(重绘)就是在一个元素的外观被改变,但没有改变布局(宽高)的情况下发生,如改变visibility、outline、背景色等等。 
      Reflow(重排)就是DOM的变化影响到了元素的几何属性(宽和高),浏览器会重新计算元素的几何属性,会使渲染树中受到影响的部分失效,
浏览器会验证DOM树上的所有其它结点的visibility属性,这也是Reflow低效的原因。如:改变窗囗大小、改变文字大小、内容的改变、浏览器窗口变化,style属性
如果Reflow的过于频繁,CPU使用率就会噌噌的往上涨,所以前端也就有必要知道 Repaint 和 Reflow的知识。
三)渲染阶段
   1、js放底部,css放顶部
     基本原理:
      注:这个是很基础且必须遵循的知识点,可是为了文章的完整性勉为其难加进来吧,嘿嘿。
      引入外部文件好处是显而易见的,而且是项目稍稍复杂一点的时候就有必要了这样做了。
      易维护、易扩展,方便管理和重复利用。
      正确的方式:
      JavaScript是浏览器中的霸主,为什么这么说,因为在浏览器在执行JavaScript代码时,不能同时做其它事情,
      即每次出现都会让页面等待脚本的解析和执行(不论JavaScript是内嵌的还是外链的),JavaScript代码执行完成后,
      才继续渲染页面。这个也就是JavaScript的阻塞特性。
      因为这个阻塞的特点,建议把JavaScript代码放到标签以前,这样既能有效的防止JavaScript的阻塞,又能使得页面的HTML结构能更快的释放。
   2、减少重绘和回流
       3、合理使用Viewport 等meta头部
       4、减少对DOM的操作
     原理:对DOM操作的代价是高昂的,这在网页应用中的通常是一个性能瓶颈
        在《高性能JavaScript》中这么比喻:“把DOM看成一个岛屿,把JavaScript(ECMAScript)看成另一个岛屿,两者之间以一座收费桥连接”。
        所以每次访问DOM都会教一个过桥费,而访问的次数越多,交的费用也就越多。所以一般建议尽量减少过桥次数。
        减少对DOM元素的查询和修改,查询时可将其赋值给局部变量。
        注:在IE中:hover会降低响应速度
四)数据传输类型
使用JSON格式来进行数据交换
    基本原理:

    JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript原生格式,
这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包。
    与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小,所以在Facebook等知名网站中都采用了JSON作为数据交换方式。
JS操作JSON:
    在JSON中,有两种结构: 对象和数组。
    一个对象以 “ { ” 开始,“ } ” 结束。每个“名称”后跟一个 “ : ” ;“名称/值 对”之间使用 “ , ”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用引号括起来,
数值型则不需要。如:
    var obj={"name":"darren","age":24,"location":"beijing"}
    数组是值(value)的有序集合。一个数组以 “ [ ” 开始, “ ] ” 结束。值之间使用 “ , ” (逗号)分隔。如:
    var jsonlist=[{"name":"darren","age":24,"location":"beijing"},{"name":"weidong.nie","age":24,"location":"hunan"}];

    对这种数组和对象字面量的操作是非常方便且高效的。如果预先知道JSON结构的情况下,使用JSON进行数据传递简直是太美妙了,
可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。
五)脚本执行阶段
  1、缓存节点,尽量减少节点的查找
  2、减少节点的操作(innerHTML)
  3、避免无谓的循环,break、continue、return的适当使用
  4、事件委托(请看  三) 下面的 4)
      原理:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。(简单来说就是委托给父元素来做)

转载于:https://www.cnblogs.com/eye-color/p/6893462.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink并行度优先级_集群操作常用指令_运行组件_任务提交流程_数据流图变化过程

Flink并行度优先级(从高到低) sum(1).setParallelism(1) env.setParallelism(1) ApacheFlinkDashboard任务添加并行度配置 flink-conf.yaml并行度配置 注: 处理输入输出时, 并行度默认为 1Flink集群常用指令 提交任务 run: 代表执行; c: 指定入口类; p: 并行度; host, post:…

招银网络笔试java_最新!!招银网络科技Java面经,整理附答案

作者:榨汁机2号 链接:https://www.nowcoder.com/discuss/1640193月12号现场面试的, 感觉好像所有人有3面的样子。到目前也没有消息,有消息的吱一声,让我早点死了这个心…..一面 1 Java的八大基本类型byte、short、int、…

CSS常用的元素居中方法

参考:CSS: 常用的元素居中方法 CSS居中布局总结 1.水平居中 (1)文本水平居中 text-align: center; (2)块级元素水平居中 ①设置margin margin: auto; ②display:inline-blocktext-align:center .parent {width: 400px;…

FlinkAPI_Environment_输入源_算子转化流程

Flink Environment getExecutionEnvironment() 根据当前平台, 获取对应的执行环境, 若未设置并行度, 使用 flink-conf.yaml 中的并行度配置, 默认 1. StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();createLocalEnviroment() 创建本地…

第2章 Linux内核模块

宏内核和微内核继续前面第一章的知识,虽然有点啰嗦,既然啰嗦了就继续啰嗦下去吧,也是给第一章的内容增加解释。我们知道内核如果按种类来划分的话,可以分为宏内核和微内核,微内核是一个比较先进的内核,我不…

BZOJ 1137 半平面交

半平面交的板子 //By SiriusRen #include <bits/stdc.h> #define double long double using namespace std; const int N100050; const double eps1e-10; int n,m,xx,yy,tot; double Ans; vector<int>vec[N]; struct Point{double x,y;}point[N]; struct Line{Poin…

的注册表怎么才能删干净_油烟净化器怎么清洗才能清理干净呢?

油烟机的净化器的主要功能是过滤厨房里的油烟&#xff0c;因为它总是处理油烟&#xff0c;所以清洗净化器很麻烦&#xff0c;那么如何清洗呢&#xff1f;经常清洗油烟净化器是很有必要的&#xff0c;但清洗起来很麻烦&#xff0c;清洗起来也不容易。今天&#xff0c;我想告诉大…

Flink-Sink_将结果输出到Kafka_Redis_ES_Mysql中

Sink 将计算好结果输出到外部系统, 调用 addSink()传入指定的SinkFunction() 将结果输出到 Kafka 中将结果输出到 Redis 中将结果输出到 ES 中将结果输出到 Mysql 中: 事先创建好表结构 pom.xml 事先导入对应的 connector: <dependencies><dependency><group…

ado 字符串变量

这次变量主要针对 Mfc 的 Cstring 类型的变量&#xff08;前面VC 链接Access 数据库 插入变量到表&#xff09; 思路; 1 把cstring 类型 转为 string 2 string 转 char 数组 3 sprintf 写入数组 string 转 char 数组函数[cpp]view plaincopyprint?char* zhuanhuan(std::strin…

周立功先生和他的AWorks团队招聘

我之前写的一篇文章&#xff0c;介绍了周立功先生&#xff0c;我记得那篇文章的阅读量非常多&#xff0c;也让我迎来一段小高潮&#xff0c;随着时间的推移&#xff0c;慢慢的增加了我对周立功先生的了解&#xff0c;我们很多人&#xff0c;像我吧&#xff0c;工作的时候&#…

mongodb python 大于_Python中使用MongoDB详解

作者&#xff1a;Zarten知乎专栏&#xff1a;Python爬虫深入详解知乎ID&#xff1a; Zarten简介&#xff1a; 互联网一线工作者&#xff0c;尊重原创并欢迎评论留言指出不足之处&#xff0c;也希望多些关注和点赞是给作者最好的鼓励 &#xff01;介绍MongoDB是一种面向文档型的…

这不是商业互吹,是学习的宝藏

学习如逆水行舟&#xff0c;不进则退&#xff1b;只有坚持不断的学习,才能保持进步。今天给大家精心挑选的这几个优质的公众号&#xff0c;在行业深耕已久&#xff0c;相信大家一定会有所收获&#xff0c;感兴趣的可以关注一下。互联网架构师 号主985计算机硕士毕业&#xff…

【Ubuntu】ubuntu系统下python3和python2环境自由切换

shell里执行&#xff1a;sudo update-alternatives --install /usr/bin/python python /usr/local/lib/python2.7 100sudo update-alternatives --install /usr/bin/python python /usr/local/lib/python3.2 150此时你会发现如果要切换到Python2&#xff0c;执行&#xff1a;su…

打印机更换感光鼓单元k_干货,激光打印机常见故障维修方法总结

激光打印机是日常生活和办公中运用较多的打印机类型下面&#xff0c;我们来总结一下激光打印机常见故障维修方法。硒鼓组件常见故障&#xff0c;维修方法。激光打印机硒鼓的常见故障包括硒鼓漏粉&#xff0c;打印出黑横线&#xff0c;打印文件颜色不正常打印的图像及文字变形&a…

关于这些那些

关于篮球先说下&#xff0c;我刚才已经写完文章了&#xff0c;但是因为没有保存&#xff0c;浏览器想着周末早点回去休息就闪退了&#xff0c;把写好的文章给闪退没有了&#xff0c;这个真是拿起自己的坑砸死了自己&#xff0c;那种赶脚只有自己能够明白&#xff0c;真的是太难…

mysqldump 定时备份数据(全量)

MYSQL 数据库备份有很多种(cp、tar、lvm2、mysqldump、xtarbackup)等等&#xff0c;具体使用哪一个还要看你的数据规模。下面给出一个表 #摘自《学会用各种姿态备份Mysql数据库》 备份方法备份速度恢复速度便捷性功能一般用于cp快快一般、灵活性低很弱少量数据备份mysqldump慢慢…

第3章 Linux内核调试手段之内核打印

开始前面说的话在我写代码的生涯里&#xff0c;我看到过很多大神炫耀自己的调试手段&#xff0c;也看到很多大神写过非常厉害的代码&#xff0c;我认为&#xff0c;相比于写代码&#xff0c;调试更加重要&#xff0c;而那些能在写代码的时候就加入了自己的调试信息的&#xff0…

电源管理 解析_智能电源控制箱

智能电源控制箱?智能电源控制箱又被称之为&#xff1a;智能监控箱、智能设备箱、智能运维箱&#xff0c;智能电源控制箱的作用主要就是为视频监控打造良好的运行环境&#xff0c;保障视频监控系统稳定的运行。说到视频监控&#xff0c;大家都知道视频监控的故障率是比较高的&a…

centos7 开机后进去了命令行_Linux系统管理:开机启动流程(二)

CentOS71.BIOS(开机自检)2.MBR ( Master Boot Record 主引导记录)3.GRUB2 Bootloader&#xff08;引导菜单&#xff09;4.Kernel&#xff08;内核引导&#xff09;5.Systemd &#xff08;不再使用init&#xff0c;改成了systemd&#xff09;6.Runlevel-Target &#xff08;运行…

一点小思考

我记得12年的时候&#xff0c;我就申请了微信公众号&#xff0c;那时候我的号主是TCL&#xff0c;是公司的同事用我的微信号申请公司的主体号&#xff0c;那时候我也有一点想法自己做个公众号写点文章&#xff0c;但是一直没有下决心&#xff0c;后来离职了&#xff0c;原来用我…