To The West - Web

107 阅读3分钟

Http 1.1 和 Http 2.0 的区别

  1. 多路复用(Multiplexing)
  • HTTP/1.1 使用的单一连接只能一次处理一个请求。虽然可以通过启用多个连接来处理并发请求,但浏览器能同时打开的连接还是受限的。
  • HTTP/2 使用单一的 TCP 连接支持并行多路复用,能同时处理多个请求。这大大减少了建立连接和传输内容的延迟,提高了性能。
  1. 头部压缩(Header Compression)
  • HTTP/1.1 的请求和响应头部信息未经过压缩,头部信息体积较大,增加了整体传输数据量。
  • HTTP/2 使用 HPACK 算法对头部信息进行压缩,减少了带宽消耗和传输延迟。
  1. 服务端推送(Server Push)
  • HTTP/1.1 不支持服务器主动向客户端推送资源。
  • HTTP/2 支持服务器主动向客户端推送资源,可以提前将客户端可能需要的资源发送给客户端,提高页面加载速度。
  1. 请求优先级(Request Prioritization)
  • HTTP/1.1 不具备请求优先级机制,导致关键资源和非关键资源请求得到相同处理。
  • HTTP/2 中客户端可以指定某个请求资源的优先级,服务器会按优先级顺序处理和发送响应,保证了关键资源的及时加载。
  1. 二进制协议(Binary Protocol)
  • HTTP/1.1 使用基于文本的协议,可能导致解析过程变慢和歧义产生。
  • HTTP/2 使用二进制协议,数据包传输更加高效,且不存在解析歧义问题。

请描述一下 web 中的 diff 算法

JavaScript 的 diff 算法在很多场景下有广泛应用,尤其是在 Virtual DOM 的场景下,例如 React.js、Vue.js 等。虚拟 DOM 是一种避免不必要的 UI 重绘的技巧,它使用 diff 算法比较新旧 DOM 树之间的差异,然后应用这些差异来更新 UI。

简要地说,diff 算法的主要任务是比较两棵 DOM 树(或通用树结构),找出它们之间的差异。以下概述虚拟 DOM diff 算法的基本过程(尤其是 React 中的 diff 算法):

  1. 遍历节点:diff 算法通过深度优先遍历(在节点层级上通过递归实现)来比较新旧 DOM 树上的节点。

  2. 节点比较(同级节点):diff 算法只会比较同级节点,不会跨级对比。这样可以减少计算量,提高算法效率。

  3. 节点差异判断

    • 类型不同:当新旧节点类型不同时,判断为“差异节点”。例如,当元素标签名或组件类型不同时。
    • 类型相同但属性不同:当两个同类型节点的属性有差异时,记录差异属性。
    • 类型相同且为文本节点:如果两个文本节点的内容不同,记录差异内容。
  4. 差异列表:根据这些差异创建一个差异列表,用于更新 UI。

  5. 更新 UI:根据差异列表,高效地更新 UI。通过这种方式,可以避免更新整个 UI,只更新有差异的部分。

需要注意的是,各种库和框架在实现 diff 算法时会有所不同,但核心思路仍然是比较树结构上的节点差异并高效地更新 UI。