面试高频 —— 与浏览器相关的几道经典难题详解

简介: 在浏览器中输入URL并回车后都发生了什么?(阿里真题)

解题过程:

1. 解析url,去域名系统里匹配IP(域名是真实IP的映射)


  1. 解析url过程(例:https://www.baidu.com): https —— 传输协议, www —— 服务器,baidu.com —— 域名

5.png


2.如果是第二次访问某个网址,会先去浏览缓存里找是否有这个url,找到对应IP

3.浏览器与网站建立链接 (TCP三次握手,期间不携带任何真实数据)

6.png

4.请求数据

5.渲染页面(详细过程如图)

7.png

TCP断开连接(四次挥手)


2. css 加载会造成阻塞吗 ?



如以上图,可知:


CSS加载不会阻塞DOM解析

CSS加载会DOM渲染

CSS会阻塞JS执行


3. 常见的性能优化策略(面向加载)



   a. 减少http请求(精灵图,雪碧图,CSS、js文件的合并,用CSS代替图片)

   b. 缩减文件大小(资源压缩,webpack,GZip压缩,图片压缩)

   c. CDN ( 大图加载,大文件,类库)

   d. http2

   e. SSR服务端渲染(vue),预渲染...

   f. 懒加载,减少首屏加载量

   g. 减少回流,使用定位等,对于操作量比较大的dom,用文档碎片去做(虚拟dom原理)

   h. 缓存(配置cache文件)



4. 图片懒加载实现原理


实现原理:即判断当前图片是否在当前视口中,如果是则加载,当滚动条滚动的时候,加上滚动条的距离,继续判断。


详见代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <style>
    img {
      display: block;
      margin-bottom: 50px;
      width: 400px;
      height: 400px;
    }
  </style>
</head>
<body>
  <img src="./img2/timg.gif" data-src="./img2/time.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time2.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time3.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time4.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time5.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time6.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time7.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time8.jpg" alt="">
  <img src="./img2/timg.gif" data-src="./img2/time9.jpg" alt="">
  <script>
    let num = document.getElementsByTagName('img').length;  // 9
    let img = document.getElementsByTagName('img');
    let n = 0;
    lazyload();
    window.onscroll = lazyload;
    function lazyload(){
        // 可见区域高度
        let seeHeight = document.documentElement.clientHeight; 
        // 滚动条距离顶部的高度 
        let scrollTop = document.documentElement.scrollTop || document.body.scrollTop; 
        for(let i = n; i < num; i++){
          // 是否在当前视口之内
          if(img[i].offsetTop < seeHeight + scrollTop){
            if(img[i].getAttribute("src") == "./img2/timg.gif"){
              // 替换
              img[i].src = img[i].getAttribute("data-src");
            }
            n = i + 1;
          }
        }
    }
  </script>
</body>
</html>



目录
相关文章
|
3月前
|
Web App开发 编解码 前端开发
面试题22:如何测试Web浏览器的兼容性?
面试题22:如何测试Web浏览器的兼容性?
|
4月前
|
存储 算法 前端开发
【面试题】说一下浏览器垃圾回收机制?
【面试题】说一下浏览器垃圾回收机制?
|
8月前
|
前端开发 安全 应用服务中间件
前端经典面试题 | 浏览器跨域
前端经典面试题 | 浏览器跨域
|
4月前
|
缓存 网络协议 前端开发
面试题:浏览器中输入URL返回页面过程?
面试题:浏览器中输入URL返回页面过程?
90 0
|
4月前
|
消息中间件 前端开发 Java
【面试题】前端必修-浏览器的渲染原理
【面试题】前端必修-浏览器的渲染原理
|
9月前
|
JavaScript 前端开发 API
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-fiber能带来浏览器的加速吗
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-fiber能带来浏览器的加速吗
35 0
|
9月前
|
前端开发
热点面试题:浏览器和Node的宏任务和微任务?
热点面试题:浏览器和Node的宏任务和微任务?
|
9月前
|
JavaScript 前端开发
浏览器中的事件循环和Node.js中事件循环的区别(经典面试题)
浏览器中的事件循环和Node.js中事件循环的区别(经典面试题)
508 0
|
9月前
|
Web App开发 网络协议 网络安全
面试:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?
经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?
|
消息中间件 存储 Web App开发
【前端面试知识题】- 2. 浏览器
需要着重指出的是,这是一个渐进的过程。为达到更好的用户体验,渲染引擎会力求尽快将内容显示在屏幕上。它不必等到整个 HTML 文档解析完毕之后,就会开始构建呈现树和设置布局。在不断接收和处理来自网络的其余内容的同时,渲染引擎会将部分内容解析并显示出来。
【前端面试知识题】- 2. 浏览器