Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具

spa

作者头像
pitaojin
发布于 2018-05-24 10:03:50
发布于 2018-05-24 10:03:50
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

spa

spa全称:single-page application(单页应用)

是一种特殊的Web应用。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、JavaScript、CSS。一旦页面加载完成,SPA不会因为用户的操作而进行页面的重新加载或跳转,而是利用JavaScript动态的变换HTML,从而实现UI与用户的交互。

SPA百度百科

最显著的特点:正常情况下,我们会在一个页面中链接到其他的很多个页面,进行页面的跳转,但是如果使用单页面应用的话,我们始终在一个页面中。

由于避免了页面的重新加载,SPA 可以提供较为流畅的用户体验。

得益于ajax,我们可以实现无跳转刷新

又多亏了浏览器的histroy机制,我们用hash的变化从而可以实现推动界面变化。

实现spa

要实现spa,最关键的便是处理#后面的字符,也就是大家常说的URL的锚。

首先得了解一个对象:Location

  • Location 对象包含有关当前 URL 的信息。
  • Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

Location 对象的W3Cschool详细介绍

了解了Location 对象之后,我们可以知道,#后面的字符,其实location对象的hash属性的值,即是说,我们可以轻松拿到这个#后面字符的变化值,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let hash = document.location.hash;

然而仅仅能够获取hash属性,是无法实现spa的,我们还需要能够改变hash值。我们可以直接使用a标签跳转:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="#xiaoming">小明</a>
<a href="#xiaofang">小芳</a>
<a href="#xiaodong">小冬</a>
<a href="#xiaowang">小王</a>

到这里,我们还需要一个能监听hash值变化的事件:hashchange

见名知意,通过hashchange事件,我们可以监视#后面字符,一旦发生改变,就会触发此事件。

搞清楚实现方法之后,我们就可以开始写代码了。

我的小demo:

文件夹结构:

html:

css:

js:

json实例:

实现结果:

这只是一个小demo,实际上,现在主流的很多框架特别适合用于开发spa页面,如angularJS,vueJs,React,backbone,extjs等。

最后,再来谈一谈spa的优缺点

优点:

  • 分离前后端关注点,前端负责view,后端负责model,各司其职;
  • 服务器只接口提供数据,不用展示逻辑和页面合成,提高性能;
  • 同一套后端程序代码,不用修改兼容Web界面、手机;
  • 用户体验好、快,内容的改变不需要重新加载整个页面
  • 可以缓存较多数据,减少服务器压力
  • 单页应用像网络一样,几乎随处可以访问—不像大多数的桌面应用,用户可以通过任务网络连接和适当的浏览器访问单页应用。如今,这一名单包括智能手机、平板电脑、电视、笔记本电脑和台式计算机。

缺点

  • 刚开始的时候加载可能慢很多
  • 用户操作需要写逻辑,前进、后退等;
  • 页面复杂度提高很多,复杂逻辑难度成倍
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
hash和history路由模式
前端路由是指在浏览器端控制页面内容切换显示的机制。在没有服务器端参与的情况下,前端路由可以根据URL的变化,对应展现不同的内容,实现页面的“伪”跳转。
y191024
2024/01/29
2340
hash和history路由模式
浅谈移动端页面无刷新跳转问题的解决方案
浅谈移动端页面无刷新跳转问题的解决方案 2017-12-22  祈澈姑娘 最近开发微信公众号,用的框架是 一般的 UI,但是涉及到多页面之间的相互跳转的问题,降低了浏览器的性能,用户体验特别不好,卡顿,不流畅,因此不采用传统的页面跳转方式,看到不少手机网页开发的框架都都是在一个html文档中包涵多个页面的内容,每页放到不同的 里面。 于是采用当下流行的单页面模,在做pc网页的时候一般都直接给链接的。比起用链接来跳转页面,这样做也是有很多好处的(比如appjs,jquery Mobile) 这种web形式在如
王小婷
2018/06/01
3.7K0
单页面Web应用(SPA应用)SEO优化
单页Web应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、JavaScript 和 CSS。一旦页面加载完成了,SPA不会因为用户的操作而进行页面的重新加载或跳转。取而代之的是利用 JavaScript 动态的变换HTML的内容,从而实现UI与用户的交互。由于避免了页面的重新加载,SPA 可以提供较为流畅的用户体验。得益于ajax,我们可以实现无跳转刷新,又多亏了浏览器的histroy机制,我们用hash的变化从而可以实现推动界面变化。
爱上歆随懿恫
2022/08/15
1.4K0
单页面Web应用(SPA应用)SEO优化
Vue的一些命名规则与SPA实现思路
  3.1 所有模块的主文件index.js全小写  3.2 属于类的.js文件,使用PascalBase风格  3.3 其他类型的.js文件,使用kebab-case风格
