All Posts

  • Published on
    HTTP缓存,当浏览器访问一个网站时,会把页面上的图片,css 数据下载到本地,当用户下次再访问这个页面时,浏览器就可以直接读取本地副本,避免重复加载。主要分为强缓存和协商缓存,可以用来减少网络请求,提高用户体验。 怎么做到的? 1. 浏览器发出 GET 请求后,先看下是否存在强缓存? 2. 如果强缓存有效,则直接读取浏览器本地缓存 200 from cache 3. 如果强缓存失效,则考虑协商缓...
  • Published on
    事件循环是浏览器协调任务执行的机制,因为浏览器是单线程的,为了避免耗时任务卡住主线程,所以它把任务分成了 4 类 1. 同步任务:需要立即执行的任务,会阻塞后续代码,直到其完成,可能会阻塞主线程,比如 console.log() 2. 异步任务:不需要立即执行的任务,执行完成后需要通知主线程的,异步任务又分为宏任务和微任务。 3. 宏任务:优先级更低的异步任务,不会阻塞主线程。包括整体 脚本的加...
  • Published on
    在 JavaScript 中,存在一些异步操作,需要等浏览器执行完成之后,再告诉主线程,我们再去做后续的操作 之前为了实现这一点,我们会用回调函数的方式,拿到异步的执行结果,并做后续处理 但如果我们在某一个回调函数中,又依赖其他回调函数带过来的参数,就会存在回调地狱(混乱的嵌套),且难以维护和控制状态,由此 es6 引入了 Promise 的概念。一个 Promise 本身只有三种状态,pendi...
  • Published on
    localStorage:浏览器前端本地缓存,当页面关闭的时候,不会自动清空,可以存 5MB,且共享给其他标签一起使用 sessionStorage:会话级别的浏览器前端本地缓存,当会话关闭的时候(tab 页关闭),自动清空,且不共享给其他标签 cookie:前后端都可以使用的缓存,一般用来存储鉴权信息,或者用于分析用户习惯的相关数据,可以通过多个属性控制它(比如允许使用的接口域名/path 控制...
  • Published on
    什么是节流/防抖?防抖是延迟执行最后一次,节流是固定频率执行 1. 防抖:当用户在某一个时间段内,连续触发时,只在最后实际执行一次。比如我给表单的提交按钮,加了 1s 防抖,则用户如果在 1s 内点了 10 次,我也只在最后触发一次回调事件 2. 节流:当用户在某一个时间段内,连续触发时,限定它的触发频率。比如我给 scroll 监听事件加了 1s 节流,则用户在页面滚动过程中,不管他滚动的多快(...