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

Vue 3 30天精进之旅:Day 25 - PWA支持

一、引言

在前面的24天中,我们已经深入探讨了Vue 3的许多核心概念和高级特性。今天,我们将进入一个全新的领域——PWA(Progressive Web App)。PWA是一种现代Web应用程序的开发模式,它结合了Web和原生应用的优点,能够提供更流畅的用户体验。在Vue 3中,我们可以轻松地为我们的应用添加PWA支持。本文将带你一步步实现这一目标。

二、什么是PWA?

PWA(Progressive Web App,渐进式Web应用)是一种通过现代Web技术构建的应用程序,它结合了Web和原生应用的优点,能够提供更流畅、更接近原生应用的用户体验。PWA的核心目标是通过一系列技术手段,让Web应用具备以下特性:

1. 可离线访问

PWA通过Service Worker技术实现了离线访问功能。Service Worker是一种运行在浏览器后台的脚本,它可以拦截网络请求,并将资源缓存到本地。当用户在没有网络连接的情况下访问应用时,Service Worker可以从缓存中提供资源,确保应用仍然可用。

2. 快速加载

PWA利用缓存机制和资源预加载技术,能够显著提升应用的加载速度。通过缓存关键资源(如HTML、CSS、JavaScript文件),PWA可以在用户再次访问时快速加载页面,减少等待时间,提供流畅的用户体验。

3. 可安装

PWA支持添加到主屏幕的功能。用户可以将PWA像原生应用一样安装到设备的主屏幕上,并通过图标直接启动。这种体验让PWA更加接近原生应用,同时也减少了用户对应用商店的依赖。

4. 响应式设计

PWA采用响应式设计,能够适应不同的设备和屏幕尺寸。无论是桌面、平板还是手机,PWA都能提供一致的用户体验。

5. 安全性

PWA必须运行在HTTPS协议下,以确保数据传输的安全性。HTTPS不仅保护用户数据,还能防止恶意攻击。

6. 推送通知

PWA支持推送通知功能,能够像原生应用一样向用户发送通知。这种功能可以提升用户参与度,增加应用的粘性。

7. 跨平台

PWA基于Web技术开发,因此可以在任何支持现代浏览器的平台上运行,包括Windows、macOS、Android和iOS。这种跨平台特性大大降低了开发和维护成本。


三、在Vue 3中添加PWA支持

在Vue 3中,我们可以通过@vue/cli-plugin-pwa插件轻松地为应用添加PWA支持。以下是详细的实现步骤:

1. 安装PWA插件

首先,确保你的项目是基于Vue CLI创建的。如果还没有安装Vue CLI,可以通过以下命令安装:

npm install -g @vue/cli

然后,在项目根目录下运行以下命令,添加PWA插件:

vue add pwa

这个命令会自动安装@vue/cli-plugin-pwa插件,并在项目中生成相关的配置文件。

2. 配置PWA

安装完成后,你会在项目根目录下看到一个vue.config.js文件。这个文件中包含了PWA的配置选项。以下是一个常见的配置示例:

