前端面试题

147 阅读5分钟

vue相关

简述一下vuex

vuex 是一个状态管理工具,主要解决大中型复杂项目的数据共享

state:定义公共数据并在组件中使用,vuex的基本数据,用来存储变量。

getter:在state中的数据基础上,进一步对数据进行加工得到的新数据

mutation:提交更新数据的方法,必须是同步的(异步使用action),修改定义在state中的公共数据。

action:发异步请求,和mutation的功能大致相同,不同之处在于:

Action 可以通过调用 mutation来修改state,而不是直接变更状态

Action 可以包含任意异步操作。

modules:拆分复杂业务,模块化,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,管理更为方便。

使用下面这两种方法存储数据:

dispatch:异步操作,this.$store.dispatch(‘mutations方法名’,值)

commit:同步操作,this.$store.commit(‘mutations方法名’,值)

简述一下vue中的$nextTick

nextTick的核心就是利用了Promise、MutationObserver、setlmmediate、setTimeout的原生JavaScript方法来实现,本质是为了利用JavaScript的这些异步回调任务队列来实现vue框架中自己的异步回调队列。 vue 中的 nextTick 主要用于处理数据动态变化后,DOM 还未及时更新的问题,用 nextTick 就可以获取数据更新后最新 DOM 的变化

关于插槽的理解

插槽分为:匿名插槽、具名插槽、作用域插槽

1. 匿名和具名插槽比较简单就相当于,子组件在调用的时候,标签中间可以传入dom结构.子组件内部.通过slot标签作为dom结构展示的占位符.

2. 如果它上面有name属性.而父组件里面的dom结构通过#名字方式传入,就成了具名插槽.否则都显示在一个slot标签上就是匿名了;

3. 作用域插槽,稍微麻烦一些:它实际上.就是可以在子组件里面给slot传递数据.父组件中.可以通过v-slot#name=”scope”的方式,接收到传递过来的所有的数据.然后进行组装结构.再传递到子组件里面去展示

性能优化

vite和webpack的区别有哪些?为什么vite速度会快一些

在使用的过程中,开发环境中,编译要快很多,即使随着模块的增多,也很快.首先vite底层是用go语言编写的.基于ESmodel方式加载模块.webpack是利用js实现的打包构建,go语言本身在速度上就比js要快;

Webpack是要先分析依赖.全部打包.然再启动开发服务器.就会慢很多. 但是vite开始不会打包.直接启动开发服务器.是浏览器请求的时候.基于ESmodel按需编译对应的模块.当浏览器请求某个模块时,再根据需要对模块内容进行编译,缩短了编译时间,效率就提升。 修改文件热更新时 当改动了一个模块后,仅需让浏览器重新请求该模块即可,不像webpack那样需要把该模块的相关依赖模块全部编译一次.

你在项目中/vite中做过哪些配置/性能优化

比方说里面跨域的配置;配置了proxy代理.有一个target指向了跨域地址,把这个变量根据后端swigger给的接口文档进行配置解决的跨域

(跨域是浏览器出于安全考虑根据同源策略.做出的限制,也就是端口域名协议,都需要一样,这个代理相当于启动了一个代理服务器.我浏览器请求本地的代理服务器,代理服务器转发请求.目标服务器(服务器和服务器之间获取数据,不受到同源策略的限制),获取数据之后,返回给浏览器,这里只能解决开发环境下跨域,生产环境在nginx里面做配置,具体配置忘了,需要现查);

另外你像开启GZIP压缩.安装了一个插件.把js css等进行压缩成GZIP格式.这样在访问的时候,就能够进一步减小资源包的体积,提升传输效率.当然这里需要后端的配合修改nginx配置.

(浏览器请求头里面有个accept-encoding.是告诉服务端.我支持哪种编码格式,服务端在响应头里面返回content-encoding:gzip,告诉浏览器对应编码格式进行解码)

开启CDN缓存,也是引用一个插件,走CDN缓存,减少服务器的带宽和压力

开启图片的压缩.也是用了一个插件,减小图片体积

减少map文件生成

减少console.log输出

使用懒加载在一个比较长的网页或者页面中,如果图片很多,所有的图片都被加载出来,而用户只能看到可视窗口的数据,这样就浪费了性能。

如果使用图片懒加载的方式就可以很好地解决以上的问题。在滚动屏幕之前,可视化区域外的数据不进行加载 ,在滚动屏幕的时候采取进行加载。这样使网页的加载速度更快,减少了服务器的负载。懒加载适用于图片较多,页面列表较长的场景。