热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端面经前端优化

前端面经前端优化文章目录前端面经前端优化HTTP2Web优化最佳实践DNS与解析如何使用CDN分发缓存策略页面渲染优化避免CSS、JS阻塞CSS阻塞JS的阻塞改变JS阻塞的方式使用




前端面经 前端优化

文章目录


  • 前端面经 前端优化
    • HTTP/2 Web优化最佳实践
      • DNS与解析
        • 如何使用

      • CDN分发

    • 缓存策略
    • 页面渲染优化
      • 避免CSS、JS阻塞
        • CSS阻塞
        • JS的阻塞
        • 改变JS阻塞的方式

      • 使用字体图标iconfont代替图片图标
      • 降低CSS选择器的复杂性
      • 减少重绘和回流
        • 如何避免

      • 图片资源优化

    • Webpack优化




降低请求量:合并资源,减少 HTTP 请求数,minify / gzip 压缩,webP,lazyLoad。

加快请求速度:预解析 DNS,减少域名数,并行加载,CDN 分发。

缓存:HTTP 协议缓存请求,离线缓存 manifest,离线数据缓存 localStorage。

渲染:JS/CSS 优化,加载顺序,服务端渲染,pipeline。


在这里插入图片描述

HTTP/2 Web优化最佳实践


DNS与解析

DNS 预读取是一项使浏览器主动去执行域名解析的功能,其范围包括文档的所有链接,无论是图片的,CSS 的,还是 Javascript 等其他用户能够点击的 URL,减少用户点击链接时的延迟。

作用:作用:根据浏览器定义的规则,提前解析之后可能会用到的域名,使解析结果缓存到系统缓存中,缩短DNS解析时间,来提高网站的访问速度


如何使用


  1. 打开和关闭DNS预解析
    希望在HTTPS页面开启自动解析功能,添加如下标记

    <meta http-equiv&#61;"x-dns-prefetch-control" content&#61;"on">
    也可以通过在服务器端发送 X-DNS-Prefetch-Control 报头

  2. 自动解析
    Chromium会自动解析href属性&#xff08;a标签&#xff09;&#xff0c;该行为与用户浏览网页是并行的。但为了确保安全&#xff0c;HTTPS页面不会自动解析

    Chromium不使用浏览器的网络堆栈&#xff0c;直接使用操作系统的缓存。通过8个异步线程执行预解析&#xff0c;每个线程处理一个队列&#xff0c;来等待域名的响应&#xff0c;最终操作系统会响应一个DNS结果给线程&#xff0c;然后线程丢弃它&#xff0c;等待下一个预解析请求。


  3. 手动添加解析

    <link rel&#61;"dns-prefetch" href&#61;"http://www.google.com">

  4. 在浏览器中设置
    一般来说并不需要去管理预读取&#xff0c;但是可能会有用户希望关闭预读取功能。这时只需要设置 network.dns.disablePrefetch preference 值为 true 就可以了
    默认情况下&#xff0c;通过 HTTPS 加载的页面上内嵌链接的域名并不会执行预加载。在 Firefox 浏览器中&#xff0c;可以通过设置 network.dns.disablePrefetchFromHTTPS 值为 false 来改变这一默认行为。

CDN分发

CDN这个技术其实说起来并不复杂&#xff0c;最初的核心理念&#xff0c;就是将内容缓存在终端用户附近。
内容源不是远么&#xff1f;那么&#xff0c;我们就在靠近用户的地方&#xff0c;建一个缓存服务器&#xff0c;把远端的内容&#xff0c;复制一份&#xff0c;放在这里&#xff0c;不就OK了&#xff1f;请添加图片描述
具体来说&#xff0c;CDN就是采用更多的缓存服务器&#xff08;CDN边缘节点&#xff09;&#xff0c;布放在用户访问相对集中的地区或网络中。当用户访问网站时&#xff0c;利用全局负载技术&#xff0c;将用户的访问指向距离最近的缓存服务器上&#xff0c;由缓存服务器响应用户请求
请添加图片描述
请添加图片描述
从应用的角度来说&#xff0c;一般当我们的脚本与 DOM 元素和其它脚本之间的依赖关系不强时&#xff0c;我们会选用 async&#xff1b;当脚本依赖于 DOM 元素和其它脚本的执行结果时&#xff0c;我们会选用defer


