先理解它们的实现事理,搞清楚之间的差异,就知道什么时候该选择什么模式了。
一、实现事理
hash 事理
hash 通过监听浏览器 onhashchange 事宜变革,查找对应路由运用。通过改变 location.hash 改变页面路由。

history 事理
利用 html5 的history Interface 中新增的 pushState() 和 replaceState() 方法,改变页面路径。
history Interface 是浏览器历史记录栈供应的接口,可通过 back、forward、go 等,可以读取历览器历史记录栈的信息,pushState、repalceState 还可以对浏览器历史记录栈进行修正。
hash 与 history 差异比拟:
hash
history
有 # 号
没有 # 号
能够兼容到IE8
只能兼容到IE10
实际的url之前利用哈希字符,这部分url不会发送到做事器,不须要在做事器层面上进行任何处理
每访问一个页面都须要做事器进行路由匹配天生 html 文件再发送相应给浏览器,花费做事器大量资源
刷新不会存在 404 问题
浏览器直接访问嵌套路由时,会报 404 问题。
不须要做事器任何配置
须要在做事器配置一个回调路由
二、为什么推举利用 hash 模式?
情由:
1、从兼容角度剖析。
hash 可以兼容到 IE8,而 history 只能兼容到 IE10。
2、从网络要求的角度剖析。
利用 hash 模式,地址改变时通过 hashchange 事宜,只会读取哈希符号后的内容,并不会发起任何网络要求。
而 history 模式,每访问一个页面都要发起网络要求,每个要求都须要做事器进行路由匹配、数据库查询、天生HTML文档后再发送相应给浏览器,这个过程会花费做事器的大量资源,给做事器的压力较大。
3、做事器配置角度剖析。
hash 不须要做事器任何配置。
history 进行刷新页面时,无法找到url对应的页面,会涌现 404 问题。由于域名后面的路由是由前端掌握的,后端只能保留域名部分,以是就会造成页面丢失的问题,须要做事器端添加一个回退路由,就能办理该问题了。
hash 模式不敷
1、hash 模式中的 # 也称作锚点,这里的的 # 和 css 中的 # 是一个意思,以是在 hash 模式内,页面定位会失落效。
2、hash 不利于 SEO(搜索引擎优化)。
3、白屏韶光问题。浏览器须要等待 JavaScript 文件加载完成之后渲染 HTML 文档内容,用户等待韶光稍长。
好了小编本日的文章就到此结束了,喜好我的可以点个关注哦