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

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)

  • 可以使用服务器端渲染:1. 第一阶段SSR初步渲染DOM第一屏先在服务器端通过JS渲染。这是将大量的通信从客户网络 ->服务器转换成服务器 ->服务器这样可以大幅度缩减通信时间。2. 第二阶段,前端渲染
    主要目的是减少首屏加载的时间
    或者采用骨架屏,在页面还在加载时展示loading

  • FOUC原因:1. 使用import方法导入样式 2. 将样式表放在页面底部3. 有几个样式表放在HTML结构的不同位置 。 如果样式表比html加载要晚,当加载到这个样式的时候页面会停止之前的渲染,等样式表被加载和解析之后次啊会重新渲染页面才会出现断在的闪烁。
    方案: 使用LINK标签,反正该HRAD中

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

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

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

  • DNS:通过主机名最终获得该主机名对应的IP地址的过程叫做域名解析

  • DNS查询的两种方式:递归查询 和 迭代查询

  • TCP三次挥手的目的:为了防止已经失效的连接请求报文突然又传送到服务端,因而产生错误

  • 301/302区别
    301和302都表示重定向,301表示旧地址被永久移除,302表示旧地址资源还在,只是临时的

  • Nginx反向代理

    客户端请求nginx,nginx请求应用服务器,然后将结果返回客户端
    image.png

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应用程序

  • 可靠(即使网络不稳定,也可以瞬间加载并展示)
  • 快速响应,操作平滑流畅
  • 粘性(用户可以添加到桌面上)
    主要有 APP Manifest , Service Worker , Push API , Notification API
    1.service work--离线缓存
    优点:良好的离线体验 / 同期的后台同步 / 消息推送通知 / 拦截和处理网络请求 / 管理资源缓存 /
    前提条件: HTTPS环境下 / 其缓存之际依赖于 Cache API / 依赖于HTML5 fetch API / 依赖于promise
  • 生命周期
    installing(service worker 注册之后,开始安装,触发 install事件回调指定一些静态资源安装) -> installed (安装完成,等待其他service worker 线程关闭)-> activating (如果没有被其他的service worker控制,允许当前的worker完成安装)-> activated (处理activate事件回调,处理fetch ,aync,push事件)-> redundant(被替换,被销毁)
  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的数据查询语言,主要目的在于使用简单描述数据需求和交互的灵活语法和系统

  • api有强类型schema,可以根据schema自动生成api
  • 按需获取:可以决定返回的数据及结构
  • scheam支持拼接,可以整合接口
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容

  • 前端必读:浏览器内部工作原理[https://kb.cnblogs.com/page/129756/] 作者: T...
    我是强强阅读 1,149评论 0 2
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,587评论 0 7
  • 前端性能优化资料整理 页面性能差的直接后果是用户需要等待,而等待,尤其是不确定要多长时间的等待会给用户带来焦虑,为...
    飘零之雪阅读 818评论 2 3
  • 秋风起了,突然意识到2018年没剩下多少天了,我的心中立刻就升起一股焦虑感:2018年就剩下个尾巴了,还能做些什么...
    程子若阅读 258评论 0 0
  • 春生是我在村里最好的伙伴。 我每次回来都会去找他,每次找他,都会在不同的场合找到他,和阿良。 阿良是村里的傻子,十...
    孤独众人阅读 431评论 3 3