cookies & webStorage & indexedDB
cookies
- 由来 - cookie设计的初衷是用于维护HTTP状态
- 原理 - 浏览器首先发送一个无状态请求到服务端- 服务端带上cookie返回- 浏览器后面的请求都会带上cookie(如果客户端或者服务端对cookie没有操作的话)
- 生成机制 - 服务端生成,在Http Response Header 中 Set-Cookie- 客户端生成,通过 document.cookie设置
- 缺陷 - cookie大小限制4k- cookie附在HTTP请求上,如果数据过大,或导致http请求非常大
webStoreage
- loaclStorage - 以域名为维度,浏览器持久化存储方案- 大小5Mb- 同步接口,占用线程的计算- 使用方法: - localStorage.setItem(key,value)- localStorage.getItem(key)
- sessionStorage - 以域名为维度,浏览器基于会话级的存储方案(页面关闭后或者新开一个窗口之前存储的数据就会获取不到)- 大小5Mb- 同步接口,占用线程的计算- 使用方法: - sessionStorage.setItem(key,value) - sessionStorage.getItem(key)
- indexedDB - 以域名为维度,浏览器大量结构化数据存储方案,运行在浏览器的非关系型数据库- 不会小于250Mb,支持二进制存储,理论无上限- 接口异步,支持事务机制(要不成功,要不失败)
数组方法
- every - 遍历数组的每个元素,每个元素都满足指定的条件时返回true,否则返回false
- some - 遇到数组中的满足条件的元素就会返回true(后面的元素不在参与运算),都不满足返回false
- filter - 遍历数组,提取满足条件的元素,返回满足条件元素的数组
- reduce - 遍历数组归并,((pre,cur)=>{return pre+cur}, x),第0次遍历时x赋值给pre。- reduce(归并方法(pre,cur), initValue), pre缓存值,cur当前元素的值- 累加:arr.reduce((pre,cur)=>{return pre + cur}, 0)- 找最大值:arr.reduce((pre,cur)=>{return Math.max(pre,cur)},)- 数组去重:arr.reduce((pre,cur)=>{if(pre.indexOf(cur) === -1) {pre.push(cur)} return pre}, [])- 归类:arr.reduce((preObj,curObj)=>{ const {city} = curObj; if(!preObj[city]){preObj[city]=[]}; preObj[city].push(cur); return preObj; }, {})- 字符串翻转:Array.from(str).reduce((pre,cur)=>{ return
${cur}${pre}
},‘’)
RESTFul - API
- representation state transfer Application Program Interface
- 表示性状态转移接口, API设计规范: - 1. 将一切数据视作资源- 1. 利用 HTTP 请求方式,描述对资源的操作(增、删、改、查)- 1. 通过 HTTP 响应状态码, 描述对资源的操作结果。
- 期望的效果是: - 1. 看url就知道是什么资源- 1. 看 method 知道对资源做了什么操作- 1. 看 Response Code 知道操作是否成功
- Method 规范: - 1. GET 用于读取资源- 1. POST用于创建资源- 1. PUT用于更新资源- 1. Patch 用于局部更新- 1. Delete 用于删除
- 示例: - 普通 API - /api/getUser- /api/createUser- /api/deleteUser- RESTFul API - GET /api/users/:user_id- POST /api/users- DELETE /api/users/:user_id
- 好处: - 有效降低沟通成本- 前后端解耦更彻底- 前端业务更灵活
前端内存泄漏
- 内存的生命周期: - 程序执行都先分配好内存(在js中是隐藏的操作)- 在内存中进行逻辑读/写- 垃圾清除,释放/回收内存(在js中是隐藏的操作)
- 内存泄漏是指在程序中已经不在使用的变量,但垃圾回收机制认为还在使用,导致内存无法释放。
- 场景1:意外定义全局变量,不如通过通过this定义变量时,this指向windows时,会导致变量都在windows对象中,即使组件的生命周期到了,定义的这些变量也有可能不会被回收。
- 场景2:console.log,打印一些变量到控制台,比如对象,那这个对象是释放不了的,因为它需要一直显示在控制台
- 场景3:没有控制好的闭包。比如闭包返回的function赋值给一个全局变量,但没有执行,如果这个全局变量没有置为null,那么这个function对象则一直会被GC认为在使用中
- 场景4:DOM泄漏。比如通过document.createElement创建的元素,再被插入到dom中后,删除对应的的父节点,怎创建的元素不在被使用,但是垃圾回收机制认为这些创建的元素还是在被引用。
标签:
javascript
本文转载自: https://blog.csdn.net/qq_32395155/article/details/136273392
版权归原作者 qq_32395155 所有, 如有侵权,请联系我们删除。
版权归原作者 qq_32395155 所有, 如有侵权,请联系我们删除。