VUE面试题(单页应用及其首屏加载速度慢的问题)

目录

一、单页应用

1.概念

2.单页面应用的优缺点

二、多页面应用:

1.概念

2.区别

三、SPA的实现

1.原理

2.方式:

3.Hash与History模式有什么区别

四、首屏加载速度慢如何优化

1.什么是首屏加载?

2.首屏加载慢的原因

3.如何解决问题

五、结束语


一、单页应用

1.概念

SPA 单页面应用也就是(Single-Page Application),他是指只有一个主页面的应用,一开始只需要加载一次 js、css 等相关资源。所有内容都包含在主页面,对每一个功能模块组件化。单页应用跳转,就是切换相关组件,仅仅刷新局部资源,这个就是单页面应用的概念。

2.单页面应用的优缺点

单页应用(SPA)的优点包括良好的用户体验、前后端分离、减轻服务器压力、页面效果炫酷,而缺点则包括不利于搜索引擎优化(SEO)、初次加载时间较长、对浏览器支持要求高、页面复杂度高。

  • 优点‌:

  1. 良好的用户体验‌:SPA可以在不重新加载整个页面的情况下更新页面内容,使用户能够更快地获取所需信息,减少了“白屏”现象,提高了用户体验‌。

  2. 前后端分离‌:SPA将前端和后端有效地分离,使得前端可以专注于页面的渲染和用户交互,而后端则专注于提供API接口,这种模式使得开发更加高效,同时也便于代码的维护和复用‌。

  3. 减轻服务器压力‌:由于SPA只在首次加载时请求所有必要的资源,之后的页面操作都在客户端完成,因此可以大大减轻服务器的压力‌。

  4. 页面效果炫酷‌:通过JavaScript和CSS3等技术,SPA可以实现丰富的页面效果和动画,使得页面更加吸引人‌。

  • 缺点‌:

  1. 不利于SEO‌:由于SPA的内容是通过JavaScript动态生成的,搜索引擎可能无法正确地抓取和索引页面内容,从而影响SEO效果‌12。

  2. 初次加载时间长‌:SPA需要在首次加载时下载所有必要的资源,因此首屏加载可能会比较慢,特别是在网络速度较慢的情况下‌12。

  3. 对浏览器支持要求高‌:SPA需要使用JavaScript、AJAX等较为先进的前端技术,因此可能需要一些较新版本的浏览器才能正常运行‌3。

  4. 页面复杂度高‌:由于SPA的页面操作都在客户端完成,需要处理更多的逻辑和状态,可能会增加页面的复杂度‌3。

二、多页面应用:

1.概念

MPA 多页面应用也就是(MultiPage Application),它是指有多个独立页面的应用,每个页面必须重复加载 js、css 等相关资源。多页应用跳转,需要整页资源刷新。

2.区别

三、SPA的实现

实现SPA(单页应用)的原理及方式主要基于前端路由和动态内容加载。SPA在初始加载时只加载一个HTML页面,后续页面内容的更新和切换通过JavaScript动态完成,无需重新加载整个页面。


1.原理


前端路由:SPA使用前端路由来监听URL的变化,并根据不同的URL加载相应的内容或组件,实现页面的“跳转”而不刷新页面。
动态内容加载:通过AJAX、Fetch API等技术从服务器异步获取数据,并使用JavaScript动态更新页面内容,实现页面的局部刷新。


2.方式:


使用前端框架:如React、Vue、Angular等,这些框架提供了丰富的工具和功能,如路由管理、状态管理、组件化等,支持SPA的开发。
前端路由实现:主要有Hash模式和History模式两种。Hash模式通过URL的Hash值变化来模拟页面跳转;History模式则利用HTML5 History API来实现URL的变化,更加符合用户的浏览习惯。
通过这些原理和方式,SPA能够提供流畅的用户体验,减少页面加载时间,并提高应用的响应速度。

3.Hash与History模式有什么区别

Vue-Router 有两种模式:hash 模式和 history 模式。默认的路由模式是 hash 模式。

  • hash 模式

        简介: hash 模式是开发中默认的模式,它的URL携带着一个#,它的 hash 值就是#及以后的内容。特点:hash 值会出现在 URL 里面,但是不会出现在HTTP 请求中,对后端完全没有影响。所以改变 hash 值,不会重新加载页面。这种模式的浏览器支持度很好,低版本的 IE 浏览器也支持这种模式。hash路由被称为是前端路由,已经成为 SPA(单页面应用)的标配。原理: hash 模式的主要原理就是 onhashchange()事件:使用 onhashchange()事件的好处就是,在页面的hash 值发生变化时,无需向后端发起请求,window 就可以监听事件的改变,并按规则加载相应的代码。除此之外,hash 值变化对应的URL 都会被浏览器记录下来,这样浏览器就能实现页面的前进和后退。虽然是没有请求后端服务器,但是页面的 hash 值和对应的URL 关联起来了。

  • history 模式

        简介: history 模式的 URL 中没有#,它使用的是传统的路由分发模式,即用户在输入一个 URL 时,服务器会接收这个请求,并解析这个URL,然后做出相应的逻辑处理。
特 点 : 当 使 用 history 模 式 时,URL 就像这样:http://abc.com/user/id。相比 hash 模式更加好看。但是,history模式需要后台配置支持。如果后台没有正确配置,访问时会返回404。API: history api 可以分为两大部分,切换历史状态和修改历史状态:
修 改 历 史 状 态 : 包 括 了 HTML5 History Interface 中新增的pushState() 和 replaceState() 方法,这两个方法应用于浏览器的历史记录栈,提供了对历史记录进行修改的功能。只是当他们进行修改时,虽然修改了 url,但浏览器不会立即向后端发送请求。如果要做到改变 url 但又不刷新页面的效果,就需要前端用上这两个API。切换历史状态: 包括 forward()、back()、go()三个方法,对应浏览器的前进,后退,跳转操作。
虽然 history 模式没有携带#。但是,它也有自己的缺点,就是在刷新页面的时候,如果没有相应的路由或资源,就会刷出404来。如果想要切换到 history 模式,就要进行配置(后端也要进行配置):

  • 两种模式对比

        调用 history.pushState() 相比于直接修改hash,更有优势:pushState() 设置的新 URL 可以是与当前URL 同源的任意URL;而hash 只可修改 # 后面的部分,因此只能设置与当前URL 同文档的URL;
pushState() 设置的新 URL 可以与当前URL 一模一样,这样也会把记录添加到栈中;而 hash 设置的新值必须与原来不一样才会触发动作将记录添加到栈中;
pushState() 通过 stateObject 参数可以添加任意类型的数据到记录中;而 hash 只可添加短字符串;
pushState() 可额外设置 title 属性供后续使用。hash 模式下,仅 hash 符号之前的 url 会被包含在请求中,后端如果没有做到对路由的全覆盖,也不会返回404 错误;history 模式下,前端的 url 必须和实际向后端发起请求的url 一致,如果没有对用的路由处理,将返回 404 错误。
hash 模式和 history 模式都有各自的优势和缺陷,所以根据实际情况选择性的使用。

以上讲解了SPA的概念,单页应用与多页应用的区别,单页应用的优缺点还有他的原理及实现。那么使用单页应用会有一个首屏加载速度慢的问题,接下来讲一下如何处理此问题。

四、首屏加载速度慢如何优化

1.什么是首屏加载?

首屏加载时间(First Contentful Paint),就是指的是当用户输入完网址地址,到首屏内容渲染完成的时间。

2.首屏加载慢的原因

首屏加载慢的原因主要包括资源和渲染两方面。

1)资源方面:

  • 网络延时问题。
  • 资源文件体积过大。
  • 资源重复发送请求加载。
  • 加载脚本时,渲染内容堵塞。

2)渲染方面:

  • HTML代码、JavaScript和CSS的加载与执行顺序不当。
  • 页面重绘、重排频繁。
  • 动画处理不当,导致渲染性能下降。

3.如何解决问题

常见的几种SPA首屏优化方式

  • 减小入口文件积
  • 静态资源本地缓存
  • UI框架按需加载
  • 图片资源的压缩
  • 组件重复打包
  • 开启GZip压缩
  • 使用SSR (SSR也指服务端渲染,即服务端直接渲染出HTML字符串模板,浏览器可以直接解析该字符串模板显示页面,首屏内容不再依赖Javascript的渲染•)

五、结束语

        讲到这里今天的面试题内容就结束了,大家一起加油呀!!都看到这里了还不赶紧点赞加关注,三连呦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145903.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

滑动窗口(8)_最小覆盖字串

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 滑动窗口(8)_最小覆盖字串 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题…

【C++指南】inline内联函数详解

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 C为什么引入了inline来替代C语言中的宏 inline的基本用法 定义inline函数 inline的优势与…

Why is OpenAI image generation Api returning 400 bad request in Unity?

题意:为什么 OpenAI 图像生成 API 在 Unity 中返回 400 Bad Request 错误? 问题背景: Im testing out dynamically generating images using OpenAI API in Unity. Amusingly, I actually generated most of this code from chatGPT. 我正在…

选择优质代理IP建议分享

“在互联网的广阔世界中,代理IP作为一种重要的网络工具,扮演着连接用户与目标服务器之间的桥梁角色。不同类型的代理IP适用于不同的场景和需求,因此选择合适的代理IP类型对于提高网络访问效率、保护用户隐私至关重要。” 一、代理IP类型概述 …

感谢老美苦苦相逼,逼出华为鸿蒙PC

文|琥珀食酒社 作者 | 随风 哎,告诉大家一个不好的消息 刚刚余总说 Windows PC是最后一批了 因为美国新一轮制裁又来了 但大家别急 再告诉大家一个好消息 那就是我们的鸿蒙PC要来了 今天不是华为三折叠手机和iPhone 16首发吗 估计老美是前端时间…

MySQL高阶1873-计算特殊奖金

目录 题目 准备数据 分析数据 总结 题目 编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 M 开头,那么他的奖金是他工资的 100% ,否则奖金为 0 。 返回的结果按照 employee_id 排序。 准备数据 Crea…

Java设计模式——简单工厂模式(完整详解,附有代码+案例)

文章目录 5.2简单工厂模式5.2.1 概述5.2.2 结构5.2.3 实现5.2.4 优缺点5.2.5 扩展—静态工厂 5.2简单工厂模式 5.2.1 概述 简单工厂不是一种设计模式,反而比较像是一种编程习惯。 不属于GOF的23种经典设计模式 5.2.2 结构 简单工厂包含下角色: 抽象…

ISSTA 2024现场精彩:“杰出论文奖”超半数属于中国学者

ISSTA会议是软件工程领域中最具影响力的国际会议之一,也是中国计算机学会(CCF)推荐的A类会议。 第33届ISSTA会议已于奥地利维也纳圆满结束,这场盛会已经吸引了众多来自学术界和工业界的软件测试专家、研究人员和工程师&#xff0c…

doris数据库的坑:第二弹

上一篇文章《doris数据库操作数字遇到的问题》是第一弹,文章结尾提到过doris不支持with语句,其实是因为我自己没找到正确使用的方式导致的。昨天因为客户现场有一个解析SQL的接口提示异常,所以就开始了长路漫漫的排查之旅。不过首先承认及纠正…

英飞凌 PSoC6 RT-Thread 评估板硬件概览

