跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

前端高频面试题:Vue 开发场景与性能优化

综述由AI生成汇总了前端高频面试题,重点覆盖 Vue 开发场景。内容包括常用辅助库选择、首屏性能优化策略(如懒加载、SSR)、页面状态管理(如 keep-alive 缓存)、Token 存储方案对比、接口 Mock 与 Axios 封装、权限控制实现、组件化开发实践、PC 与移动端兼容性处理(如 IE 兼容、iOS 键盘遮挡)以及 H5 与 APP 的区别。适合初学者至进阶开发者参考。

无尘发布于 2026/4/6更新于 2026/6/750 浏览

1、一般 Vue 开发用什么库来辅助

  • VantUI
  • ElementUI
  • js-cookie
  • socket.io
  • axios
  • ECharts

2、页面刚开始出现一片空白的原因

  1. 网络设置的问题,有可能是 IP、端口等出现问题了。
  2. 网速比较慢导致(加载速度慢)。
  3. 浏览器本身出现问题了。
  4. 网络防火墙的问题,设置安全级别过高。
  5. 病毒导致。
  6. 打包路径不对。

3、Vue 的项目如何做首屏的优化

  • v-if 和 v-show 区分使用场景。
  • computed 和 watch 区分使用场景。
  • v-for 遍历必须为 item 添加 key,且避免同时使用 v-if。
  • 长列表性能优化。
  • 事件的销毁(removeEventListener)。
  • 图片资源懒加载。
  • 精灵图。
  • 路由懒加载。
  • 第三方插件的按需引入。
  • 优化无限列表性能。
  • 服务端渲染 SSR。
  • 代码压缩。

4、在浏览商品时,点击商品详情,然后返回,要求进度条还在之前的位置,怎么做

  1. App.vue 页面中使用 keep-alive 缓存组件。
  2. 在离开商品详情页记录进度条的高度,返回商品详情的重新给进度条进行赋值。

5、localStorage 能实现 token 的存储需求,为啥还要存储在 Vuex 中呢

  1. localStorage 里面存储的类型只能是字符串,如果存储的内容不是字符串,还需要转换,有额外的性能消耗。
  2. localStorage 里面的数据变化不能进行监控,如果有需求是根据 token 的变化进行操作的,那 localStorage 就实现不了。
  3. localStorage 是磁盘操作,Vuex 是内存操作,其实性能比 Vuex 去数据慢的多。

6、项目中后台接口没有写好你怎么做,有几种方式

可以模拟假数据。方式:组件内写死、mock.js、json-serve。

7、cookie 为什么不能存储 token 或存储在 cookie 有什么问题

  1. cookie 每次请求都会携带,比较消耗性能。
  2. 防止 CSRF 攻击,CSRF 主要就是攻击浏览器的 cookie,这样如果存储 token 就容易被劫持到。

8、如果任务分配不合理你会怎么办

看能不能在规定的时间内完成,如果能完成,完成后找老大说明这个问题。如果完成不了,及时找老大协商,不能耽误项目的开发进程。

9、axios 挂到原型上有什么作用

各个组件内,可以直接拿到用 axios,就不需要各个组件进行引入了。

10、怎么知道自己项目所处的环境是什么

  1. 看 ip 和端口地址。
  2. 启动项目方式。

11、cli 用的是那个版本和 src 里面都有哪些文件

  • 版本:Vue 2.6.10, Vuex 3.1.0, Vue-cli 4.4.4, webpack 4.4.0
  • src:
    • api: 接口请求
    • assets: 静态图片
    • components: 公共组件
    • icons: 字体图标
    • router: 路由配置
    • store: Vuex
    • utils: axios 封装
    • views: 页面级路由

12、你封装过组件吗,有什么,说一下怎么封装的

我用 Vue 开发的所有项目,都是采用组件化的思想开发的。一般我在搭建项目的时候,会创建一个 views 目录和一个 components 目录,views 目录中放页面级的组件,components 中放公共组件(如 head(公共头组件),foot(公共底部组件)等)。 例如:

  1. 评论组件里面有很多小的功能点,为了后期维护,就把他提取成了一个单独的组件,然后再文章组件中引入注册,使用就行了。
  2. 头部组件抽离:
    1. 抽离一个 HeaderTop。
    2. 组件内容接受标题或标签。
    <template>
      <slot name="left"></slot>
      <div>{{title}}</div>
      <slot name="right"></slot>
    </template>
    <script>
    export default {
      props: ['title']
    }
    </script>
    
    1. 其他组件引入:components: { HeaderTop }
    2. 组件内使用:
    <HeaderTop title="标题">
      <div slot='left'>左边内容</div>
      <div slot='right'>右边内容</div>
    </HeaderTop>
    

13、怎么做项目的权限控制

项目背景:现有一个后台管理系统,共存在两种类型的人员:1. 超级管理员(称作 admin);2. 普通用户(称作 editor)。每种类型的人看到的操作栏并不一样,可以进行的操作也不尽相同,于是就需要程序处理一下各个权限问题。 具体实现思路:

  1. 在路由 router.js 里面声明权限为 admin 的路由,通过 meta 标签来标示该页面能访问的权限有哪些。如 meta: { role: ['admin', 'super_editor'] } 表示该页面只有 admin 和超级编辑才能有资格进入。
  2. 当用户登录后,获取 user roles,将 roles 和路由表每个页面的需要的权限作比较,调用 router.addRoutes(store.getters.addRouters) 添加用户可访问的路由,生成最终用户可访问的路由表。路由表存在 Vuex 里面。
  3. 使用 Vuex 管理路由表,根据 Vuex 中可访问的路由渲染侧边栏组件(菜单)。

