vscode 如何删除多余的空行(换行)
按下 ctrl + H 键进行正则匹配,然后直接替换
删除多余的空行
1
reg = /^\s*$\n/;
删除首尾空白字符
1
reg = /^\s*|\s*$/;
箭头函数与普通函数的区别
箭头函数:
1 | let fun = () => { |
普通函数:
1 | function fun() { |
箭头函数相当于匿名函数,并且简化了函数定义。
箭头函数有两种格式:一种只包含一个表达式,连{ … }和 return 都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ … }和 return。
new 实现原理
关键字 new 在调用构造函数的时候实际上进行了如下的几个步骤
- 创建一个新的对象
- 将构造函数的作用域赋值给这个新的对象(因此 this 指向了这个新的对象)
- 执行构造函数中的代码(为这个新对象添加属性)
- 返回新对象
模拟 new 的效果
1 | function Person() { |
1 | function objectFactory() { |
JS 树形结构与数组结构相互转换
树形结构数据如下
1 | const tree = [ |
将树形结构转换为有父子关系属性的数组结构
思路一:初始化一个空数组,从 tree 的顶端开始遍历,当前节点有子节点时,一边继续遍历子节点,一边在当前节点上删除子节点,将当前节点 push 到空数组。
1 | function flatten1(tree) { |
Vue 的性能优化
编码阶段
尽量减少 data 中的数据,data 中的数据都会增加 getter 和 setter,会收集对应的 watcherv-if 和 v-for 不能连用
如果需要使用 v-for 给每项元素绑定事件时使用事件代理SPA 页面采用 keep-alive 缓存组件
在更多的情况下,使用 v-if 替代 v-show
key 保证唯一
使用路由懒加载、异步组件
防抖、节流
第三方模块按需导入
长列表滚动到可视区域动态加载
图片懒加载
SEO 优化
- 预渲染
- 服务端渲染 SSR
打包优化
- 压缩代码
- Tree Shaking/Scope Hoisting
- 使用 cdn 加载第三方模块
- 多线程打包 happypack
- splitChunks 抽离公共文件
- sourceMap 优化
用户体验
骨架屏
PWA使用缓存(客户端缓存、服务端缓存)优化、服务端开启 gzip 压缩等。
Vue2.x 和 Vue3.x 渲染器的 diff 算法
虚拟 Dom 以及 key 属性的作用
vue 模板编译的原理
vue hash 路由和 history 路由的区别
hash 模式
hash 模式是一种把前端路由的路径用井号 # 拼接在真实 URL 后面的模式。当井号 # 后面的路径发生变化时,浏览器并不会重新发起请求,而是会触发 hashchange
事件。
示例:新建一个 hash.html 文件,内容为:
1 | <a href="#/a">A 页面</a> |
在上面的例子中,我们利用 a 标签设置了两个路由导航,把 app 当做视图渲染容器,当切换路由的时候触发视图容器的更新,这其实就是大多数前端框架哈希路由的实现原理。