使用字体图标iconfont代替图片图标

字体图标就是将图标制作成一个字体&#xff0c;使用时就跟字体一样&#xff0c;可以设置属性&#xff0c;例如 font-size、color 等等&#xff0c;非常方便。并且字体图标是矢量图&#xff0c;不会失真。还有一个优点是生成的文件特别小


降低CSS选择器的复杂性

浏览器读取选择器&#xff0c;遵循的原则是从选择器的右边到左边&#xff1a;

#block .text p {
color: red;
}

  1. 查找所有 P 元素。
  2. 查找结果 1 中的元素是否有类名为 text 的父元素
  3. 查找结果 2 中的元素是否有 id 为 block 的父元素


总结&#xff1a;


  1. 减少嵌套。后代选择器的开销是最高的&#xff0c;因此我们应该尽量将选择器的深度降到最低&#xff08;最高不要超过三层&#xff09;&#xff0c;尽可能使用类来关联每一个标签元素
  2. 关注可以通过继承实现的属性&#xff0c;避免重复匹配重复定义
  3. 尽量使用高优先级的选择器&#xff0c;例如 ID 和类选择器。
  4. 避免使用通配符&#xff0c;只对需要用到的元素进行选择


减少重绘和回流

重绘&#xff1a;当页面中元素样式的改变并不影响它在文档流中的位置时&#xff08;例如&#xff1a;color、background-color、visibility等&#xff09;&#xff0c;浏览器会将新样式赋予给元素并重新绘制它&#xff0c;这个过程称为重绘

回流&#xff1a;当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时&#xff0c;浏览器重新渲染部分或全部文档的过程称为回流。

回流必将引起重绘&#xff0c;重绘不一定会引起回流&#xff0c;回流比重绘的代价更高


如何避免

CSS&#xff1a;


  • 避免使用table布局
  • 尽可能在DOM树的最末端改变class
  • 避免设置多层内联样式
  • 将动画效果应用到position属性为absolutefixed的元素上
  • 避免使用CSS表达式&#xff08;例如&#xff1a;calc()&#xff09;

JS&#xff1a;


  • 避免频繁操作样式&#xff0c;最好一次性重写style属性&#xff0c;或者将样式列表定义为class并一次性更改class属性。
  • 避免频繁操作DOM&#xff0c;创建一个documentFragment&#xff0c;在它上面应用所有DOM操作&#xff0c;最后再把它添加到文档中。
  • 也可以先为元素设置display: none&#xff0c;操作结束后再把它显示出来。因为在display属性为none的元素上进行的DOM操作不会引发回流和重绘。
  • 避免频繁读取会引发回流/重绘的属性&#xff0c;如果确实需要多次使用&#xff0c;就用一个变量缓存起来。
  • 对具有复杂动画的元素使用绝对定位&#xff0c;使它脱离文档流&#xff0c;否则会引起父元素及后续元素频繁回流

图片资源优化


  1. 使用雪碧图&#xff1a;
    雪碧图的作用就是减少请求数&#xff0c;而且多张图片合在一起后的体积会少于多张图片的体积和&#xff0c;这也是比较通用的图片压缩方案

  2. 降低图片质量&#xff1a;
    压缩方法有两种&#xff0c;一是通过在线网站进行压缩&#xff0c;二是通过 webpack 插件 image-webpack-loader

  3. 图片懒加载
    在页面中&#xff0c;先不给图片设置路径&#xff0c;只有当图片出现在浏览器的可视区域时&#xff0c;才去加载真正的图片&#xff0c;这就时延迟加载。对于图片较多的网站来说&#xff0c;一次性加载全部的图片&#xff0c;会对用户体验造成很大的影响


Webpack优化

参考文章:https://blog.csdn.net/qq_56303170/article/details/126452385







推荐阅读
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了Vue2.5开发去哪儿网App从零基础入门到实战项目相关的知识,希望对你有一定的参考价值。第1章课程介绍本章 ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 写在前面本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和文献引用请见100个问题搞定 ... [详细]
author-avatar
手机用户2502923227
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有