当前位置: 首页 > news >正文

Vue3应用执行流程详解

精确化的完整执行流程 (以 Vite + Vue3 SPA 为例)

整个过程可以分为两部分:首次访问的“冷启动”后续的Vue应用接管

第一部分:首次访问与页面加载
  1. 客户端:发送请求

    • 用户打开浏览器,输入 URL(如 http://localhost:5173)。

    • 浏览器向该地址的服务器(这里是 Vite 开发服务器)发送一个对根路径 / 的 GET 请求。

  2. 服务端 (Vite Dev Server):接收并处理请求

    • Vite 开发服务器接收到请求。它发现请求的是 /,于是它会返回预先配置好的 index.html 文件。

    • 关键点:这个 index.html 文件不是直接执行的,而是由服务器读取后作为响应体返回给浏览器

  3. 客户端:接收响应,开始解析 HTML

    • 浏览器接收到服务器返回的 index.html 文件内容。

    • 浏览器开始解析这个 HTML 文档。

  4. 客户端:加载并执行 HTML 中的资源

    • 解析到 <script type="module" src="/src/main.ts"></script> 时,浏览器会向 Vite 开发服务器请求这个模块文件。

    • Vite 服务器收到对 /src/main.ts 的请求,它会做一系列厉害的事情:

      • 编译转换:即时(On-the-fly)将你的 main.ts 以及它导入的 .vue 单文件组件等浏览器无法直接识别的模块,转换成标准的、浏览器可执行的 ES 模块。

      • 返回JS:将转换后的 JavaScript 代码返回给浏览器。

    • 浏览器接收到编译后的 main.ts 代码并开始执行。

  5. 客户端:执行 main.ts,创建 Vue 应用实例

    • main.ts 中的代码开始运行:

      • import { createApp } from 'vue':请求并导入 Vue 的 createApp 方法。

      • import App from './App.vue':请求并导入根组件 App.vue(Vite 会将其编译为一个JavaScript对象)。

      • import './style.css':请求并导入CSS,浏览器会将其注入到页面中。

      • createApp(App).mount('#app')

        • createApp(App):使用根组件 App 的定义,创建 Vue 应用实例

        • .mount('#app')挂载应用。Vue 会找到 index.html 中的 <div id="app"></div> 元素,然后开始编译 App.vue 的模板,生成虚拟DOM,最终将渲染好的内容替换掉这个挂载点。

  6. 客户端:应用启动,渲染页面

    • Vue 应用实例开始运行。它会根据 App.vue 和其子组件的逻辑、数据状态,生成最终的 DOM 结构,并输出到页面上。

    • 用户看到登录页面(或首页)。


第二部分:应用运行与交互 (SPA 的核心)
  1. 客户端:Vue 应用接管后续所有交互

    • 至此,整个 Vue 应用已经完全运行在浏览器中

    • 当用户点击页面上的路由链接(如 <router-link to="/about">)时,浏览器不会再向服务器发送新的页面请求

    • 取而代之的是,客户端的 Vue Router 会拦截这些交互,根据路由配置动态地切换和渲染不同的组件,并仅更新页面中需要变化的部分。

    • 任何数据获取都通过 axios 或 fetch 等 API 向后台服务器发送 Ajax 请求来完成。


另一种模式:服务端渲染 (SSR)

如果你的应用使用了 Nuxt.js 或 vue-ssr 进行了服务端渲染,流程会完全不同,会更接近你最初列表中的想象:

  1. 浏览器请求 URL。

  2. 服务器(Node.js)接收到请求。

  3. 服务器真的执行 Vue 代码,调用 createSSRApp(),将组件渲染成完整的 HTML 字符串。

  4. 服务器将这个已经包含内容的 HTML 字符串直接塞进 index.html 里,然后返回给浏览器。

  5. 浏览器立刻就能看到渲染好的页面(利于SEO和首屏加载)。

  6. 同时,Vue 应用所需的JavaScript(客户端激活脚本)也会加载,然后在浏览器中“接管”这个静态页面,使其变成一个动态的 SPA。

总结

步骤SPA (Vite 开发模式)SPA (构建后)SSR (如 Nuxt.js)
1. 请求处理Vite 开发服务器返回空的 index.htmlNginx 返回空的 index.htmlNode.js 服务器执行 Vue,渲染出带内容的 HTML
2. 内容渲染浏览器执行 JS,Vue 在客户端渲染浏览器执行 JS,Vue 在客户端渲染服务器渲染好HTML,浏览器直接显示
3. 后续交互客户端路由,无刷新切换组件客户端路由,无刷新切换组件客户端激活后,变为无刷新切换

最关键的是要理解 SPA 的核心是它在浏览器中渲染和运行,服务器只提供初始文件和API接口。


文章转载自:

http://8SGaEMnf.thpns.cn
http://Zsosb2hq.thpns.cn
http://Dlpr4z4X.thpns.cn
http://3BrnxdMF.thpns.cn
http://NQY6LB8k.thpns.cn
http://0uo8jzqk.thpns.cn
http://eqCGTAI2.thpns.cn
http://GrZXbhOY.thpns.cn
http://Bk5qONL0.thpns.cn
http://2bY3O2j6.thpns.cn
http://IpfQ0BP3.thpns.cn
http://F5soEE5J.thpns.cn
http://9WTTocv1.thpns.cn
http://OGagzIfE.thpns.cn
http://MqpQdFvm.thpns.cn
http://njWjP0P1.thpns.cn
http://ThcaPEMJ.thpns.cn
http://TJONRmlV.thpns.cn
http://v2PJym1j.thpns.cn
http://1G8Do1Rq.thpns.cn
http://XENyrOor.thpns.cn
http://nfWZfWm4.thpns.cn
http://jXDZCWMn.thpns.cn
http://QxxJlOWA.thpns.cn
http://ubd9FaIR.thpns.cn
http://QabymuxU.thpns.cn
http://M2PjuSqz.thpns.cn
http://Yz1lePQ9.thpns.cn
http://IZCsXUn7.thpns.cn
http://oIUTNAC6.thpns.cn
http://www.dtcms.com/a/382463.html

相关文章:

  • css 高度从 0 到 auto 的动画效果 `interpolate-size: allow-keywords`
  • 8-获取文件和目录信息
  • SPAR类比推理模型学习(与常见小目标检测方法总结)
  • 提示工程架构师分享:如何用提示词升级职业教育的实操案例教学?(万字长文来袭,高能预警!!!)
  • C++初阶(6)类和对象(下)
  • 软件质量管理(五):ISO 9001质量管理理论到实践
  • O3.4 opencv图形拼接+答题卡识别
  • 硬件(十)IMX6ULL 中断与时钟配置
  • 格式备忘录
  • Anaconda配置环境变量和镜像
  • 健康大数据与传统大数据技术专业有何不同?
  • 《C++ Primer 第五版》this 指针 (下)
  • Python 之 Faker
  • 【问题解决】VMware +Ubuntu20.04创建用户后无法登陆的问题
  • 【底层机制】【C++】std::move 为什么引入?是什么?怎么实现的?怎么正确用?
  • 链动 3+1 模式解析:社交电商裂变的高效破局路径
  • 镀锌板数控矫平机:把“波浪”熨成“镜面”的幕后原理
  • isEmpty 和 isBlank 的区别
  • AAC ADTS格式分析
  • `Object.groupBy`将数组中的数据分到对象中
  • IACheck赋能AI环评报告审核,提升智慧交通项目合规性
  • 腾讯面试题之编辑距离
  • 云服务器使用代理稳定与github通信方法
  • 通过内存去重替换SQL中distinct,优化SQL查询效率
  • 【完整源码+数据集+部署教程】航拍遥感太阳能面板识别图像分割
  • make和Makefile细节补充
  • 从经验主义到贝叶斯理论:如何排查线上问题
  • 机器人路径规划算法大全RRT,APF,DS,RL
  • 9.13AI简报丨哈佛医学院开源AI模型,Genspark推出AI浏览器
  • 04.【Linux系统编程】基础开发工具2(makefile、进度条程序实现、版本控制器Git、调试器gdb/cgdb的使用)