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://www.pswp.cn/web/96624.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 持久化与高可用实践(RDB / AOF / Sentinel / Cluster 全解析)

这篇是我把几套生产环境踩坑与复盘整理成的一份“从 0 到 1 长期可维护”的实践文。目标是&#xff1a;明确策略、给出默认可用的配置模板、把常见坑一次讲透。 适用场景&#xff1a;新项目选型、老项目稳定性加固、从单机迁移到 HA/Cluster、应对数据安全与故障切换要求。目录…

Linux内核的PER_CPU机制

参考书《Linux内核模块开发技术指南》 1.原理 在多核CPU的情况下&#xff0c;为了提高CPU并发执行的效率&#xff0c;对于某些不是必须要在核间进行同步访问的资源&#xff0c;可以为每一个CPU创建一个副本&#xff0c;让每个CPU都访问自身的数据副本&#xff0c;而不是通过加锁…

VSCode 的百度 AI编程插件

VSCode 的百度 AI编程插件主要是 Baidu Comate&#xff08;文心快码&#xff09;&#xff0c;这是一款基于文心大模型的新一代编码辅助工具&#xff0c;旨在提升开发者的编码效率&#xff0c;让写代码变得更简单。以下是关于 Baidu Comate 的详细介绍&#xff1a; 一、功能特点…

阿里云监控使用

阿里云的云监控服务&#xff08;CloudMonitor&#xff09;是一款简单易用、功能强大的监控工具&#xff0c;主要用来帮助用户实时监控阿里云上的各种资源&#xff08;比如服务器、数据库、网络等&#xff09;&#xff0c;并在出现问题时及时发出警报&#xff0c;确保业务稳定运…

嵌入式C语言-关键字typedef

定义和作用 typedef是C/C中的一个关键字&#xff0c;作用是为现有的数据类型&#xff08;int 、char 、flaot等&#xff09;创建新的别名&#xff0c;其目的是为了方便阅读和理解代码。 用法 typedef 原有类型名 新类型名;基本类型创建别名 typedef unsigned char uint8_t; typ…

【混合开发】【大前端++】Vue节点优化Dome之单节点轮播图片播放视频二

动图更精彩 背景 Vue作为大前端开发页面交互&#xff0c;在数字屏&#xff0c;智慧大屏等大屏幕开发过程中&#xff0c;轮播效果作为丰富的展示组件经常作为首选。但也因为这个组件的交互体验很好&#xff0c;于是各种单点组件增加到轮播效果里。经过业务的扩展&#xff0c;人…

前端开发核心技术与工具全解析:从构建工具到实时通信

觉得主包文章可以的,可以点个小爱心哟&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 主页:一位搞嵌入式的 genius-CSDN博客 系列文章专栏: https://blog.csdn.net/m0_73589512/category_13028539.html 前端开发核心技术与工具全解…

GPT 系列论文 gpt3-4 175B参数 + few-shot + 多模态输入 + RLHF + system

GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【论文精读】 GPT-4论文精读 从1750亿参数的文本预言家&#xff0c;到多模态的通用天才&#xff0c;OpenAI用两次震撼世界的发布&#xff0c;重新定义了人工智能的可能性边界。这份笔记将带你深入GPT-3和GPT-4的核心突破&#…

.gitignore文件的作用及用法

目录 ​​.gitignore 文件的作用​​ ​​.gitignore 的基本语法​​ ​​Python 项目的 .gitignore 示例​​ ​​如何使用 .gitignore​​ ​​1. 创建 .gitignore 文件​​ ​​2. 编辑 .gitignore​​ ​​3. 检查 Git 状态​​ ​​常见问题​​ ​​Q1&#xff…

QEMU环境准备

QEMU环境准备 下载 qemu # qemu sudo apt install qemu-system-arm # gdb sudo apt install gdb-multiarchsudo apt-get update sudo apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev \libpixman-1-dev libfdt-dev ninja-build下载并自行编译 qemu(可…

003 cargo使用