14、axios 是怎么封装的

  1. 在 Utils 中的 request.js 里面,引入 axios,配置基础路径、请求拦截器和响应拦截器,并返回 axios。
  2. 在 api 文件里面,引入 request.js,根据各组件需要,配置各个组件的接口请求文件。

15、PC 端的兼容问题你遇到那些

  1. img 下的留白:解决方案:给 img 设定 display:block。
  2. 如果图片加 a 标签在 IE9-中会有边框:解决方案:给 img 设定 border:none。
  3. rgba 不支持 IE8:解决方案:可以用 opacity。
  4. 标签最低高度设置 min-height 不兼容 ie6/7:解决方案:如果我们要设置一个标签的最小高度 200px,需要进行的设置为:{min-height:200px; height:auto !important; height:200px; overflow:visible;}。
  5. 图片加 a 标签在 IE9 中出现边框:解决方案:img{border: none;}。

16、移动端的兼容问题你遇到那些

  1. 在 iOS 和 Android 中,audio 元素和 video 元素在无法自动播放:应对方案:触屏即播。
    $('html').one('touchstart', function(){ audio.play() })
    
  2. iOS 系统中文输入法输入英文时,字母之间可能会出现一个六分之一空格:可以通过正则去掉:this.value = this.value.replace(/\u2006/g, '');
  3. IOS 移动端 click 事件 300ms 的延迟响应:引入第三方插件 fastclick 可以解决在手机上点击事件的 300ms 延迟。
  4. h5 底部输入框被键盘遮挡问题:h5 页面有个很蛋疼的问题就是,当输入框在最底部,点击软键盘后输入框会被遮挡。可采用如下方式解决:
    1. 定义一个 class: .focusState {position: absolute;}
    2. 利用监听键盘的收起展开事件来添加移除定义的 focusState 样式。
    created(){
      var clientHeight = document.documentElement.clientHeight || document.body.clientHeight;
      window.onresize = function() {
        var nowClientHeight = document.documentElement.clientHeight || document.body.clientHeight;
        if (clientHeight - nowClientHeight > 60 ) {
          // 因为 ios 有自带的底部高度
          // 键盘弹出的事件处理
          document.getElementById("apply").classList.add("focusState");
        } else {
          // 键盘收起的事件处理
          document.getElementById("apply").classList.remove("focusState");
        }
      };
    },
    

17、移动端如何做真机测试

  1. 公司有测试服务器,代码放到测试服务器上,进行手机访问测试。
  2. 自己电脑上搭服务器,保证自己手机和电脑处于同一个局域网,然后用手机进行访问测试。

18、H5 和 app 的区别

  1. H5 是通过链接进行访问,而 APP 是通过应用程序进行访问。
  2. H5 在应用商店里面没有,而 APP 是有的。
  3. H5 不需要审核就可以上线,而 APP 是需要审核的。
  4. H5 的响应速度没有 APP 快。
  5. H5 的开发成本比 APP 低。

目录

  1. 1、一般 Vue 开发用什么库来辅助
  2. 2、页面刚开始出现一片空白的原因
  3. 3、Vue 的项目如何做首屏的优化
  4. 4、在浏览商品时,点击商品详情,然后返回,要求进度条还在之前的位置,怎么做
  5. 5、localStorage 能实现 token 的存储需求,为啥还要存储在 Vuex 中呢
  6. 6、项目中后台接口没有写好你怎么做,有几种方式
  7. 7、cookie 为什么不能存储 token 或存储在 cookie 有什么问题
  8. 8、如果任务分配不合理你会怎么办
  9. 9、axios 挂到原型上有什么作用
  10. 10、怎么知道自己项目所处的环境是什么
  11. 11、cli 用的是那个版本和 src 里面都有哪些文件
  12. 12、你封装过组件吗,有什么,说一下怎么封装的
  13. 13、怎么做项目的权限控制
  14. 14、axios 是怎么封装的
  15. 15、PC 端的兼容问题你遇到那些
  16. 16、移动端的兼容问题你遇到那些
  17. 17、移动端如何做真机测试
  18. 18、H5 和 app 的区别
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 Higress 将 REST API 转换为 MCP Server 工具配置指南
  • 前端团队协作最佳实践指南
  • OpenClaw 本地部署与飞书机器人接入教程
  • Qwen-Image-2512 极速文生图工具特性与使用
  • Coze 工作流与智能体自动化应用解析
  • SpringBoot 整合 Kafka 微服务项目实战详解
  • 开源 AI 网络爬虫 Crawl4AI:智能数据抓取实战
  • OmniSteward:基于 LLM Agent 的智能家居与电脑控制方案
  • 基于 Docker 和 Ollama 部署 DeepSeek 本地大模型
  • Python 爬取财富中国 500 强数据示例
  • Clawbot 接入飞书与阿里云部署指南:打造 24 小时 AI 助理
  • 基于 AKSHARE 的 AI 金融数据爬取与分析实践
  • MySQL 体系架构详解:连接层、Server 层与存储引擎
  • Flutter for OpenHarmony:使用 money2 实现高精度金融计算
  • GitLens 实战指南:VS Code 版本控制可视化入门
  • 利用 AI 智能引导快速上手 Quarkus 微服务开发
  • Spring AI 集成 Chroma VectorStore 技术详解与最佳实践
  • Python 列表与切片操作练习题集
  • C++ 输入输出详解(上)
  • Web IM 聊天信息加密的三种实现方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online