前端一些知识点

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中后,删除对应的的父节点,怎创建的元素不在被使用,但是垃圾回收机制认为这些创建的元素还是在被引用。
转载请说明出处内容投诉
CSS教程_站长资源网 » 前端一些知识点

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买