mileOfSunshine / blog

2 stars 0 forks source link

查缺补漏 #40

Open mileOfSunshine opened 2 years ago

mileOfSunshine commented 2 years ago

? MVC

? MVVM

? Vue2.x 响应式数据原理

? Vue3.x 与 Vue2.x 响应式原理的区别

? 虚拟 DOM

?v-for 加 key

?Vue.mixin

? nextTick

? 自定义指令

? 函数式组件

? vue-router 常用路由模式

mileOfSunshine commented 2 years ago

? 从输入URL开始建立前端知识体系

  1. 输入 URL
    • 组成:协议、主机、端口、路径、查询参数、锚点
    • HSTS:强制客户端使用 HTTPS 访问页面
  2. 查找(浏览器)缓存 【304过程】
    • 根据请求头 expires & cache-control 是否命中强缓存策略
    • [命中],从缓存获取资源,显示页面
    • [没命中],根据请求头 If-Modified-Since(Last-Modified) & If-None-Match(ETag) 是否命中协商缓存
    • [命中],从缓存获取资源,显示页面(返回304)
    • [没命中],从服务端获取资源
  3. DNS 域名解析
    • 递归查询(浏览器缓存 ⇌ 操作系统 ⇌ 路由器缓存 ⇌ ISP代理)
    • 迭代查询:客户端(根据局部DNS浏览器提供的服务器信息)不断的向这些服务器查询,直到查到位置
    • DNS 负载均衡
    • DNS 预解析:减少页面卡顿
  4. 建立 TCP 连接:三次握手
  5. 发起 HTTP 请求
  6. 服务器响应请求并返回结果
  7. 浏览器渲染:
    • 构建 DOM 树
    • 构建 CSS 规则树
    • 构建 render 树
    • 布局(Layout)
      • 重排/回流:几何、位置
    • 绘制(Painting)
      • 重绘:外观
  8. JS引擎解析过程:
    • 创建 window 对象
    • 加载文件:语法和词法是否合理
    • 预编译: 寻找全局变量声明和全局函数声明
    • 解释执行:变量赋值、函数执行(将函数的环境推入到一个环境的栈中,执行完成后再弹出,控制器交还给之前的环境)
  9. 关闭 TCP 连接
mileOfSunshine commented 2 years ago

? Babel编译过程

mileOfSunshine commented 2 years ago

? 防抖

function debounce(fun, wait) {
  return function() {
    clearTimeout(fun.id)
    fun.id = setTimeout(() => {
      fun.apply(this, arguments)
    }, wait)
  }
}

? 节流

// 时间戳实现
function throttle(fun, wait) {
  let t1 = 0
  return function() {
    let t2 = +new Date()
    if (t2 - t1 >= wait) {
      fun.apply(this, arguments)
      t1 = t2
    }
  }
}
// 定时器实现
function throttle(fun, wait) {
  return function() {
    if(!fun.id) {
      fun.id = setTimeout(() => {
        fun.id = null
        fun.apply(this, arguments)
      }, wait)
    }
  }
}
mileOfSunshine commented 2 years ago

? for...in & for...of

mileOfSunshine commented 2 years ago

? require & import

mileOfSunshine commented 2 years ago

? 【vue】computed & watch

mileOfSunshine commented 2 years ago

? Promise

mileOfSunshine commented 2 years ago

? 模块化

mileOfSunshine commented 2 years ago

? Web Worker

https://juejin.cn/post/7091068088975622175

类型 Worker SharedWorker ServiceWorker
概述 - 共享数据的 Worker 作为 Web 应用程序、浏览器、网络之间的 代理服务
通信方式 postMessage port.postMessage 单向通信,通过addEventListener 监听serviceWorker 的状态
使用场景 适合大量计算的场景 适合跨 tab、iframes之间共享数据 离线缓存消息推送网络代理
兼容性 >= IE 10>= Chrome 4 不支持 IE、Safari、Android、iOS>= Chrome 4 不支持 IE>= Chrome 40
mileOfSunshine commented 2 years ago

webpack

mileOfSunshine commented 2 years ago

?前端工程化

mileOfSunshine commented 1 month ago

forEach是不能阻塞的,所以请求是并发,串行请求可使用: