01-SPA单页面的理解,它的优缺点分别是什么?如何实现SPA应用(了解))

news2024/9/16 9:39:27

文章目录

  • 什么是SPA
  • 二、SPA和MPA的区别
  • 实现一个SPA
    • 1.引入库
    • 2.读入数据
  • 总结


在这里插入图片描述

什么是SPA

(single-page application),是一种网络应用程序网站的模型,它通过动态重写当前页面来与用户交互,这种方法避免了页面之间切换打断用户体验,在单页应用中,所有必要的代码(HTML、JavaScript和CSS)都通过单个页面的加载而检索。
一个杯子,早上装的牛奶,中午装的白开水,晚上装的是茶,杯子始终没有改变,而是装的东西在变

在这里插入图片描述

二、SPA和MPA的区别

多页应用在MPA中,每个页面都是一个主页面,都是独立的,当我们在访问另一个页面的时候,都需要重新加载html、css、js文件,公共文件则根据需求按需加载如下图

在这里插入图片描述
单页应用与多页应用的区别
在这里插入图片描述
单页应用优缺点

优点:

  • 具有桌面应用的即时性、网站的可移植性可访问性
  • 用户体验好、快,内容的改变不需要重新加载整个页面
  • 良好的前后端分离,分工更明确

缺点:

-不利于搜索引擎的抓取

  • 首次渲染速度相对较慢

实现一个SPA

原理

  • 监听地址栏中 hash变化驱动界面变化
  • 用 pushsate 记录浏览器的历史,驱动界面发送变化

在这里插入图片描述

实现
hash 模式
核心通过监听url中的hash来进行路由跳转

