一些小点

218 阅读2分钟

后面会补充....

// rem:根据html的font-size  html根据浏览器的默认font-size
// em 根据父容器的font-size
// image 标签src不影响 dom渲染 和 js执行
// visibility hidden 事件不触发丶 不影响被遮挡元素的事件

// link标签 和 @import
- 加载顺序: link标签: 在界面加载的时候就会被加载; @import:界面加载后再加载 
- 脚本控制: js控制DOM时,可以通过插入link标签来改变样式,不能通过@import改变

// 箭头函数是定义时的this指向
// 正则匹配汉字: [\u4e00-\u9fa5]
// for of 其实是语法糖, 实际遍历的是iterator对象
// ctrl + shift + p  performance monitor 调试

// 缓存最佳实践: html做协商缓存(尽量每次都拉取最新的html) 这样引入的 js css 资源就是最新的,也可以命中缓存
// contentHash(只和文件内容相关) css
// chunkHash(根据模块依赖确定hash) 
// hash(项目里有文件更改,整个项目构建的hash值都会更改)html

// 数组 和 链表
常规数组: 数组的元素内容是一种类型的, 如 const arr = [1,2,3,4] 存储空间是连续的
JS数组:  数组元素内容不是同一种类型的,如 const arr = [ 'haha', 1, { a:1 } ] 则存储是一段非连续空间的, 其底层其实是由链表来实现的

链表: 在存储上是无序的, 依靠next指针指向下一个node结点

链表:插入/删除效率较高, 而访问效率较低
数组:访问效率较高,而插入(偏移地址)效率较低

// 工作中经常用的方法(可以提升一些性能)
const map = useMemo(() => {
  const m = {}

  ary.forEach(i => {
    m[i.id] = i
  })

  return m
}, [ary])

// 函数柯里化
const curry = type => (i, index) => i[type]
const names = ary.map(curry('name'))

// 请求的幂等性(多次请求 和 单次请求产生的副作用一致)

// 调度思路 (切割成多个宏任务)

// 对 line-height 的理解
如果一个空div里面打入文字,则此div会有一个高度 这个高度并不是直观的font-size,而是line-height;
浏览器处理行高的方式是把 line-height 和 font-size 的差值分为两半,分别加到文本的顶部和底部;

// 本地存储
cookie session token localStorage sessionStorage

css
filter: blur(1px);
filter: grayscale(100%);

// z-index 与层叠上下文 
子元素的层级是相对于祖先元素而论的;

// 301 302 区别
// 经node测试 302每次都会请求服务器根据返回的 location 重定向(暂时重定向)
// 301 相当于浏览器做了缓存(永久重定向 不经过服务器直接跳转新地址)