1.http1.0 1.1 2.0区别
http1.0和1.1区别
1.1添加了keep-alive长链接,开启一个链接可以发送多个请求
1.1在缓存方面添加了实体标识etag,1.0只有过期时间
http1.1和2.0区别
2.0是基于二进制的,1.1是基于文本的
2.0实现了多路复用,公交车和打车的区别
2.0对于请求头部进行了压缩
2.vue2和vue3的区别
原理上:
双向绑定的原理不同,v2用的是对象劫持Object.defineProperties,v3使用的是es6的proxy代理
vdiff算法不同,v2采用的是vdom全量比较,将差异的部分更新到页面上,v3会给vdom打上标识,数据变化的时候根据这个标识去比较发生变化的vdom,将差异的部分更新到页面上,没有发生变化的vdom不会进行比较
使用上:
v3使用的是组合式api,v2使用的是选项式api
v3 template里支持多个根节点
v3生命周期将beforeCreate和created合并为setup()
在同一个节点上面v-if和v-for的优先级差异
v3可以监听到数组内部的变化,v2直接通过数组下标改变数组项的时候监听不到变化
3.webpack 1 2 3 4 5的区别
1 -> 2
增加了es6支持
增加了tree-shaking,减小打包后的代码包体积
增加了es6 import和commonJs require的混用
2 -> 3
增加了scope hoisting作用域提升,之前版本将每个依赖都分别封装在一个闭包函数中来独立作用域,这些闭包函数降低了解析速度,w3可以通过配置将有联系的模块放到同一闭包函数中,从而减少闭包函数的数量
增加了webpack-dev-server内置插件
增加了magic comment魔法注释,用来解决代码分隔后import()动态引入的模块命名问题
3 -> 4
增加了mode的配置,可以通过配置mode来设置process.env.node_env
w3配置模块解析规则支持loaders和rules写法,w4删除了loaders写法,只支持rules写法
删除了部分插件,比如commonChunksPlugin,可以使用splitChunks进行代码分割,删除了extrat-text-webpack-plugin,新增了mini-css-extract-plugin,将css从js中抽离,防止js文件太大,加载时间太长
增加了happypack,可以进行多进程loader打包
4 -> 5
压缩代码和缓存配置可以通过配置项进行设置,不需要再通过引入插件来设置
w4只能输出es5的代码,w5可以输出es5,es6的代码
4.webpack性能优化
配置loader搜索文件的范围
使用代码分割,import()动态按需加载
使用tree shaking清除无用的代码
使用插件抽取公用代码
部分库可以通过cdn引入,不打包进最终的代码包
启用代码和图片的压缩
5.CDN的作用和原理
将资源和服务部署到全球各地的服务器上,访问的时候去最近的服务器上面获取,可以提高访问速度
6.webpack loader和plugin区别
loader是加载器,加载资源文件并进行处理
plugin是插件,可以监听到webpack生命周期过程中产生的事件,可以执行更加广泛的任务
7.computed和watch有什么区别
computed依赖的是响应的数据对象,watch可以监听任意一个数据对象
computed依赖的数据没有发生变化会用上一次的缓存结果,watch每次都会执行
computed每次都会执行,watch第一次不执行,需要第一次执行的话需要开启 immediate:true
8.vue组件之间的通信
父子之间:
父传子props,子传父emit一个事件
祖先和后代之间:
provide/inject
兄弟之间:
通过共同的父组件
通过eventBus
通过引入vuex
9.vuex的理解
vuex是vue生态下的状态管理模式
有5个核心概念 state getters mutations actions modules
state存放数据变量
getters相当于state的计算属性
mutations是改变state的方法,只能是同步的
actions是异步的,通过提交mutations的方式改变state
modules可以将vuex划分模块,每个模块都有对应的state getters mutations actions
10.vue路由
前端路由是在单个html中对于多页的一种模拟,是url和页面之间的一种对应
分为hash模式和history模式
hash就是url上#后面的部分,hash的变化不会刷新页面,通onhashchange监听hash变化进行模拟
history通过popstate,replacestate来操作浏览器的历史记录栈,可以任意改变url而不刷新页面,去掉了难看的hash,但是刷新页面的时候会向服务端请求当前url, 假如服务端没有匹配会导致404
11.常用html标签
section div p span form input a img ol ul li table tr th td...
12.日常h5新特性使用
section aside header footer语义化标签,有利于seo搜索
audio video canvas
localStorage和sessionStorage
13.css3常用的新特性
box-sizing
border-radius
text-shadow
box-shadow
background设置size和origion
渐变gradient
过渡transition
动画animation
transform,2D3D变换
14.less和sass的区别
都是预处理器,根据sass或者less的语法写样式,最后转成正常的css,提供了变量和嵌套写法等
sass基于Ruby,需要安装Ruby
sass支持if else条件语句,for循环语句
sass变量使用$,less变量使用@
15.闭包理解
闭包是能够读取其他函数内部变量的函数,可以理解为定义在一个函数内部的函数
闭包可以提供对于封闭作用域内的变量访问,同时闭包内部的数据变量会一直保存在内存中,可以做数据存储使用
16.localStorage sessionStorage cookie区别
需注意大小限制cookie4kb,storage5M左右
17.http和https的区别
https其实是构建在ssl之上的http协议,相比之下有如下的不同
http传输是明文传输,https传输是加密传输
http的页面响应速度比https要高,因为握手次数不一样:http是3次握手,https是http3次+ssl的9次握手一共是12次握手
使用的端口号不一样,http80和https443
18.es6常用的新特性有哪些
let const
模板字符串
解构赋值
箭头函数
promise
async await
es6的模块化
19.promise的优势
回调地狱
假设后续操作依赖多个异步任务的返回结果,promise可以将多个异步任务包裹起来在合适的时机返回结果
20.微信登录过程
涉及小程序 微信服务器 业务服务器
(1)小程序通过wx.login()获取登录凭证code
(2)小程序将登录凭证code和其他参数传递给业务服务端
(3)业务服务端根据code和其他信息换取用户id
(4)将微信用户id和自己的业务id进行绑定,并生成自己的登录凭证sessionId
(5)将sessionId返回给小程序,下次每次请求接口的时候都要带上这个sessionId
21.微信小程序template和组件有什么区别
在一个template.wxml文件里面可以定义多个templale,使用name进行区分,使用的时候用is进行切换
使用template没有json文件和js文件,有利于减小代码包的体积
template中没有js文件,因而点击事件需要在使用的js文件里面定义
使用template的时候需要引入其模板和样式文件,而使用component的时候需要在使用的json文件里面定义组件名称和访问路径
22.bind和capture的区别
事件的传递分为冒泡阶段和捕获阶段:
bind在冒泡阶段获取
capture-bind在捕获阶段获取
catch在冒泡阶段获取但是会阻止向上冒泡
capture-catch在捕获阶段获取,会中断继续向下捕获和冒泡
23.小程序生命周期
页面生命周期 onLoad onShow onReady onHide onUnload
组件生命周期 created attached ready moved detached
组件所在页面生命周期 show hide resize
24.小程序分包
单个分包/主包大小不超过2M,总包大小不超过20M
25.优化相关
优化问题都可以从以下的几个方面进行考虑
减小最终打包的代码的体积:
不要无用的代码,能压缩的压缩,能合并的合并,能抽取公共部分的就抽取出公共部分,可以不打包的就不打包放入CDN
按需加载:
页面访问到的时候再去加载,组件使用到的时候再去加载,图片曝光进入可视区域的时候再去加载
合理利用缓存:
加载页面用到的数据可以提前预先拉取,拉取数据过程中可以添加骨架屏友好提示,拉取的数据可以缓存下来下次先用缓存数据进行渲染,新的数据拿到以后再去热更新
争对具体场景的一些优化:
vue:
可以服务端渲染ssr
webpack:
配置loader搜索文件范围,公共代码提取,删除无用代码tree-shaking
微信小程序:
启用分包,独立分包
注入的时候启用按需注入和用时注入
启用初始渲染缓存
启用数据预先拉取
接口数据用localStorage缓存供下次使用
setData的一些优化