vue底层原理和vue描述
原理:Object.definProperty
vue:优点:虚拟dom,模块化开发,数据驱动,双向响应,浏览器统一兼容。
缺点:由于是js生成的虚拟dom,不利于seo爬虫爬取,首屏加载相对于静态页面慢。
data为什么是函数
因为组件的data会提升,而根实例上的data是对象,会导致一个合并。把data变成函数,以调用的方式来使,避免了覆盖和冲突
什么是虚拟dom
使用js算法动态生成的dom叫虚拟dom
diff算法和key的关系
同层对比,只要发现不一样的节点就会用新的dom替换旧的dom。正是因为diff算出来的虚拟dom没有跟踪标识,当一个循环出来的虚拟dom列表中
任意一个元素被修改,diff算法没办法找到它,只能重新循环渲染一份新的dom。加了key之后,每个dom有了自己唯一的标识,这样修改的时候可以
精准的找到并修改,从而节省了性能。所以,key的值必须唯一,而且不可以用随机数,用时间,不建议用下标。
生命周期
4个阶段8个函数,其最大的问题是自动发起ajax请求问题,如果是在浏览器中运行,则应该在mounted发起,如果是服务端渲染,应该在created发起。
//创建阶段
beforeCreate(){
//骨架屏来占位
//日志上传
},
created(){
//发起ajax请求,【不推荐】因为ajax异步,生命周期同步
//在服务器端渲染的时候,这个函数是最后一个生命周期
//技术胖
},
// 挂载阶段
beforeMount(){
// 可以对一些数据进行格式化
},
mounted(){
// 发起ajax【推荐】前端项目大多数都是运行在浏览器,极少数是服务器渲染
},
// 更新阶段
beforeUpdate(){
// 可以二次对数据进行修改
},
updated(){
// 只能观察到更新的数据
},
// 销毁阶段
beforeDestroy(){
//清除常驻内存的垃圾
//对用户的离开行为进行提示
},
destroyed(){
}
nextTick
保证所有dom全部更新完毕之后才会触发,用于获取dom更新后的获取dom1节点数据