讲把路由放在前端意味着什么海量资源.pdfVIP

讲把路由放在前端意味着什么海量资源.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

本文由简悦SimpRead转码,原文地址

当浏览器地址栏中的URL发生变化时,会请求对应的网络资源,而负责响应这个网络资源的服务就称

为路由。在早期的Web开发中,路由都是交由服务端处理,但随着前端技术的快速发展,路由模块逐

渐转移交给了前端进行控制,而路由转移到前端,正是前后端分离和单页应用架构的基石。这一

我们来深入理解前端路由的技术细节。

前端路由实现基础

默认情况下,当地址栏的URL发生变化时,浏览器会向服务端发起新的请求。所以实现前端路由的重

要基础就是在修改URL时,不引起浏览器向后端请求数据。根据浏览器提供的API,有下面两种实现方

案。

基于hash实现

前面提到当URL变化时浏览器会发送请求,但有一种特例,那就是hash值的变化不会触发浏览器发起

请求。

hash值是指URL“#”号后面的内容,通过location.hash属性可以读写hash值,这个值可以让浏览器

将页面滚动到ID与hash值相等的DOM元素位置,不会传给服务端。

要它的变化也比较简单,通过window对象的hashchange就可以感知到它的变化。

这种实现方式占用了hash值,导致默认的页面滚动行为失效,对于有滚动定位需求的情况需要自行手

动获取元素的位置并调用BOM相关API进行滚动。

基于history实现

HTML5提出了一种更规范的前端路由实现方式,那就是通过history对象。

history提供了两个函数来修改URL,即history.pushState()和history.replaceState(),这两个API可

以在不进行刷新的情况下,来操作浏览器的记录。唯一不同的是,前者是新增一个记录,后

者是直换当前的记录。

URL变化则可以通过window对象上的popstate来实现。但需要注意的是,

history.pushState()或history.replaceState()不会触发popstate,这时我们需要手动触发页面渲

染。

虽然能通过这种方式实现前端路由功能,但并不能浏览器默认的请求行为,当用户修改地址栏

时还是会向服务端发起请求,所以还需要服务端进行设置,将所有URL请求转向前端页面,交给前端

进行解析。

下面是vue-router官网的Nginx配置例子:表示对于匹配的路径,按照指定顺序依次检查对应路径文

件是否存在,对应路径是否存在,如果没有找到任何文件或,就返回index.html。而

index.html就会引入对应的JavaScript代码在浏览器端进行路由解析。

location/{

try_files$uri$uri//index.html;

}

路由解析

浏览器在URL变化时向后端发送请求,就需要对路由进行解析了。vue-router和react-

router都同时依赖了一个第库Path-to-RegExp进行路由解析,下面通过分析path-to-regexp1.8

版本的源码来理解路由是如何被解析的。

路由解析又分为两个操作:路由匹配和路由生成。

路由匹配

路由匹配就是当获取到请求路径后,如何找到对应的配置路径。在path-to-regexp源码中对应的是默

认导出函数pathToRegexp(),该函数接收3个参数:

path,必传参数,值可以为自定义的请求路径,如/user/:id,也可以是正则表达式,还可以是两

者组成的数组;

keys,可选参数,值为数组,数组元素为解析正则表达式风格的字符串或冒号开头的占位符

(下文简称为“特殊字符串”)生成的令牌,比如字符串/user/:id对应的keys为{name:id,

delimiter:/,optional:false,repeat:false},这个参数的值最终会被保存到返回的正则表达式对

象的keys属性中,可用于后面的路由生成;

options,可选参数,执行过程中的配置信息,比如是否大小写敏感。

函数返回值是一个带有keys属性的正则表达式,key

文档评论(0)

153****4985 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档