cargo是什么 cargo 是 Rust 的构建系统和包管理器。Rust 开发者常用 cargo 来管理 Rust 工程和获取工程所依赖的库。 在上一篇文章中我们已经使用cargo new命令创建了一个名叫hello_rust的项目。也使用cargo run来运行项目。 cargo常用命令 cargo 除了创建工程以外还具备构建&a…

跨省跨国监控难题破解:多层级运维的“中国解法”

在全球化的商业浪潮中&#xff0c;集团型客户的业务布局日益广泛&#xff0c;涉及跨省甚至跨国的多个分支机构和业务节点。这种跨域管理的模式给企业的运维监控带来了前所未有的挑战。多个分支机构和业务节点运维调整首先&#xff0c;不同地区的网络环境差异巨大。从国内不同省…

pandas读取复合列名列头及数据和处理

pandas读取复合列名列头及数据和处理1. 效果图2. 源代码1. 效果图 原始excel&#xff1a; 读取1&#xff0c;2行为复合表头&#xff1a; 读取序号为1003一整行的数据&#xff0c;以及获取序号为1002行及1003行的C列复合表头列的值&#xff1a; 2. 源代码 import pandas …

制作一个简单的vscode插件

当前环境情况 操作系统&#xff1a;Windows 项目类型&#xff1a;VS Code 插件&#xff08;TypeScript 编写&#xff09; Node.js 版本&#xff1a;20.18.1 yarn 版本&#xff1a;1.22.22 npm 版本&#xff1a;10.8.2 npm registry&#xff1a;huawei ------- https://repo.hua…

分布式专题——10.2 ShardingSphere-JDBC分库分表实战与讲解

1 分库分表案例 下面实现一个分库分表案例&#xff0c;将一批课程信息分别拆分到两个库&#xff0c;四个表中&#xff1a; 需提前准备一个 MySQL 数据库&#xff0c;并在其中创建 Course 表。Course 表的建表语句如下&#xff1a; CREATE TABLE course (cid bigint(0) NOT N…

Digital Clock 4,一款免费的个性化桌面数字时钟

Digital Clock 4&#xff0c;一款免费的个性化桌面数字时钟 ** 功能 ** &#xff1a;一款免费的桌面数字时钟工具&#xff0c;支持多种皮肤、透明度调节和字体样式自定义&#xff0c;时钟可自由拖动&#xff0c;支持设置闹钟、定时关机、显示自定义消息等功能&#xff0c;适合想…

学习Python是一个循序渐进的过程,结合系统学习、持续实践和项目驱动,

学习Python是一个循序渐进的过程&#xff0c;结合系统学习、持续实践和项目驱动&#xff0c;你会掌握得更好。下面我为你梳理了一个分阶段的学习路线和实用建议&#xff0c;希望能帮你高效入门并逐步提升。 &#x1f40d; Python学习指南&#xff1a;从入门到精通 &#x1f5…

vcpkg:面向C/C++的跨平台库管理工具软件配置笔记经验教程

1、什么是vcpkg 对于使用过Python进行程序设计的开发者们&#xff0c;大多都会对Python的各种库和依赖&#xff0c;仅仅通过几条简单命令行就完成配置的操作感到惊叹&#xff0c;非常的省事省力。反倒是C/C开发时&#xff0c;要是每个库都要自己下载源码编译或者对环境进行配置…

【Docker】常用帮忙、镜像、容器、其他命令合集(2)

【Docker】常用帮忙、镜像、容器、其他命令合集&#xff08;2&#xff09;博主有话说容器命令新建容器并启动列出所有的运行的容器退出容器docker run -it centos:7.0.1406 /bin/bash指令解析docker exec -it ... bash 、docker run -it ... bash、docker attach [容器] 的exit…

系统编程.9 线程

1.线程概述程序运行起来编程进程&#xff0c;进程由一个个线程构成。eg&#xff1a;没有启动的qq时一个程序&#xff0c;启动后登录qq&#xff0c;qq是一个进程&#xff0c;实际上进程什么都没做&#xff0c;只是提供了需要的资源&#xff0c;打开聊天框可以和别人进行通信&…