中级前端工程师面试

你对页面进行性能优化的思路和思想是什么?

https://zhuanlan.zhihu.com/p/25701897

页面生成过程 

网页的生成过程,大致可以分成五步。

  1. HTML代码转化成DOM
  2. CSS代码转换成CSSOM
  3. 结合CSSOM和DOM,生成一棵渲染树(包含每个节点的视觉信息)
  4. 生成布局(layout),即将所有渲染树所有节点进行平面合成
  5. 将布局绘制(paint)在屏幕上

这五步里面,第一步到第三步都非常快,耗时的是第四步和第五步。

"生成布局"(flow)和"绘制"(paint)这两步,合称为"渲染"(render)。

1.HTML代码转化为DOM

https://www.cnblogs.com/xuanhun/p/9499348.html 

动态创建Node的3种方法

  1. innerHTML
  2. DOMParser
  3. DocumentFlagment 

2.CSS代码转化成CSSOM 

 首先,我们先了解CSSOM是什么

CSSOM(CSS Object Model):CSS对象模型

  • CSSOM是一个建立在web页面上的CSS样式映射
  • 浏览器将DOM和CSSOM结合来渲染web页面
  • CSSOM将样式表中的规则映射到页面对应的元素上

Web浏览器使用CSSOM去渲染页面

Web浏览器展示页面的4个步骤:

  1. 检查HTML并构建DOM
  2. 检查CSS并构建CSSOM
  3. Web浏览器将DOM和CSSOM结合,并构建出render tree
  4. 展示Web页面 

window.outerWidth,outerHeight:整个浏览器的大小

window.innerWidth,innerHeight:浏览器页面中可视区的大小,不包括:菜单栏,工具栏,调试器

window.pageXOffset,pageYOffset:页面滚动中水平方向和垂直方向的距离

window.screenX,screenY:浏览器窗口在显示器中的位置,screenX表示水平位置,screenY表示垂直位置

window.screenLeft,screenTop

sreen对象:

screen.width,height显示器的宽度,高度

screen.availWidth,availHeight 显示器可用宽度,高度

screen.colorDepth:显示器的颜色深度

https://www.jianshu.com/p/7c3e2493c7a7

https://blog.csdn.net/lu92649264/article/details/114572451 

3.结合DOM和CSSOM,生成一棵渲染树 

当DOM树和CSSOM树都构建完之后,浏览器根据这两个树构建一棵渲染树 

4.生成布局(layout),即将所有渲染树的所有节点进行平面合成 

 渲染树构建完成以后,浏览器计算所有元素大小和绝对位置 

5.将布局绘制(paint)在屏幕上 

https://blog.csdn.net/qq_41635167/article/details/83932920 

 布局计算完成后,浏览器在页面渲染元素。经过渲染引擎处理后,整个页面就显示出来

6.减少 HTTP 请求(合并 CSS/JS,小于 10k 的图片 base64) 

 为什么?

就是要给服务器减轻压力

尽量减少HTTP请求数里的减少图片请求数量 。

为什么?

我们都知道,一个网站的一个页面可能有很多小图标,例如一些按钮、箭头等等。当加载html文档时,只要遇到有图片的,都会自动建立起HTTP请求下载,然后将图片下载到页面上,这些小图片可能也就是十几K大甚至1K都不到,假如我们的一个页面有一百个小图标,我们在加载页面时,就要发送100个HTTP请求,如果你的网站访问量很大并发量也很高,假如上百万访问量,那发起的请求就是千万级别了,服务器是有一定的压力的,并且一个用户的一个页面要发起那么多请求,是很耗时的。

解决办法:我们优化的方案就是:将这些十几K、几K的小图标合并在一张图片里,然后用CSS的background-imagebackground-position属性来定位要显示的部分。

https://blog.csdn.net/qq_36663951/article/details/78320597

7.减少 DOM 操作(可使用 DocumentFragment) 

https://www.cnblogs.com/lyt0207/p/13998058.html 

8.避免不必要的重绘与重排(重排必定导致重绘) 

https://blog.csdn.net/chenjuan1993/article/details/82020024 

https://www.cnblogs.com/wpshan/p/9268194.html

一个页面由两部分组成:

DOM:描述该页面解构

render:描述节点在页面上如何呈现

当DOM元素的属性发生关系时(如color),浏览器会通知render重新描述相应的元素,此过程称为repaint

如果该次变化涉及元素布局(layout),浏览器则摒弃原有属性,重新计算并把结果传递给 render 以重新描绘页面元素, 此过程称为 reflow。

不管页面发生了重绘还是重排,它们都会影响性能(最可怕的是重排 ,应尽量避免) 

下列情况会发生重排

  • 页面初始渲染
  • 添加/删除可见DOM元素
  • 改变元素位置
  • 改变元素尺寸(宽、高、内外边距、边框等)
  • 改变元素内容(文本或图片等)
  • 改变窗口尺寸

9.优化 CSS 选择器(从右向左匹配) 

https://www.cnblogs.com/zhaodongyu/p/3341080.html

不懂 

10.CSS/JS minify,减少文件体积 

11.开启 Gzip 压缩 

12.将 CSS 放到顶部,JavaScript 放到尾部(JavaScript 会阻塞页面) 

13.压缩图片以及使用 CSS Sprite 

14.使用 CDN 加速,适当进行文件缓存 

15.合理控制 cookie 大小(每次请求都会包含 cookie) 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试官:你好,请自我介绍一下。 应聘者:您好,我是XXX,本科毕业于XXX大学计算机专业,目前有三年前端工作经验,熟悉HTML、CSS、JavaScript等前端技术,能够独立完成Web前端开发项目。 面试官:你最近在学什么方面的技术? 应聘者:最近我在学习Vue.js框架,了解了其基本概念和使用方法,并且写过一些简单的项目来巩固自己的学习成果。 面试官:你有在项目中使用过哪些前端框架和库?请谈谈你对它们的理解和使用经验。 应聘者:我在项目中使用过React、Angular和Bootstrap等框架和库。React和Angular都是比较流行的前端框架,React主要用于构建单页面应用程序,Angular则更适用于构建大型的企业级应用程序。Bootstrap则是一个比较成熟的前端UI库,可以快速构建响应式网站和应用程序。 面试官:在你之前的项目中,你主要负责哪些方面的工作? 应聘者:我之前的项目中,我主要负责前端的开发工作,包括用户界面的设计和编写、前端交互的实现、后端API的调用和数据的展示等方面。同时,我也会与后端开发人员密切合作,以确保前端和后端的数据交换和协调工作正常进行。 面试官:请谈谈你在项目中遇到的最大的挑战以及你如何解决它们的经验。 应聘者:在之前的项目中,我遇到的最大的挑战是在一个需要支持多语言的网站上工作。因为需要支持多个语言,所以需要做到前端代码的国际化和本地化,并且需要与后端进行良好的协调。我通过研究相关的技术和文档,以及与后端开发人员的沟通合作,最终成功地解决了这个挑战。 面试官:你如何确保你的代码具有可维护性和可扩展性? 应聘者:我会尽可能地遵循一些良好的编码规范和最佳实践,比如使用命名规范、代码注释、模块化设计等。我也会尽可能地使用一些比较流行的前端框架和库,以提高代码的重用性和可扩展性。另外,我也会定期地进行代码审查和重构,以确保代码的质量和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值