用户10196776
2022/11/22
2K0
Vue的一些命名规则与SPA实现思路
大前端开发中的路由管理之二:web篇
1、Web路由需要实现的目标         上一篇文章中我们谈到了SPA(Single-page application)的出现,但SPA的应用有个需要解决的问题,就是浏览器只加载记录了一个html,所以当刷新浏览器时js会重新执行,当前页面的内容便会丢失;页面跳转时浏览器不会向服务器发出新的页面请求,浏览器也就无法前进、后退页面。         所以前端web路由需要实现以下目标:       (1)能根据页面URL来获取不同的模块,但不发起新的页面请求;       (2)能监听URL的变化。
QQ音乐技术团队
2021/11/08
1.6K0
ReactRouter的实现
ReactRouter是React的核心组件,主要是作为React的路由管理器,保持UI与URL同步,其拥有简单的API与强大的功能例如代码缓冲加载、动态路由匹配、以及建立正确的位置过渡处理等。
WindRunnerMax
2021/01/29
1.4K0
彻底理清前端单页面应用(SPA)的实现原理
传统的多页面应用构建方式: 纯服务端渲染,前后端不分离,使用jsp,jade,'ejs','tempalte'等技术在后台先拼接成对应的HTML结构,然后转换成字符串,在每个对应的路由返回对应的数据(文件)即可 Jade模版服务端渲染,代码实现: const express= require('express') const app =express() const jade = require('jade') const result = *** const url path = *** const
Peter谭金杰
2019/08/02
3.2K2
SPA页面初试
之前一直很好奇,SPA应用到底是怎么实现的,昨天无意间看到了有一篇介绍的文章,就想着来试一下水(以下根据我的理解所写,可能会让你看的云里雾里,如果想加深了解,最好先了解下window.location.hash是什么东西) 其实,SPA的原理就是,一开始将一些必要的页面都加载进来,当你在页面输入别的路由的时候,其实还是待在当前的页面,只不过是他识别出你想要去的地址,然后将那个页面的内容获取到,替代掉当前页面的内容,并且相应的改变url地址,这样给人看起来就好像到了另一个页面,实际上你还是在这个页面里,没有离
嘿嘿嘿
2018/09/10
9980
SPA页面初试
SPA(单页面应用)的基本实现原理
我们应该都使用过网易云音乐或者是别的一些逼格比较高的网页,他们比较厉害的一点是页面看起来只有一个,不管你点击什么地方,永远不会刷新页面,都是感觉是在一个页面上完成的操作,这个逼格那么高的页面是怎么实现的呢?今天博主就简单的将实现的原理写一下,鄙人能力有限,写的不好的,或者您有自己的想法的,可以随时联系我,这里写的是原生的js实现,不是使用vue或者react的路由实现,所以我明白那些每天使用框架的人看到以后的感觉,肯定是没有vue或者react又或者别的一些数据双向绑定的框架使用起来方便,不过这个是入门的基本原理,所以大神莫怪!
何处锦绣不灰堆
2020/05/29
1.1K0
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的rep
随着(SPA)单页应用的不断普及,前后端开发分离,目前项目基本都使用前端路由,在项目使用期间页面不会重新加载。
刘大猫
2024/10/13
1020
前端路由的原理及应用
早期的路由都是后端来实现的,根据用户访问的地址的不同,浏览器从服务器请求对应的资源或页面展示给用户。当页面数据量大,结构复杂的时候,随之造成服务器的压力也比较大,而且用户访问速度也比较慢。
江米小枣
2020/06/16
2.3K0
前端路由的原理及应用
SPA应用路由器如何工作?
SPA(single page application)-单页面应用有两个特点,一是路由控制,二是模板渲染。通过路由器,可以在不reload页面的情况下,实现页面部分刷新。那么,最关键的地方,就是如何设计路由器,如何让路由器工作?
娜姐
2022/05/13
1.6K0
SPA应用路由器如何工作?
学习 Vue 3 全家桶 - vue-router
在 jQuery 时代,对于大部分 Web 项目而言,前端都是不能控制路由的,而是需要依赖后端项目的路由系统。通常,前端项目也会部署在后端项目的模板里,对于每次的页面跳转,都由后端开发人员来负责重新渲染模板。
Cellinlab
2023/05/17
4160
学习 Vue 3 全家桶 - vue-router
SPA初试-1
即每一个页面对应着一个状态,一个状态有一个状态名,还有一个模板/模板url,这样我们就可以将不同页面的内容写到不同的html里,然后通过templateUrl将他们动态加载进来渲染页面。
嘿嘿嘿
2018/09/10
6610
SPA初试-1
hash和history的原理和区别
目前单页应用(SPA)越来越成为前端主流,单页应用一大特点就是使用前端路由,由前端来直接控制路由跳转逻辑,而不再由后端人员控制,这给了前端更多的自由。
前端小tips
2021/11/23
2K0
hash和history的原理和区别
Angular路由实现原理
路由实现原理基本上每个人都能说出一点。最近也是被问到了回答的不是很好,所以准备好好整理一下。
4cos90
2023/05/31
8200
Vue04路由--SPA+ 使用路由建立多视图单页应用+router-link相关属性+【面试题:js中const,var,let区别】
        3.5 使用RouterLink和RouterView组件导航与显示
天蝎座的程序媛
2022/11/18
2.5K0
Vue3最新Router带来哪些颠覆性变化?
jQuery时对大部分Web项目,前端不能控制路由,要依赖后端项目的路由系统。通常,前端项目也部署在后端项目的模板里,项目执行示意图:
JavaEdge
2024/12/30
2701
Vue3最新Router带来哪些颠覆性变化?
SPA单页应用的优缺点
Single Page Web Application是一种特殊的Web应用,其所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、JavaScript、CSS文件,一旦页面加载完成,SPA不会进行页面的重新加载或跳转,而是利用JavaScript动态的变换HTML,默认Hash模式是采用锚点实现路由以及元素组件的显示与隐藏实现交互,简单来说SPA应用只有一个页面,通常多页面应用会有多个页面不断跳转,而单页面应用始终在一个页面中,,默认Hash模式是通过锚点实现路由以及控制组件的显示与隐藏来实现类似于页面跳转的交互。
WindRunnerMax
2020/09/02
3K0
第十一章:vue路由配置01基础
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JrteIv8T-1655272924474)(assets/image-20220226140815179.png)]
用户9184480
2024/12/13
1130
相关推荐
hash和history路由模式
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验