路由 前后端渲染 url hash 和 html5 history
路由
- 路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动
- 【路由 前后端渲染 url hash 和 html5 history】路由器提供了两种机制:路由和传送
- 路由是决定数据包从来源到目的地的途径
- 转送将输入端的数据转移到合适的输出端
- 路由中有一个非常重要的概念叫路由表
- 路由表本质上就是一个映射表,决定了数据包的指向
- 后端路由阶段
- 后端处理URL和页面之间的映射关系
- 每个页面有自己对应的网址,就是URL
- URL发送到服务器,服务器会通过正则对该URL进行匹配,并且最后交给一个Controller进行处理
- Controller进行各种处理,最终生成HTML或者数据,返回给前端
- 这就完成一个IO操作
- 前后端分离阶段
- 随着AJAX出现,有了前后端分离的开发模式
- 后端只提供API来返回数据,前端通过AJAX获取数据,并且可以通过JavaSCRIPT将数据渲染到页面上
- 这样做最大的优点就是前后端责任明晰,后端专注于数据,前端专注于交互和可视化上
- 并且当移动端出现后,后端不需要进行任何处理,依然使用之前的一套API即可
- SPA页面
- 单页面富应用,整个网页只有一个html页面
- 浏览器中显示的网页中的大部分内容,都是由前端写的js代码,在浏览器中执行,最终渲染出来的网页
- 好处:网络传输数据量小。不占用服务端运算资源(解析模板),模板在前端(很有可能仅部分在前端),改结构变交互都前端自己来了,改完自己调就行。
- 坏处:前端耗时较多,对前端工作人员水平要求相对较高。前端代码较多,因为部分以前在后台处理的交互逻辑交给了前端处理。占用少部分客户端运算资源用于解析模板。
- 服务器直接生产渲染好对应的HTML页面, 返回给客户端进行展示。
- 好处:前端耗时少,即减少了首屏时间,模板统一在后端。前端(相对)省事,不占用客户端运算资源(解析模板)
- 坏处:占用服务器资源。
- URL的hash
- URL的hash也就是锚点(#),本质上是改变window.location的href属性
- 我们可以通过直接赋值location.hash来改变href,但是页面不发生刷新
- location.hash = 'aaa'
- HTML5的history
- history.pushState({}, .. , 'sss') //可返回
- history.replaceState({},'','111') //不可返回
- history.go(-1) = history.back
- history.forward() = history.go(1)