PSoC™ 62 with CAPSENSE™ evaluation kit 开发板(以下简称 PSoC 6 RTT 开发板)是英飞凌(Infineon)联合 RT-Thread 发布一款面向物联网开发者的 32 位双核 MCU 开发套件,其默认内置 RT-Thread 物联网操作系统。本文主…

vue 入门一

参考&#xff1a;丁丁的哔哩哔哩 1.使用vue 1.1 使用CDN的方式使用Vue mount和<div id"counter">关联起来 1.2 vue中的createApp import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app&qu…

C#基础(15)选择排序

前言 上一节中我们已经学习了第一个算法&#xff1a;冒泡算法&#xff0c;相信你也有足够的自信继续学习更多的算法。 今天我们就来讲解又一个排序相关的算法&#xff1a;选择排序。 时间复杂度 在进行今天的排序算法讲解之前&#xff0c;我们先补充一个知识点&#xff1a…

单链表(c语言简单实现)

单链表是一种常见的数据结构 一、结构特点 1. 由一系列节点组成&#xff0c;每个节点包含数据域和指向下一个节点的指针域。 2. 最后一个节点的指针域为 null&#xff0c;表示链表的结尾。 二、主要操作 1. 插入节点&#xff1a;可以在链表的头部、尾部或特定位置插入新节点。…

Docker安装rabbitmq并配置延迟队列

下载rabbitmq镜像 docker pull rabbitmq:management 运行rabbitmq镜像 docker run -id --namerabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 -e RABBITMQ_DEFAULT_USERtom -e RABBITMQ_DEFAULT_PASStom rabbitmq:management …

windows环境下MySQL启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘

文章目录 问题解决方法 问题 今天在windows环境下配置MySQL主从同步&#xff0c;在修改my.ini文件后发现MySQL启动失败了 打开my.ini检查参数发现没有问题 [mysqld] #开启二进制日志&#xff0c;记录了所有更改数据库数据的SQL语句 log‐bin mysql‐bin #设置服务id&#x…

电子束光刻过程中的场拼接精度

以下内容如有错误&#xff0c;请不吝指教&#xff0c;感谢&#xff01; 1、EBL为什么会出现场拼接误差&#xff0c;如何解决&#xff1f; ChatGPT 说&#xff1a; 在电子束光刻&#xff08;EBL&#xff09;过程中&#xff0c;SOI&#xff08;硅绝缘体&#xff09;芯片上出现*…

操作系统 | 学习笔记 | | 王道 | 5.2 设备独立软件

5.2 设备独立性软件 IO核心子系统 磁盘IO也属于IO调度问题 5.2.1 与设备无关的软件 与设备无关的软件是I/O系统的最高层软件&#xff0c;它的下层是设备驱动程序。 设备保护&#xff1a; 操作系统需要实现文件保护功能&#xff0c;不同的用户对各个文件有不同的访问权限&am…

2024.9.20 作业

写一个shell脚本&#xff0c;将以下内容放到脚本中&#xff1a; a.在家目录下创建目录文件&#xff0c;dir b.dir下创建dir1和dir2 c.把当前目录下的所有文件拷贝到dir1中&#xff0c; d.把当前目录下的所有脚本文件拷贝到dir2中 e.把dir2打包并压缩为dir2.tar.xz f.再把…

VSCode开发ros程序无法智能提示的解决方法(一)

VSCode开发ros程序无法智能提示的解决方法&#xff08;一&#xff09; 问题解决 问题 在Ubuntu下使用vscode开发ros程序&#xff0c;无法进行智能提示。 解决 将 intelli Sense Engine 设置为 Tag Parser 即可。

SpringBoot实现OAuth客户端

背景 5 月份的时候&#xff0c;我实践并整理了一篇博客&#xff1a;SpringBoot搭建OAuth2&#xff0c;该博客完成之后&#xff0c;本以为能对OAuth2的认证机制更加清晰&#xff0c;但我却觉得自己更“迷惘”了。 抛开我在项目中积累的浅薄经验不谈&#xff0c;单从在网…