前端面试题一:HTML

2,062 阅读3分钟

01. src 和 href 的区别

href 是超文本引用,它是指向资源的位置,建立与目标文件的联系;src 目的是把资源下载到页面中;浏览器解析 href 不会阻塞对文档的处理(这就是官方建议使用 link 引入而不是 @ import 的原因),src 会阻塞对文档的处理。

02. script 标签为什么要放在 body 标签的底部(defer、async)

因为浏览器在渲染html的时候是从上到下执行的,当遇到js文件的时候就会停止当前页面的渲染,转而去下载js文件,如果将script标签放在头部,在文件很大的情况下将导致首屏加载时间延长,影响用户体验。解决办法:

  1. 将script标签放在body的底部
  2. 通过defer、async属性将js文件转为异步加载

defer和async的区别:首先都是实现js文件的异步加载,不阻塞页面的渲染;区别就是defer必须等到整个文档渲染完成后才执行,而async在加载完成后,会暂停html的解析,转去执行js。(图示如下)

03. DOCTYPE 标签

DOCTYPE声明于文档最前面,告诉浏览器以何种方式来渲染页面。
HTML5中的声明方式如下:

<!DOCTYPE html>

04.阻止事件冒泡&取消默认行为

  1. 阻止事件冒泡
    • w3c:e.stopPropagation()
    • ie9以下:e.cancelBubble = true
  2. 取消默认行为
    • w3c:e.preventDefault()
    • ie:e.returnValue = false
  3. return false
    • js:取消默认行为
    • jQuery:阻止冒泡 + 取消默认行为
  4. vue方法(修饰符)
    • 阻止事件冒泡:@click.stop
    • 取消默认行为:@click.prevent

05.H5新特性

  1. 新增语义化标签:nav、header、footer、aside、section、article
  2. 音频、视频标签:audio、video
  3. 数据存储:localStoragesessionStorage
  4. canvas(画布)、Geolocation(地理定位)、websocket(通信协议)
  5. input标签新增属性:placeholder、autocomplete、autofocus、required
  6. history API
    • go、forward、back、pushstate
    • 应用:vue编程式导航的灵感来源;vue-router的history模式。

06. 从输入网址(URL)到页面显示的过程?(一次完整的http请求)

从输入网址到页面显示的完整过程(CSDN)

  1. 域名解析,对输入的url进行dns域名解析,得到对应的ip地址
  2. 根据这个ip地址,找到对应的服务器,发起tcp连接(三次握手)
  3. 建立tcp连接后发送http请求
  4. 服务器响应http请求,浏览器得到html代码
  5. 浏览器解析html代码,并请求html代码中的js、css、图片等资源
  6. 浏览器对页面进行渲染并呈现给用户
  7. 断开TCP连接(四次挥手)

07. html页面渲染过程

页面渲染:过程分析(掘金)

总体过程: 页面渲染总体过程

  1. 解析html文件,创建DOM树
  2. 解析css,生成CSSOM(CSS Object Model),即CSS对象模型
  3. dom和css合并,构建渲染树(render tree)
  4. layout 布局(渲染)
    • 依照盒子模型,计算每个节点在屏幕中的尺寸和位置
  5. painting 绘制(渲染)
    • 按照计算出来的规则,通过显卡,将内容画到屏幕上
  6. 重新渲染
    • 重排(即重新layout):当课件节点位置或者尺寸发生变化事会发生重排
    • 重绘(即重新paint):改变某个元素的背景色、文字颜色等不影响它周围或内部布局的属性时,屏幕的一部分需要重画,但是元素的尺寸没有改变
    • 特点:重绘不一定导致重排;重排一定会导致重绘,因为重绘是浏览器渲染页面的最后一步