Skip to main content

html

DOCTYPE 有什么用 √✨

DOCTYPE 是一种文档声明类型

它主要作用是告诉浏览器的解析器,应该以什么样的渲染模式来解析文档,不同的渲染模式会影响浏览器对 CSS 代码甚至 JavaScript 脚本的解析。它必须声明在文档的第一行。

标准模式和怪异模式 √✨

浏览器渲染页面的两种模式:标准模式和怪异模式。

  • 标准模式:以浏览器支持的最高标准运行,W3C 标准的盒模型
  • 怪异模式:兼容旧版浏览器的标准运行,IE 盒模型

如何提供包含多种语言内容的页面 √✨

分为 2 种方式实现

第一种是客户端:客户端将不同语言写成不同 html,或者写成不同 JSON,在同一 html 通过变量拿取对应语言的 JSON 数据

第二种是服务端,服务端将不同语言写成 JSON,客户端发起请求时,带上 Aceept-language 请求头,然后服务端拿到对应的 JSON 返回与之匹配的 HTML 文档,HTML 标签中声明了 lang 属性

cookie、sessionStorage、localStorage 的区别 √✨

  • cookie 由客户端或服务端初始化,手动设置过期时间,会在 HTTP 请求中发送给服务器,容量 4kb
  • localStorage 由客户端初始化,永不过期,容量 5mb
  • sessionStorage 由客户端初始化,当前页面关闭时,容量 5bm

<script>、<script async>、<script defer>的区别 √✨

  • script:HTML 解析中断,脚本被提取并立即执行。
  • script async:脚本的提取、执行的过程与 HTML 解析过程并行。
  • script defer:脚本的提取与 HTML 解析过程并行,脚本的执行在 HTML 解析完毕后进行。

为什么最好把 CSS 的<link>标签放在<head></head>之间?为什么最好把 JS 的<script>标签恰好放在</body>之前,有例外情况吗?

<link>标签放在<head></head>之间是规范要求的内容。此外,这种做法可以让页面逐步呈现,提高了用户体验。

脚本在下载和执行期间会阻止 HTML 解析。把<script>标签放在底部,保证 HTML 首先完成解析,将页面尽早呈现给用户。

HTML 语义化 √✨

  • 增加代码可读性
  • 让搜索引擎更容易读懂,有利于爬虫读取更多的有效信息,爬虫依赖于标签来确定上下文和各个关键字的权重
  • 在没有 CSS 样式下,页面也能呈现出很好的内容结构,代码结构

HTML5 新增元素 √✨

  • 语义化标签:header,footer,nav,aside,section 等

  • 增强表单,为 input 增加了 color,emial,data ,range 等类型

  • 在存储方面,提供了 sessionStorage,localStorage,和离线存储

  • 多媒体方面新增了音频 audio 和视频 video 标签、画布 canvas 标签,另外还有地理定位,拖放 api

  • 多线程编程方面,新增了 web worker 和 websocket 协议。

BOM √✨

BOM 是浏览器对象,为了控制浏览器的行为而出现的接口

BOM 的常用属性:

  • window:表示的是浏览器的实例。它在 JS 中则代表全局对象
  • location:提供了当前窗口中加载的文档信息,以及一些导航功能。
  • history:表示当前窗口的历史导航记录
  • navigator:主要用来获取浏览器的版本、名称等信息。
  • screen:获取外部的显示器的信息,比如宽高

web worker √✨

Web Worker 可以使脚本运行在新的线程中,它们独立于主线程,可以进行大量的计算活动,而不会影响主线程的 UI 渲染。

当计算结束之后,它们可以把结果发送给主线程,用户体验更好更流畅。

浏览器渲染机制 √✨

  • 浏览器采用流式布局模型
  • 把 HTML 解析成 DOM,把 CSS 解析成 CSSOM,DOM 和 CSSOM 合并产生渲染树
  • 有了渲染树,我们就知道了所有节点的样式,然后计算他们在页面上的大小和位置,最后把节点绘制到页面上

重排重绘 √

https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/24 https://juejin.cn/post/6844903569087266823#heading-2

  • 重绘

    • 当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility 等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。
  • 回流

    • 当渲染树中元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。
    • 一个元素的回流可能会导致了其所有子元素以及 DOM 中紧随其后的节点及其所有子元素的回流

会导致回流的操作

  • 页面首次渲染
  • 浏览器窗口大小发生改变
  • 元素尺寸或位置发生改变
  • 元素内容变化(文字数量或图片大小等等)
  • 元素字体大小变化
  • 添加或者删除可见的 DOM 元素
  • 激活 CSS 伪类(例如::hover)
  • 查询某些属性或调用某些方法

减少重绘回流

  • css

    • 使用 visibility 替换 display: none
    • 避免使用 table 布局
    • 尽可能在 DOM 树的最末端改变 class
    • 避免设置多层内联样式
    • 对具有复杂动画的元素使用绝对定位
    • 避免使用 CSS 表达式
  • js

    • 避免频繁操作样式
    • 避免频繁操作 DOM
    • 避免频繁读取会引发回流/重绘的属性