如何看待history和hash的区别

如何看待前端路由?路由的做用是什么?

在我看来路由有两个方面的做用:html

  • 经过路由变化,实现页面之间的跳转和切换
  • 能够经过路由传递参数(query)

路由的种类

路由的种类能够分为如下四种前端

  • hash 主要是基于锚点实现
  • browser 使用的是html5中的history 这个api来实现的,每次路由发生变化都会重定向
  • memory 这种实现是在内中维护一个堆栈管理历史记录,因为比较复杂,如今通常都不用了
  • static 是后端管理路由的模式

只介绍前端经常使用的二者路由方式

hash路由

hash路由的优势html5

  • 兼容性比较好,兼容性达到了ie8
  • 绝大数框架的框架都基本支持hash路由方式
  • 除了会发送ajax和资源加载以外不会发送其余请求
  • 不须要在服务端进行任何设置和开发

hash路由的缺点ajax

  • 服务端没法准确捕获路由的信息
  • 对于须要锚点功能的需求会与当前路由机制发生冲突
  • 对于须要重定向的操做,后段没法获取url所有内容,致使后台没法获得url数据,典型的例子就是微信公众号的oauth验证。

browser路由

browser路由的优势后端

  • 当发生路由重定向时不会丢失url数据 ,后端也能够拿到这个数据
  • 固然,绝大多数框架同样实现了 browser路由的方式
  • 后端能够准确追踪到路由
  • 可使用history.state获取路由的信息

使用browser的缺点api

  • 兼容性不如hash 。兼容性只到ie10
  • 须要后端支持,每次返回html文档
相关文章
相关标签/搜索