VUE
1. MVVM
M:数据模型层,负责数据的修改以及业务逻辑
V:视图层,将数据模型转化为试图展示出来
VM:监听M的数据变化,控制视图层行为,处理用户交互,简单的说就是同步M和V对象,链接M和V
2. 生命周期
从创建到销毁的整个过程。
从创建开始,初始化数据,编译模板,挂载dom,渲染更新-》渲染销毁等一些列的过程。
作用:
有很多生命周期函数,为了更方便的控制整个vue实例的逻辑
3. vue实现双向绑定的原理
采用数据劫持结合发布者-订阅者模式,通过Object.defineProtoperty()劫持各个属性的getter/setter,在数据发生变化时,发布消息给订阅者,触发相应的监听回调。当把一个普通的ji对象传给Vue实例作为他的data选项时,Vue将被遍历他的属性,用O.dP()创建他的getter/setter属性,但是在内部他们让vue追踪依赖。在属性访问和修改时发生变化。
(vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}}),最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。)
4. VUEX
vuex采用集中式存储管理应用的所有组件状态,实现了多组件数据共享,从而建立一个store的数据管理库,把需要共享的数据放到里面,在需要的地方取出来当作初始数据,也可以在组件内部通过dispatch或者调剂commit的方法来修改原始数据,从而实现数据共享。
vuex内部采用了new Vue 来将Store 内部数据进行[响应式化],所以说vuex是利用vue内部机制的库,与vue高度契合。
5. route和router的区别
route是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。
而router是“路由实例”对象包括了路由的跳转方法,钩子函数等
6. Vue 组件data为什么必须是函数
因为每个组件都是vue实例,组件共享data属性,当data值是一个引用类型时,改变一个会影响其他。
js
1. 进程,线程 -》事件循环机制
进程,线程
进程时系统分配的独立资源,是cpu资源分配的基本单位,进程是一个或多个线程组成
线程是进程的执行流,是cpu调度和分配的基本单位,同一个进程之中,多个线程之间是共享进程的资源的。
浏览器是多线程
GUI线程,js线程,事件触发线程,定时器触发线程,http请求线程。
事件循环
分为同步异步任务,首先同步任务放到主线程中,然后把异步任务执行的结果反倒任务队列中,当主线程为空时,也就是主线程任务执行完毕,然后读取任务队列中任务放到主线程执行。每次主线程执行完毕后都会读取任务队列任务,如此反复执行。
宏任务微任务
第一次事件循环中,JavaScript 引擎会把整个 script 代码当成一个宏任务执行,执行完成之后,再检测本次循环中是否寻在微任务,存在的话就依次从微任务的任务队列中读取执行完所有的微任务,再读取宏任务的任务队列中的任务执行,再执行所有的微任务,如此循环。JS 的执行顺序就是每次事件循环中的宏任务-微任务。
2.输入url
- 输入url,通过dns解析获取真实ip地址
- 客户端打开一个socket与ip,端口建立TCP链接。
- 开始布局,计算渲染树在设备视口内确切大小和位置。
- 接着绘制,把每个节点转化为屏幕上的实际像素。
- 浏览器将各层信息发送给GPU,GPU合成显示在屏幕上面。
3. 闭包
有权访问另一个函数作用域中变量的函数。
特性:
- 函数套函数
- 内部函数可以引用外层的参数和变量
- 参数变量不会被垃圾回收机制回收
看法:
使用闭包主要是为了设计私有的方法和变量。
优点:
- 实现封装和缓存,避免全局变量污染。
缺点:
- 消耗内存(常驻内存),不正当使用会造成内存泄漏。
webpack
1. 对webpack看法
模块化打包工具,管理模块依赖,并编译出模块所需要的静态文件。
管理html,js,css 高效的开发。
对于不同类型的文件有相应的模块加载器。
模块打包器分析模块之间的依赖,生成优化合并后的静态资源。
2. 打包优化
打包体积:
- 按需引入
- 开启代码压缩
- 优化soure-map
- 删除不必要的插件,把开发环境和生产环境区分开发
打包时间
- 采取合适loader,loader过滤不需要的目录
- 个别的loader开启cache 如babel-laoder
- 第三方库采用外部引入方式
- 优化构建时搜索的路径,指明需要构建的目录
- 提取公共代码