404 单页应用 报错 路由_单页应用
![](/assets/blank.gif)
作者:TYANer
单页应用对于大家而言,可能是一个比较陌生的概念,但是其实大家都和单页应用打过交道。之所以这么说,是因为目前平台开发的所有中台系统的前端部分,包括Kadmin、TGS、OTA都属于单页应用。那么,到底什么是单页应用呢?
单页应用的概念
单页应用,顾名思义,就是整个应用只有一个主页面,其余的“页面”,实际上是一个个的“组件”。单页应用中的“页面跳转”,实际上是组件的切换,在这个过程中,只会更新局部资源,页面不会整个刷新。也正是因为这个原因,当我们的前端代码有更改,重新部署之后,如果用户不主动刷新,就会发现有“资源缓存”。
以TGS为例,下面每一步操作,都会清除请求日志,重新记录。
1.通过地址栏输入地址进入页面。此时,会请求主页面https://console.tgs-dev.tap4fun.com/
和公共的资源文件。
![](/assets/blank.gif)
2.点击跳转到登录板块。可以看到,由于初次进入应用的时候,已经加载了所有的静态资源,在“页面切换”时,只发送了相关的API请求。
![](/assets/blank.gif)
3.再次刷新后,重新请求了静态资源。
![](/assets/blank.gif)
单页应用的实现
单页应用的实现主要有两种方式,hash模式和history模式。从表现上来说,history模式和hash模式都能够实现不刷新的URL跳转。在平台的业务中,Kadmin采用的是history模式的路由跳转,TGS采用的是hash模式的路由跳转。
Kadmin URL参考:https://kadmin-inner.tap4fun.com/deploy/application/list/
TGS URL参考:https://console.tgs-dev.tap4fun.com/#/pay/goods
1、history模式
history模式是基于HTML5规范,利用history.pushState
、history.replaceState
API来完成 URL 跳转而无须重新加载页面。
API简介:
(1)history.pushState()
history.pushState(stateObj, title, url)
- stateObj:状态对象,存储 JSON 字符串,可以用在 popstate 事件中。
- title:标题,现在大多浏览器忽略这个参数,直接用 null 代替。
- url:任意有效的URL,必须与当前页面处在同一个域,用于更新浏览器的地址栏。
history.pushState()用于新增一个历史记录。
(2)history.replaceState()
history.replaceState(stateObj, title, url)
history.replaceState()
的使用与history.pushState()
非常相似,区别在于replaceState()
是修改了当前的历史记录项而不是新建一个。
history API详细介绍:https://developer.mozilla.org/en-US/docs/Web/API/History_API/Working_with_the_History_API#Adding_and_modifying_history_entries
history模式的具体实现在不同的框架中可能不尽相同,但是实现原理基本都是通过监听触发history对象修改的事件,并绑定相应的处理函数。
2、hash模式
hash模式使用 URL 的 hash 来模拟一个完整的 URL。由于hash本来的作用是锚点,因此,在 URL 改变时,页面不会重新加载。所以hash模式需要监听hashchange事件,并绑定相关的“页面切换”处理函数,以实现“页面切换”。同时可以使用 window.location.hash 属性获取和设置 hash 值。
window.addEventListener('hashchange', updateView(), false);
使用hash模式的单页应用,URL中会有一个“#”,让它和真正的URL始终有一些差异,不少开发者会觉得这样的形式有些“丑陋”,因此更偏爱于history模式。
单页应用的优点
- 局部刷新,渲染速度快。
- 允许浏览器在后台向服务器发出请求以完全获取其他内容或新“页面”的同时,保持当前页面的打开状态,交互性好。
- “页面”间数据传递十分方便,可以使用全局变量。
- 公共资源只需要加载一次,减少了HTTP请求数。
- 组件可复用。
单页应用的缺点
- 静态资源更新后,不会因为“页面切换”重新加载,必须手动刷新,否则可能出错。
- 在首页可能加载不必要的资源,当初次加载文件过多时,需要做相关的调优。否则,资源间的下载和执行相互阻塞,会导致页面初次加载速度变慢。
- 单页应用不利于SEO。
404 单页应用 报错 路由_单页应用相关推荐
- 404 单页应用 报错 路由_详解vue 单页应用(spa)前端路由实现原理
写在前面:通常 SPA 中前端路由有2种实现方式: window.history location.hash 下面就来介绍下这两种方式具体怎么实现的 一.history 1.history基本介绍 w ...
- 404 单页应用 报错 路由_通过 Laravel 创建一个 Vue 单页面应用(五)
文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/34858 我们在第4部分完成了编辑用户的功能,并且学习了如何使用 v-model 来监 ...
- 404 单页应用 报错 路由_Vue 部署单页应用,刷新页面 404/502 报错
在 Vue 项目中,可以选择 hash或者 history.pushState() 实现路由跳转.如果在路由中使用history模式: export default new Router({ mode ...
- SAP WM LI04 试图去打印一个已经完成盘点流程(清账)的盘点单, 系统会报错!
SAP WM LI04 Print Physical Inventory Document - Inventory record 30 already cleared – LI04 试图去打印一个已经 ...
- eas报错日记_金蝶EAS常见问题解答_基础业务服务_2016教程.docx
金蝶EAS常见问题解答_基础业务服务_2016教程 目录1基础业务服务21.1基础组织21.2上机日志6问题描述61.3客户化菜单181.4 License许可351.5附件管理471.6编码规则62 ...
- mysql报错注入_关于Mysql注入过程中的三种报错方式
放点原来的笔记,Mysql在执行语句的时候会抛出异常信息信息,而php+mysql架构的网站往往又将错误代码显示在页面上,这样可以通过构造如下三种方法获取特定数据. 实际测试环境: Default m ...
- 关于编辑器对input标签报错提示“表单输入没有相关label”的问题
相信很多朋友在制作表单的时候,我们的编辑器会有下图的相关提示吧 我们发现虽然这样并不影响我们的正常使用,但是看着这样的报错提示总是很让人心烦,那么这到底是为什么呢? 其实,这是因为编辑器建议我们在使用 ...
- mysql报错乱码_连接mysql服务器报错时,出现乱码
页头用了 header('content-type:text/html;charset=utf-8'); try { $this->dbo=new PDO($dsn,$dbuser,$dbpas ...
- php phar包require报错,php,_很奇怪,php 引入了phar,但是报错,说Predis\Client类找不到?,php - phpStudy...
很奇怪,php 引入了phar,但是报错,说Predis\Client类找不到? require 'Predis.phar'; use Predis\Client; ini_set('session. ...
最新文章
- 学计算机专业英语报告范文,计算机学习报告
- 如何使用Laravel Debugbar?
- Log Buffer
- android 验证码
- bufg和bufgp_如何将自己写的verilog模块封装成IP核(一)
- 数据仓库之电商数仓-- 4、可视化报表Superset
- python3语音控制电脑_python语音控制电脑_uusee全屏
- 巴士电台开放接口API
- 程序媛爬取了 5 个 APP 的 4220 个数据,解读过去的一年到底过得怎么样!
- oracle数据库集群采用的是形式,铁道部采用Oracle集群数据库进行TMIS系统“三级建库”...
- [swift 进阶]读书笔记-C2P3_Set、 C2P4_Range
- 雷林鹏分享:PHP 实例 - AJAX 与 XML
- linux系统交换分区的文件格式是,【简答题】Red Hat Linux中,交换分区的文件系统类型是什么,光盘文件的文件系统类型是什么?...
- php 高德地图经纬度,高德地图php 换取经纬度 地址
- 快商通AI智能客服机器人,荣获中国科学院《互联网周刊》重磅荣誉!
- Apache中文URL中有包含“\x85”字节的汉字时导致的Rewrite失败及404问题
- FlashFXP 连接成功无法显示目录
- 四种隔离级别及应用场景
- 教你免费使用论文检索网,轻松下载
- 结构类型的定义,应用
热门文章
- UVA1368 UVALive3602 ZOJ3132 DNA Consensus String【贪心】
- scala 基础 —— 函数(柯里化)
- 【Python 安装】安装第三方库时 PermissionError: [WinError 5] Access is denied
- NVIDIA 显卡信息(CUDA信息的查看)
- numpy 维度与轴的问题
- 解决算法问题的思路 —— 从问题描述到数学表达
- 微信中html5获取手机号,微信小程序通过用户授权获取手机号
- python数据归一化代码_Python 数据归一化/标准化
- python随机数据库_Python实现生成随机数据插入mysql数据库的方法
- python界面编程实例_python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例...