// 定义Router
class Router{
	constructor(){
		this.routes = {};//存放路由path及callback
		this.currentUrl = '';
		//监听路由change调用相对应的路由回调
window.addEventListener('hashchange',this.refresh,false);
window.addEventListener('load',this.refresh,false);
	}
	route(path,callback){
		this.routes[path] = callback;	
	}
	push(path){
		this.routes[path] && this.routes[path]()
	}
}
//使用 router
window.miniRouter = new Router();
miniRouter.route('/',()=>console.log('page1))
miniRouter.route('/page2',()=>console.log('page2'))

miniRouter.push('/')
miniRouter.push('/page2')

history模式

history 模式核心借用 HTML5 history api,api 提供了丰富的 router 相关属性先了解一个几个相关的api

  • history.pushState 浏览器历史纪录添加记录
  • history.replaceState修改浏览器历史纪录中当前纪录
  • history.popState 当 history 发生变化时触发
class Router{
	constructor(){
		this.routes = {};
			
	}
	init(path){
		history.replaceState({path:path},null,path);
		this.routes[path]&&this.routes[path]();
	}
	route(path,callback){
		this.routes[path] = callback;	
	}
	push(path){
		history.pushState({path:path},null,path);
		this.routes[path] && this.routes[path]();
	}
	listerPopState(){
		window.addEventListener('popstate',e=>{
			const path = e.state && e.state.path;
			this.routers[path] && this.routers[path]()
		})	
	}
}
// 使用
window.miniRouter = new Router();
miniRouter.route('/',()=>console.log('page1'))
miniRouter.route('/page2',()=>console.log('page2'))
//跳转
miniRouter.push('/page2')// page2

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (39)-- 算法导论5.4 3题

三、在生日悖论的分析中,要求各人生日彼此独立是否很重要?或者,是否只要两两成对独立就足够了?证明你的答案。 文心一言: 在生日悖论的分析中,要求各人生日彼此独立是非常重要的。这是因为,如果各人生日不是独立的…

名号响亮的BBA,为什么在电车市场上“消失匿迹”了?

6月初,各大新能源车企公布了5月份的新车交付情况。整体来看,原本就“打得火热”的车市持续升温,多家车企月度销量环比涨幅超过10%,其中比亚迪更是拿出了超24万辆的“惊人表现”领跑市场。作为新势力的理想汽车,也打破单…

AntDB 企业增强特性介绍——同步异步自适应流复制

AntDB 提供了 hot-standby 的能力,功能与 Oracle 11g 的active standby 类似。并且通过流复制的方式,大大地缩短了备份库与主库的事务间隔。 传统流复制分为同步和异步两种模式。同步复制,即主机的事务要等到备机提交成功后才会提交并结束事…

2023-6-12-第三式单例模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

前端vue可以左右滚动的切换的tabs tabs选项卡 滑动动画效果 自动宽度

前端vue可以左右滚动的切换的tabs tabs选项卡 滑动动画效果 自动宽度, 下载完整代码请访问https://ext.dcloud.net.cn/plugin?id13003 效果图如下: #### 使用方法 使用方法 swiperTabList: ["2023-06-10","2023-06-11","2023-06-12","2…

ICASSP 2023丨基于 CTC 的模型改进,实现更强的模型结构

分享一篇网易智企易盾 AI Lab 团队在ICASSP 2023被收录的语音识别方向的论文《Improving CTC-based ASR Models with Gated Interplayer Collaboration(基于 CTC 的模型改进,实现更强的模型结构)》 论文地址:https://arxiv.org/ab…

UnityVR--组件10--UGUI简单介绍

目录 前言 UI基础组件 1. Canvas 2. EventSystem 3. Image 4. Text/TextMeshPro/InputField 5. Button控件 其他 前言 UGUI是Unity推出的新的UI系统,它与Unity引擎结合得更紧密,并拥有强大的屏幕自适应和更简单的深度处理机制,更容易使用和…

从零开始:安装H2数据库的步骤解析

在开发或编写示例时,有时需要用到数据库,如果本机上刚好没有安装,类似有些同学是临时借用的电脑或学校的电脑刚好没有安装时,我们可以使用H2数据库来快速代替,即方便又灵活。 安装和使用H2数据库的步骤如下&#xff1a…

【vue3】11-Vue 3中的Composition Api(一)

Vue3 - composition Api 前言options Api的弊端 认识composition ApiSet up函数的基本使用set up函数的参数set up函数的返回值 Set up中数据的响应式1. Reactive API2. Ref API3. ref和reactive的开发 setup中的其他函数(了解)setup中禁用this 前言 op…

Ansible自动化运维工具的初步了解及模块使用

1.Ansible的相关知识 1.1 Ansible工具的了解 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。Ansible能…

tp6安装并使用rabbitMQ

最近因为业务需要,要用到MQ就去研究了一下,说实话,安装环境给我搞自闭了,大概是我太菜 刚开始使用yum换源,各种安装卸载始终找不到自己要用的版本,后来全部卸载,下载安装包 编译安装解百忧 我用的是erlang 25.3 的版本,MQ使用的是3.11.3的版本,符合官方要求,这里的版本是有强…

智能果树叶部疾病识别实践,基于HOG+SVM和轻量级的CNN模型分别开发构建苹果果树叶部疾病识别分析系统

在农业领域中,将机器学习和深度学习模型结合应用有着广泛的实用意义,在这块相关的实践中以往的项目开发实践则是主要集中在农作物种植相关的,今天本文的主要目的就是开发构建果树叶部疾病识别分析系统,这里是以苹果果树叶部疾病数…

springcloud环境搭建

目录 1、创建一个父项目 ​编辑 2、创建子项目 2.1创建订单系统-order ​编辑 2.2创建库存系统-stock 3、创建rest服务 3.1添加web依赖 3.2编写controller 3.3订单中需要调用库存中的扣减库存的接口 通过idea开发工具进行搭建 1、创建一个父项目 通过spring initializr…

Django基础入门:后台管理 超级用户 数据表注册操作③

Django基础入门:后台管理 超级用户 数据表注册操作③ Django Admin数据表后台管理超级用户数据表注册admin操作日志 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新星创作者,CSDN实力新星…

使用randoop自动化生成测试用例

1. 综述 使用randoop自动化生成测试用例 2. 操作 下载randoop的jar包;将jar包和所要测试的类(如Calculate.class)放在同一个文件夹;在此文件夹打开命令行提示符,输入如下命令: java -ea -classpath .;ra…

嵌入式Linux驱动开发 05:阻塞与非阻塞

文章目录 目的基础说明开发准备驱动程序应用程序 O_NONBLOCK应用程序驱动程序程序演示 poll应用程序驱动程序程序演示 异步通知应用程序驱动程序程序演示 总结 目的 不管在应用开发还是驱动开发中阻塞和非阻塞都是绕不开的话题。这篇文章将介绍相关的基础内容。 这篇文章中内…

Redis命令-认识NoSQl和Redis常见的通用命令

1. 认识NoSQL 非关系型数据库 NoSQL是指一类非关系型数据库,它们采用的数据模型不同于传统的关系模型,它通常使用键值对、文档、图形等非传统的数据结构进行数据存储,不遵循预定义的模式和模型。NoSQL数据库通常分布式、高可扩展性&#xff0…

理解Java ThreadLocal

原文链接 理解Java ThreadLocal ThreadLocal是Java提供的为每个线程存储线程独立的数据的存储方式,也就是说用ThreadLocal来保存的数据,只能被当前线程所访问,其他线程无法访问,因为只有(一个线程)当前线程…

六级备考6天|CET-6|听力第五六讲|6月11日|19:44~20:07

目录 第五讲 第六讲 第五讲 第六讲 ​​​​​​​

支付宝认证的作用是什么?考试方向有哪些?

通过考证书来提升自己的能力,是现在的打工人经常会做的事,而对于从事信息通信技术行业的人来说,可以选择的证书非常多,其中支付宝认证是一个新设立的证书,但是实用性非常高。支付宝作为我们生活中常用的软件&#xff0…