正在持续更新中... ,路过的朋友,能够点个赞,关注一下~~~
javascript
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理,更强大。vue
promise有三种状态,等待态、成功态、失败态,当new一个promise实例对象的时候,传递两个对应的方法,onFulfilled,onRejected,并初始化当前的状态,当状态发生改变的时候便会触发对应的方法,成功-onFulfilled,失败-onRejected, 若状态一直没有改变,则一直处于等待状态,即当异步程序处理完了以后再改变状态,完成异步任务。java
在整个过程当中,牵扯到 promise的链式调用,以及异步的暂存(处于等待状态的先存储起来)与调用(状态改变便进行调用)node
参考文档:ios
promise解决异步git
javascript异步解决方案github
答:1,返回一个失败的promse 2,抛出一个错误面试
答:返回一个处于pending(等待)状态的promiseajax
...
eg. [...obj] (须要保证obj是可迭代 )from
, eg. Array.from()slice
方法,eg. [].slice.call(obj)扩展运算符:须要保证obj是可迭代 Array.from不须要保证obj是否可迭代,内部会使它可迭代算法
答:解构赋值 [] {} Map : 里面存储惟一的值 WeakMap Set ES6中的模块化 箭头函数 装饰器 模板字符串 数组中一堆方法 reduce map filter some every..... 对象中一堆方法 Object.key() Object.defindproty Objct.value Objtct.xxxx 类,继承 构造器 原型链 Proxy ---- defindprototy
Symbol ...
v-model:是一个语法糖,本质是 :value
与 @input
<Son2 :value="counter" @input="newValue=>counter = newValue"></Son2>
<Son2 v-model="counter"></Son2>
复制代码
beforeCeate
实例化vue后,走的第一个钩子,此时尚未数据劫持 created
vue实例已经建立完成,数据侦测OK,methods,computed也OK了,el OK
beforeUpdate
data改变了 准备渲染视图 domdiff updated
渲染视图完毕 不要去修改data,可能死循环 beforeDestroy
vm销毁以前调用 destroyed
销毁以后调用
created
vm已建立完成 发起ajax请求mounted
vm已挂载完成 发起ajax请求 操做dombeforeUpdate
再近一步去修改状态 不会从新渲染updated
不能修改数据beforeDestroy
优化操做,清空定时器,解除事件绑定Vue生命周期在真实场景下的业务应用
created:进行ajax请求异步数据的获取、初始化数据
mounted:挂载元素dom节点的获取
nextTick:针对单一事件更新数据后当即操做dom
updated:任何数据的更新,若是要作统一的业务逻辑处理
watch:监听数据变化,并作相应的处理
vue的生命周期
vm.$data
:Vue 实例观察的数据对象 vm.$options
:用于当前 Vue 实例的初始化选项。 vm.$nextTick
: vm.$el
: 获取到真实的dom 获取到的可能不是更新后的 须要在下一下事件环中获取更新后的dom元素 vm.$watch
: 监控一个数据 vm.$set
: 将数据设置成响应式 vm.$delete
: 删除对象的属性。
key的做用
做用:高效的更新虚拟DOM,key是给DOM添加惟一的标识,当元素发生改变的时候,经过domdiff算法,作到更小更新,提升性能。 归纳说:改变的元素进行更新,不改变的不更新
缘由
使用index做为key时,可能存在DOM元素没有发生改变,只是顺序发生了改变,可是此时的key的值就发生了改变,根据domdiff算法,就会更新全部key变化的DOM元素
例如:渲染一个数组,绑定index,做为惟一标识,当数据进行倒序排序时,DOM元素没变,顺序发生了改变,但此时DOM上的key发生了改变,就会从新进行渲染,浪费性能。
computed
:计算属性有缓存,若是计算属性所依赖的数据没有必变,它会去缓存中取methods
:方法是没有缓存,每一次拿数据,都会调用这个方法watch
:监控数据的变化,第1次编译没有触发 须要配合mounted
钩子,或者使用immediate: true
使第一次编译时触发computed
有缓存
method
没有缓存
特别提醒
能使用computed就不要使用watch
queue
避免同一个请求发出屡次,(有动画时,也避免多个动画)cancelToken
切换到下一个页面时,把上一个页面相关的请求给取消(没有完成的)函数防抖(debounce): 在事件被触发n秒后再执行回调,若是在这n秒内又被触发,则从新计时;
典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就从新计时。
函数节流(throttle): 规定在一个单位时间内,只能触发一次函数,若是这个单位时间内触发屡次函数,只有一次生效;
典型的案例就是鼠标不断点击触发,规定在n秒内屡次点击只有一次生效。
答:使用keep-alive,能在组件切换过程当中将状态保留在内存中,防止重复渲染DOM。
答:切换页面的时候,可能上个页面的请求尚未请求完,取消上一次的页面中的请求,提升性能
答:浏览器的 sessionStorage
答:采用分页渲染,如不能分页,使用虚拟列表(长列表),相似cubeui
中的RecycleList
长列表渲染
参考文档
答: 代码角度的优化 ;性能角度的优化;用户体验角度的优化
能够参考具体的优化方案:
答:
vue-router
类,该类中规定必须有一个install
的静态方法vue-router
,并在vue
中使用这个中间件,当使用Vue.use
时,便会自动的调用vue-router
中的install(Vue)
静态方法,并将全部的组件做为参数依次传入。import VueRouter from "./vue-router" Vue.use(VueRouter);
install
静态方法中,使用Vue.mixin()
为每一个组件都混入一个beforeCreate
方法,在beforeCreate
方法中,如果main
根组件,则将main.js
中的参数router
挂载到自身_router上,并将本身挂载到自身的属性_root
上,若不是根组件,则将父组件的_root挂载到自身的_root,(此处相似于递归设置)beforeCreate
中为每一个组件都添加一个 $router
与 $route
的属性,$router
指向自定义vue-router
中的静态方法;$route指向当前存放对的路由里面的属性
vue-router
中设置一个构造器,用于接收new 自定义vue-router
时传递的参数(mede,router
....),转换路由格式,而且处理不一样的路由模式(hash,history),将处理后的当前路由进行保存
,定义全局的router-link组件
,使用属性传值与匿名插槽定义,显示的路由,当点击时进行跳转
,定义全局的router-view组件
,获取当前路由,与路由表,相比对,进行渲染
。vue-router 原理 图示