module.exports = {pwa: {name: 'My PWA App', // 应用名称themeColor: '#4DBA87', // 主题颜色msTileColor: '#000000', // Windows磁贴颜色appleMobileWebAppCapable: 'yes', // 是否启用iOS全屏模式appleMobileWebAppStatusBarStyle: 'black', // iOS状态栏样式manifestOptions: {background_color: '#ffffff', // 背景颜色icons: [{src: './img/icons/icon-192x192.png', // 图标路径sizes: '192x192',type: 'image/png'},{src: './img/icons/icon-512x512.png',sizes: '512x512',type: 'image/png'}]},workboxPluginMode: 'GenerateSW', // 使用GenerateSW模式生成Service WorkerworkboxOptions: {skipWaiting: true, // 跳过等待,立即激活新Service WorkerclientsClaim: true, // 控制所有客户端runtimeCaching: [{urlPattern: /^https:\/\/api\.example\.com\/.*/, // 缓存API请求handler: 'NetworkFirst',options: {cacheName: 'api-cache',expiration: {maxEntries: 50,maxAgeSeconds: 60 * 60 * 24 // 缓存1天}}}]}}
}

在这个配置中,我们定义了应用的名称、主题颜色、图标等。workboxPluginModeworkboxOptions用于配置Service Worker的行为。

3. 生成Service Worker

Service Worker是PWA的核心技术之一,它负责缓存资源并处理网络请求。在Vue 3中,我们可以通过workbox-webpack-plugin自动生成Service Worker。

vue.config.js中,我们已经配置了workboxPluginModeGenerateSW,这意味着Vue CLI会自动为我们生成Service Worker。你可以在src目录下找到一个registerServiceWorker.js文件,这个文件用于注册Service Worker。registerServiceWorker.js文件的内容如下:

import { register } from 'register-service-worker'if (process.env.NODE_ENV === 'production') {register(`${process.env.BASE_URL}service-worker.js`, {ready() {console.log('App is being served from cache by a service worker.')},registered() {console.log('Service worker has been registered.')},cached() {console.log('Content has been cached for offline use.')},updatefound() {console.log('New content is downloading.')},updated() {console.log('New content is available; please refresh.')},offline() {console.log('No internet connection found. App is running in offline mode.')},error(error) {console.error('Error during service worker registration:', error)}})
}

这个文件会在生产环境中自动注册Service Worker,并监听Service Worker的生命周期事件,如缓存成功、更新可用等。

4. 自定义Service Worker

如果你需要更复杂的Service Worker逻辑,可以将workboxPluginMode设置为InjectManifest,并在src目录下创建一个自定义的Service Worker文件(例如src/service-worker.js)。然后在vue.config.js中配置workboxOptions,指定自定义Service Worker的路径:

module.exports = {pwa: {workboxPluginMode: 'InjectManifest',workboxOptions: {swSrc: './src/service-worker.js' // 自定义Service Worker文件路径}}
}

在自定义的Service Worker文件中,你可以使用Workbox API实现更高级的缓存策略,例如动态缓存、缓存清理等。

5. 测试PWA功能

完成配置后,我们可以通过以下步骤测试PWA功能:

  1. 构建项目:运行npm run build命令,构建生产环境的应用。
  2. 启动本地服务器:使用serve或其他静态文件服务器,启动一个本地服务器来测试构建后的应用。
    npm install -g serve
    serve -s dist
    
  3. 检查PWA功能
    • 离线访问:在浏览器中打开应用,然后断开网络连接,刷新页面,检查应用是否仍然可以访问。
    • 添加到主屏幕:在移动设备或支持PWA的桌面浏览器中,检查是否可以将应用添加到主屏幕。
    • 缓存资源:打开开发者工具,查看Application选项卡中的Cache Storage,确认资源是否被正确缓存。

6. 部署PWA

当你确认PWA功能正常后,可以将应用部署到生产环境。PWA可以在任何支持HTTPS的服务器上运行。确保你的服务器配置正确,并且所有资源都能够被正确缓存。

7. 优化PWA体验

为了进一步提升PWA的用户体验,你可以考虑以下优化措施:

  • 预加载关键资源:在index.html中使用<link rel="preload">标签预加载关键资源,加快页面加载速度。
  • 使用Web App Manifest:在public/manifest.json中配置应用的图标、主题颜色、启动URL等,确保应用在添加到主屏幕时显示正确的信息。
  • 实现推送通知:使用Push API和Notification API实现推送通知功能,提升用户参与度。

四、PWA在实际项目中的应用场景与最佳实践

PWA不仅仅是一种技术,更是一种提升用户体验和开发效率的解决方案。在实际项目中,PWA可以应用于多种场景,并带来显著的价值。以下是PWA的一些典型应用场景以及最佳实践:

1. 应用场景

(1)电商平台

电商平台通常需要快速加载和流畅的用户体验,以提升转化率。通过PWA,电商平台可以实现以下功能:

  • 离线浏览:用户可以在没有网络连接的情况下浏览商品信息。
  • 快速加载:通过缓存商品图片和页面资源,减少加载时间。
  • 推送通知:向用户发送促销信息或订单状态更新。
(2)新闻和博客

新闻和博客类应用需要频繁更新内容,同时保证用户能够快速访问。PWA可以帮助实现:

  • 离线阅读:用户可以将文章缓存到本地,离线阅读。
  • 即时更新:通过Service Worker的更新机制,确保用户始终看到最新的内容。
  • 添加到主屏幕:用户可以将新闻应用添加到主屏幕,方便随时访问。
(3)社交媒体

社交媒体应用需要实时性和互动性。PWA可以支持:

  • 实时消息推送:通过推送通知功能,及时通知用户新消息或动态。
  • 离线发布:用户可以在离线状态下撰写内容,待网络恢复后自动发布。
  • 快速加载:通过缓存用户数据和媒体资源,提升加载速度。
(4)企业内部应用

企业内部应用(如CRM、ERP系统)通常需要跨平台和离线支持。PWA可以:

  • 跨平台运行:在桌面和移动设备上无缝运行,减少开发成本。
  • 离线操作:员工可以在没有网络连接的情况下继续工作,数据会在网络恢复后同步。

2. 最佳实践

(1)优化缓存策略

PWA的核心是缓存,因此需要根据应用的特点设计合理的缓存策略。以下是一些常见的缓存策略:

  • 缓存优先:对于静态资源(如CSS、JavaScript文件),使用缓存优先策略,确保快速加载。
  • 网络优先:对于动态内容(如API数据),使用网络优先策略,确保用户获取最新数据。
  • 缓存清理:定期清理过期的缓存,避免占用过多存储空间。
(2)使用Web App Manifest

manifest.json文件是PWA的重要组成部分,它定义了应用的元数据。以下是一个典型的manifest.json配置示例:

{"name": "My PWA App","short_name": "PWA","start_url": "/","display": "standalone","background_color": "#ffffff","theme_color": "#4DBA87","icons": [{"src": "/img/icons/icon-192x192.png","sizes": "192x192","type": "image/png"},{"src": "/img/icons/icon-512x512.png","sizes": "512x512","type": "image/png"}]
}
(3)实现推送通知

推送通知是PWA的重要功能之一,可以提升用户参与度。以下是一个简单的推送通知实现示例:

// 请求通知权限
Notification.requestPermission().then(permission => {if (permission === 'granted') {// 显示通知new Notification('Hello!', {body: 'This is a push notification from your PWA.',icon: '/img/icons/icon-192x192.png'});}
});
(4)测试与监控

在开发PWA时,测试和监控是必不可少的环节。以下是一些常用的工具和方法:

  • Lighthouse:使用Google Chrome的Lighthouse工具测试PWA的性能、可访问性和PWA特性。
  • Workbox Debugging:在开发环境中启用Workbox的调试模式,查看缓存和Service Worker的行为。
  • 用户反馈:收集用户对PWA功能的反馈,持续优化体验。
(5)渐进增强

PWA的核心思想是渐进增强,即在不影响基础功能的前提下,逐步添加高级特性。在开发过程中,应确保应用在不支持PWA的浏览器中仍然能够正常运行。

3. 案例分享

(1)Twitter Lite

Twitter Lite是Twitter推出的PWA版本,它显著提升了加载速度和用户体验。通过PWA技术,Twitter Lite实现了以下功能:

  • 快速加载:页面加载时间减少了30%。
  • 离线访问:用户可以在离线状态下浏览已加载的内容。
  • 推送通知:及时通知用户新消息和动态。
(2)Pinterest

Pinterest通过PWA技术提升了用户参与度和转化率。以下是Pinterest PWA的主要改进:

  • 加载速度提升:Pinterest的PWA版本将页面加载时间从23秒减少到5.6秒,显著提升了用户体验。
  • 用户参与度增加:通过推送通知和离线功能,用户活跃度提升了60%。
  • 安装率提高:用户将Pinterest PWA添加到主屏幕的比例提高了50%。
(3)Starbucks

Starbucks的PWA版本为用户提供了流畅的点单体验,即使在没有网络连接的情况下也能使用。以下是Starbucks PWA的关键特性:

  • 离线点单:用户可以在离线状态下浏览菜单并下单,订单会在网络恢复后自动提交。
  • 快速加载:通过缓存资源,PWA版本加载速度比原生应用更快。
  • 跨平台支持:PWA版本可以在任何设备上运行,减少了开发和维护成本。

五、PWA的未来发展趋势

随着Web技术的不断发展,PWA的应用场景和功能也在不断扩展。以下是PWA未来的一些发展趋势:

1. 更强大的离线能力

未来的PWA将支持更复杂的离线功能,例如离线数据库同步、离线支付等。这将进一步缩小PWA与原生应用之间的差距。

2. 与原生API的深度集成

随着Web API的不断丰富,PWA将能够访问更多原生设备功能,例如蓝牙、NFC、AR/VR等。这将使PWA在更多领域发挥重要作用。

3. 跨平台开发的主流选择

PWA的跨平台特性使其成为开发者的首选。未来,更多的企业和开发者将选择PWA作为跨平台开发的主要技术栈。

4. 更智能的缓存策略

通过结合AI和机器学习技术,PWA将能够动态调整缓存策略,根据用户行为和网络条件优化资源加载。

5. 更广泛的应用场景

PWA将在更多领域得到应用,例如教育、医疗、金融等。通过PWA,这些领域可以提供更高效、更便捷的服务。


六、结语

通过今天的学习,我们成功地为Vue 3应用添加了PWA支持。PWA不仅能够提升用户体验,还能够让我们的应用更具竞争力。在未来的开发中,PWA将成为Web应用开发的重要趋势之一。希望本文能够帮助你在Vue 3中轻松实现PWA功能。

在接下来的几天中,我们将继续探索Vue 3的其他高级特性和最佳实践。敬请期待!


相关资源

  • Vue CLI PWA Plugin Documentation
  • Workbox Documentation
  • PWA 官方文档

相关文章:

Vue 3 30天精进之旅:Day 25 - PWA支持

一、引言 在前面的24天中&#xff0c;我们已经深入探讨了Vue 3的许多核心概念和高级特性。今天&#xff0c;我们将进入一个全新的领域——PWA&#xff08;Progressive Web App&#xff09;。PWA是一种现代Web应用程序的开发模式&#xff0c;它结合了Web和原生应用的优点&#…...

机器学习-生命周期

假如一个用户向银行申请贷款&#xff0c;银行该如何对这个用户进行评估?很明显&#xff0c;银行首先需要调查清楚该用户的资金储备情况和信用历史等&#xff0c;然后再决定是否向其放款。 整个机器学习生命周期如下图所示&#xff1a; 1、定义问题 在使用机器学习中的术语表…...

大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例

目录 介绍 mybatis缓存 一级缓存 1.是什么 2.特点 3.场景 mybatis 二级缓存 1.是什么 2.特点 3.配置步骤 注意 一级缓存问题 二级缓存问题 扩展 1.MyBatis集成 Redis 2.直接使用Redis redis 缓存 一、String 字符串 二、Llst 列表 三、Hash 哈希 四、Set…...

如何使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈

使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈&#xff1a;详细分析与实战 在开发 Flutter 应用时&#xff0c;性能问题可能会导致用户体验下降&#xff0c;比如页面卡顿、掉帧、内存泄漏等。为了定位和解决这些问题&#xff0c;Flutter 提供了强大的性能监控工具…...

TS中Any和Unknown有什么区别

在 TypeScript 中&#xff0c;any 和 unknown 都是顶级类型&#xff08;top types&#xff09;&#xff0c;表示可以是任何类型的值。但它们在使用和行为上有显著区别&#xff0c;主要体现在类型安全性和使用方式上。 1. any 类型 特点&#xff1a; any 是 TypeScript 中最宽松…...

【Mpx】-环境搭建项目创建(一)

一.概述 官方文档&#xff1a;https://mpxjs.cn/guide/basic/start.html mpxjs/cli文档: https://github.com/mpx-ecology/mpx-cli 二.脚手架安装&创建项目 2.1项目创建 //脚手架安装 npm i -g mpxjs/cli //创建Mpx项目 mpx create mpx-demo(项目名称) //安装依赖 np…...

PyQt加载UI文件

1.动态加载 import sys from PySide6 import QtCore,QtWidgets from PySide6.QtWidgets import * from PySide6.QtUiTools import QUiLoaderclass readfile(QWidget):def __init__(self):super().__init__()self.uiQUiLoader().load("test.ui",self) self.__c…...

Java面试第二山!《计算机网络》!

在 Java 面试里&#xff0c;计算机网络知识是高频考点&#xff0c;今天就来盘点那些最容易被问到的计算机网络面试题&#xff0c;帮你轻松应对面试&#xff0c;也方便和朋友们一起探讨学习。 一、HTTP 和 HTTPS 的区别 1. 面试题呈现 HTTP 和 HTTPS 有什么区别&#xff1f;在…...

Mysql基础语句

一、 MySQL语句 在熟悉安装及访问 MySQL 数据库以后&#xff0c; 接下来将学习使用 MySQL 数据库的基本操作&#xff0c;这也是在服务器运维工作中不可或缺的知识。 本节中的所有数据库语句均在“MySQL>”操作环境中执行 MySQL 是一套数据库管理系统&#xff0c;在每台 MySQ…...

连接池Java导包

目录 一、Java导包 二、 数据库连接池 1. 概述 2. 常见参数 3. 常见连接池 4. Druid连接池&#xff08;重点&#xff09; 核心功能&#xff1a; 使用方法&#xff1a; 导入依赖 配置连接池&#xff1a; 代码配置&#xff1a; 配置文件&#xff1a; 获取连接&#…...

一些耳朵起茧子的名词解释

1 web应用 1.1 web应用的概念 Web应用&#xff08;Web Application&#xff09; 是一种通过浏览器访问的软件程序&#xff0c;它运行在服务器上&#xff0c;用户通过网络&#xff08;如互联网或内网&#xff09;与它进行交互。与传统网站&#xff08;主要提供静态内容&#x…...

HBuilderX中,VUE生成随机数字,vue调用随机数函数

Vue 中可以使用JavaScript的Math.random() 函数生成随机数&#xff0c;它会返回 0 到 1 之间的浮点数&#xff0c; 如果需要0到1000之前的随机数&#xff0c;可以对生成的随机数乘以1000&#xff0c;再用js的向下取整函数Math.floor() 。 let randNum Math.random(); // 生成…...

C#发送邮件

基础调用类&#xff1a; public class EmailHelper{/// <summary>/// 发件人名称/// </summary>public string MailName { get; set; }/// <summary>/// 收件人/// </summary>public string MailTo { get; set; }/// <summary>/// 密送/// <…...

2025-2-19学习笔记 : this关键字,constructor结构体,class类

1、This关键字 在 JavaScript 中&#xff0c;this 是一个关键字&#xff0c;其指向取决于函数的调用方式。理解 this 的指向对于编写正确的代码至关重要。以下是 this 在不同情况下的指向规则&#xff1a; 1. 全局函数调用 当函数在全局作用域中被调用时&#xff0c;this 指向…...

避坑:过早的文件结束符(EOF):解决“git clone龙蜥OS源码失败”的失败过程

避坑&#xff1a;过早的文件结束符&#xff08;EOF&#xff09;&#xff1a;解决“git clone龙蜥OS源码失败”的失败过程 安装Anolis OS 8.9 下载AnolisOS-8.9-x86_64-dvd.iso并安装。 使用uname -a查看内核版本为5.10.134-18.an8.x86_64。 [rootlocalhost cloud-kernel]# c…...

【Quest开发】全身跟踪

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最终效果&#xff1a;能像meta的操作室沉浸场景一样根据头盔移动来推断用户姿势&#xff0c;实现走路、蹲下、手势匹配等功能 需要借助UnityMovement这个包 GitHub …...

通过BingAPI爬取Bing半个月内壁纸

通过BingAPI爬取Bing半个月内壁纸 一、前言二、爬虫代码三、代码说明 一、前言 爬取Bing搜索网站首页壁纸的方式主要有两种&#xff0c;第一种为间接爬取&#xff0c;即并不直接对Bing网站发起请求&#xff0c;而是对那些收集汇总了Bing壁纸的网站发起请求&#xff0c;爬取图片…...

Linux升级Anacodna并配置jupyterLab

在使用 Anaconda 的过程中&#xff0c;随着项目和需求的发展&#xff0c;可能需要升级 Anaconda 的 Base 环境中的 Python 版本。本文将详细介绍如何安全地进行升级&#xff0c;包括步骤、代码示例与最终流程图。 升级 Python 一、环境准备 在进行任何升级之前&#xff0c;建…...

ctfshow web入门 web11-web24

web11 web12 进来浏览网站&#xff0c;底部有一串数字&#xff0c;根据提示可能有用&#xff0c;访问robots.txt&#xff0c;发现禁止访问/admin/&#xff0c;进去看看发现需要输入用户名和密码&#xff0c;刚想爆破就猜对了&#xff0c;用户名是admin&#xff0c;密码是页面下…...

Windows 环境下配置多个不同版本的 Maven

在实际开发中,不同的项目可能需要使用不同版本的 Maven。例如,老项目可能依赖于 Maven 3.3,而新项目可能需要 Maven 3.8+ 才能正常运行。因此,在 Windows 下配置多个 Maven 版本并能方便地切换是非常必要的 1. 下载并安装多个 Maven 版本 1.1 下载 Maven 访问 Apache Mav…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现&#xff0c;包括选择排序、冒泡排序、插入排序、快速排序和归并排序&#xff0c;以及每种算法的特点和复杂度分析 1. 选择排序&#xff08;Selection Sort&#xff09; 核心思想&#xff1a;每次从未排序部分选择最小元素&#xff0c;与未排…...