获得徽章 5
- #每天一个知识点# js语句实际上可以被解析为抽象语法树!
js语句的拆解:
a、借用 recast 可以将js语句进行拆解(在js文件中引入此第三方库,然后调用其parse方法)
obj = recast.parse(source)
js语句的重装:
将语句拆解完毕后,需要将其再次重装recast.types.builders可以作为值作模具
应用:
可以通过操作 AST 抽象语法树修改 JS 代码展开赞过评论1 - #每天一个知识点#
HTTP缓存机制
强缓存策略:直接本地比对,不用请求后台数据
原理:第一次加载后,浏览器缓存了资源,同时设置了过期时间,再次进入页面,浏览器会本地比对过期时间。过期后,会再次请求;没有过期就一直使用!!!
协商缓存:
针对一些复杂情况,不能直接设定过期时间,因此在http请求中会设置 no-cache 和 no-store,这种情况会忽略本地缓存(并非不使用缓存)此时浏览器会去请求服务器验证资源是否更新?如果更新则使用更新资源,否则使用本地缓存!展开赞过评论1 - #每天一个知识点# 关于canvas的认识:
a、canvas是一个HTML元素,其中的图形不会单独创建DOM元素。因此不能通过js操纵canvas内单独的图形
不能对具体图形进行监控
b、canvas是基于像素的即时模式图形系统,绘制完对象后不保存对象到内存种,当再次需要该对象时,需要重新绘制
svg是基于形状的保留模式图形系统,绘制完对象后会将其保存在内存中。当绘制完毕后,需要修改时,直接修改展开评论点赞 - #每天一个知识点# 通过交换机连接的计算机能够通信,是因为计算机的 ip 在同一网段。一开始计算机A 通过 arp 协议去广播消息,交换机接收到后,再把消息广播出去,计算机 B 收到后,再将自己的 mac 地址携带过去。后续两台计算机就可以直接通信了评论点赞
- #每天一个知识点# Vue3 中使用 ... 延展运算符展开 reactive 生成的响应式数据后,新的对象只获取了响应式数据的 key 和 value,并不具备响应式。
解决办法:使用封装的 toRefs 函数,将响应式对象返回(读取新对象值时,读取的是响应式数据的值)2点赞 - #每天一个知识点# 在使用 Vuex 时,我们声明 state 变量,当项目逐渐变得复杂,那么 state 中的变量开始越来越多,可使用如下方法管理:
a、vuex 允许将状态进行模块划分,模块之间是可以包含自己的状态、action、mutation和getters
b、模块之间还可以嵌套展开评论点赞 - #每天一个知识点# JSON.parse(JSON.stringfy(xxx)),不能深复制函数!原因是:
JSON.stringfy在序列化时,会自动忽略函数和值为undefined的属性!评论点赞 - #每天一个知识点# JS 事件之间的干涉:click与mouseup和mousedpwn,click与dbclick。
click、dbclick、mouseup、mousedown四个事件触发的顺序:
mousedown > mouseup > click > mousedown > mouseup > click > dbclick展开赞过评论2 - #每天一个知识点# 预加载是一种声明式 fetch,可以不阻塞 浏览器加载 document 的 onload 事件下加载资源
preload 用法:<link> 为标签, ref="preload" 为预加载属性配置评论点赞 - #每天一个知识点# 在HTTP的请求头中,refer是一个较为常见的字段,其中包含着访问来源的信息。referer字段实际上告诉了服务器,用户在访问当前资源之前的位置,常常用来进行 用户追踪
示例:当掘金使用了微博的图片时,由于掘金开启了防盗链,referer会自动识别是否是自家网站
不是自家网站的图片无法正常显示!展开评论点赞