面试题集—(DOM元素渲染原理)

2019-11-17  本文已影响0人  月半女那

1. 在浏览器内核可以分为渲染引擎,js引擎

2. 在构建DOM的时候解析器遇到JS会暂停构建DOM,直到JS运行完毕才会继续执行DOM构建。

3. 重绘:只改变元素样式,风格,不影响布局

重排:元素的尺寸,位置,布局发生变化
重排一定会引起重绘,但重绘不一定导致重拍

4. 直接操作DOM缓慢的原因:

  - DOM属于渲染引擎中的东西,而JS是JS引擎中的东西,当通过JS操作DOM会涉及两个线程之间的通信。
 - 如果频繁操作DOM相当于一直在进行两线程之间的通信,而且还会导致重绘和重排

5. 在渲染页面的时候会出现 白屏 / 无样式闪烁

浏览器工作的流程:
- 解析HTML生成DOM tree
- 解析CSS 生成 CSS Rule tree
- 将两者结合构建成rendering tree
- 布局和绘制,重绘(repaint)和重排(reflow)

6. 从输入URL到页面展示的详细过程

输入网址 -> DNS解析 -> 建立tcp连接 -> 客户端发送HTTP请求 -> 服务器处理请求 -> 服务器响应请求 -> 浏览器展示HTML -> 浏览器发送请求获取其他资源

参考 : https://blog.csdn.net/lvxin15353715790/article/details/89930313

7. 前端性能优化

  1. 减少HTTP请求次数,大小
  2. css ,js 放到外部文件中,避免使用style javascript标签直接引入
  3. 设置缓存
    cache-control / expires / etag / last-modified
    尝试使用PWA模式:
  4. 使用静态资源分域存放增加下载并行数
<link rel="stylesheet" href="//cdn1.domain.com/path/main.css" >
<script src="//cdn2.domain.com/path/main.js"></script>
  1. 接口缓存数据
  2. 使用一部的js资源
<script src="main.js" defer></script>
<script src="main.js" async></script>

async 加载无序,defer时有序的,都不会阻塞html解析

  1. 避免js /css 文件过长,合理拆分
  2. 图片尽量指定大小,避免图片加载过程中发生大量重排。图片里过大的时候可以使用图片懒加载,图片压缩,如果是小图片,可以合理使用base64内嵌图片,可以根据移动端屏幕尺寸和分辨率,加载不同大小的图片
<picture>
    <source media="(min-width: 320px) and (max-width: 640px)" srcset="img/minpic.png">
    <source media="(min-width: 640px)" srcset="img/middle.png">
    <img src="img/picture.png" alt="this is a picture">
</picture>
  1. 减少DOM元素数量和深度
  2. 尽量减少使用js动画,可以使用css动画代替,由于js直接操作DOM容易引起页面的重排
  3. 不要频繁操作DOM ,可以批量操作
  4. 对需要重复使用的对象,设置变量缓存它,避免重新查找
  5. 尽量使用事件代理,避免直接事件绑定
  6. 避免scroll ,touchmove连续事件处理,可以设置时间节流,用settimeout
    参考 :https://www.jianshu.com/p/d9c20eafa67e

8. PWA渐进式web应用程序

  1. manifest.json
    能够将你浏览的网页添加到你的手机屏幕上,
    在安卓上可以全屏启动不显示地址栏

{
    //被提示安装应用时出现的文本
    "name": "PQJ-PWA",
    //添加至主屏幕后的文本
    "short_name":"PQJ",
    "description": "测试demo",
    //添加之后,启动地址
    "start_url": "/index.html",
    //图标信息
    "icons": {
      "128": "/asset/sw.jpg"
    },
    "developer": {
      "name": "pqj",
      "url": ""
    },
    "display": "standalone",
    "background_color": "#287fc5",
    "theme_color": "#fff",
    "permissions": {
        "desktop-notification": {
          "description": "Needed for creating system notifications."
        }
      }
} 

<link rel="manifest" href="/mainfest.json" />
  1. Push Notification- 推送通知
    Push:服务器端将更新的信息传递给 SW ,Notification: SW 将更新的信息推送给用户。

参考:https://blog.csdn.net/margin_0px/article/details/83000235
https://www.jianshu.com/p/fad8aa9e277f

9. graphql优势

一个用于API的数据查询语言,主要目的在于使用简单描述数据需求和交互的灵活语法和系统

上一篇下一篇

猜你喜欢

热点阅读