前端路由和后端路由

路由

根据不同的url地址,展示不同的内容或页面。

前端路由

定义:在单页面应用,大部分页面结构不变,只改变部分内容的使用。
优点:页面不刷新,不需要每次都从服务器全部获取,快速展现给用户,用户体验好。
缺点

  1. 使用浏览器的前进,后退键的时候重新发送请求,没有合理的利用缓存;
  2. 单页面无法记住之前滚动的位置,无法在前进,后退的时候记住滚动的位置。

后端路由

定义:通过用户请求的url导航到具体的html页面;每跳转到不同的URL,都是重新访问服务器,服务器返回页面。
页面也可以是服务器获取数据,然后和模板组合,返回HTML,也可以是直接返回模板HTML,然后由前端[js]再去请求数据,使用前端模板和数据进行组合,生成想要的HTML

对比

  1. 性能和用户体验:后端路由每次访问一个新页面的时候都要向服务器发送请求,然后服务器响应请求,这个过程有延时。而前端路由在访问一个新页面的时候仅仅是变换了一下路径,没有网络延迟,提升用户体验。
  2. 用ajax请求,可以让页面无刷新,页面变了但URL没有变化,用户就不能复制到想要的地址,用前端路由做单页面应用解决该问题。但前端路由使用浏览器的前进,后退键的时候会重新发送请求,没有合理利用缓存。

vue-router前端路由原理

前端路由主要模式(实现方法):hash模式和history模式
目前前端路由的实现方法主要有两种,咯擦体哦你。hash和window.history。

  1. 通过location.hash实现前端路由
    定义:hash是url中#后面的部分,也叫做url的锚部分,本身用来做页面定位的,它可以使对应id的元素显示在可视区域内。
    由于hash值的变化不会导致浏览器向服务器发起取嗯求,而且hash改变会触发haschange事件,该事件可以实时监听url中hash值的变化,由此来根据hash值的变化进行Dom的切换操作,浏览器的前进后退也能对其进行控制。
onhashchange的语法如下:       
 HTML中:           
 <element onhashchange="myScript">        
Javascipt中:            
object.onhashchange=function(){myScript};        
Javascript中,使用addEventListener()方法:            object.addEventListener("hashchange", myScript);       
 onhashchange事件有如下几种触发条件:           
 a)改变url地址,在最后面增加或改变其hash值;        
 b)改变location.href或location.hash的值;        
c)点击带有锚点的链接;  
 d)浏览器前进后退可能导致hash的变化,前提是两个网页地址中的hash值不同。

利用Hash实现前端路由: 设计思路:当浏览器地址栏url的hash值发生变化时,就会触发onhashchange事件,这时通过window.location.hash可以拿到当前浏览器的url的hash值,注意此时的hash值是带有#的,因此需要对其值进行相应的处理,去掉#,并且如果当前url不含hash值的话,就将其当做根目录处理。之后将url和相应的组件函数进行映射,根据不同的hash值执行不同的回调函数,也就是加载相应的组件。

  1. 通过window.history和popstate实现前端路由

hash 本来是拿来做页面定位的,如果拿来做路由的话,原来的锚点功能就不能用了。其次,hash 的传参是基于 url 的,如果要传递复杂的数据,会有体积的限制,而 history 模式不仅可以在url里放参数,还可以将数据存放在一个特定的对象中。

浏览器窗口为用户提供一个history对象,用来保存用户操作页面的历史,我们在浏览网页时的前进后退操作都是基于这个对象来实现的。用到的接口history.pushState()和history.replaceState()

pushState()和replaceState()方法很类似,二者均接受三个参数,分别是state、title和url。其中state用来存放将要插入的history实体的相关信息,它是一个json格式的参数;title就是传入history实体的标题,需要注意的是firefox现在会自动忽略掉这个参数;url用来传递新的history实体的相对路径,如果其值为null则表示当前要插入的history实体与前一个实体一致,没有改变。replaceState()方法与pushState()方法的唯一区别在于,replaceState()方法会将最新一条的history实体覆盖掉,而不是直接添加,这种情况在处理例如登录页面这些不需要记录到history中的情况时非常有用。

这里需要注意的是history提供的这两个方法不会主动触发浏览器页面的刷新,只是history对象包括地址栏的内容会发生改变,当出发前进后退等history事件时才会进行相应的响应。另外,作为参数传入的url也会受到同源策略的限制,如果出现跨域等情况会导致报错。 popstate是官方提供的事件,当history中的记录发生改变时就会触发该事件。利用history实现前端路由: 设计思路:当想要跳转到指定url的时候,将目标url通过pushState()或者replaceState()方法填入到history和地址栏中,此时由于上述两种方法不会主动进行页面刷新,因此页面仍停留在当前页面,只是url地址发生了改变。之后通过popstate事件响应,执行相应的回调函数,实现前端组件间的切换。

https://www.jianshu.com/p/5231e7e125da

前端渲染和后端渲染

  1. 前端渲染:指得是后端返回JSON数据,前端利用预先写的html模板,循环读取JSON数据,拼接字符串(es6模板字符串),并插入页面。

好处:网络传输数据量小。不占用服务端运算资源(解析模板),模板在前端(很有可能仅部分在前端),改结构变交互都前端自己来了,改完自己调就行。

坏处:前端耗时较多,对前端工作人员水平要求相对较高。前端代码较多,因为部分以前在后台处理的交互逻辑交给了前端处理。占用少部分客户端运算资源用于解析模板。

  1. 后端渲染:前端请求,后端用后台模板引擎直接生成html,前端接受到数据之后,直接插入页面。

好处:前端耗时少,即减少了首屏时间,模板统一在后端。前端(相对)省事,不占用客户端运算资源(解析模板)

坏处:占用服务器资源。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容