<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          淺談前端路由的概念

          共 1743字,需瀏覽 4分鐘

           ·

          2021-07-20 16:59


          1.Web路由


          1.1 后端路由


          Web路由的概念簡單來說就是根據(jù)不同URL渲染不同的頁面。在前后端不分離的時代,路由往往指的是后端路由(服務(wù)端路由),即當(dāng)服務(wù)端接收到客戶端發(fā)來的 HTTP 請求,就會根據(jù)所請求的相應(yīng) URL,進行文件讀取,數(shù)據(jù)庫讀取等操作,使用模板引擎將相應(yīng)結(jié)果與模板結(jié)合后進行渲染,將渲染完畢的頁面發(fā)送給客戶端。


          優(yōu)缺點

          優(yōu)點:seo友好,爬蟲爬取到的頁面就是最終的渲染頁面。

          缺點:每次發(fā)起請求都要刷新頁面,用戶體驗不好,服務(wù)器壓力大。


          1.2 前端路由


          說到前端路由,必須先提一下Ajax與SPA。Ajax技術(shù)的興起促使了 SPA—單頁面應(yīng)用的出現(xiàn),由于Ajax可以做到頁面的局部更新,因此單頁應(yīng)用頁面的交互和頁面的跳轉(zhuǎn)都是無刷新的,無刷新就意味著無需處理html文件的請求,因此用戶體驗很好。但相應(yīng)的,由于頁面數(shù)據(jù)需要通過Ajax獲取,因此爬蟲獲取到的html只是模板而不是最終的渲染頁面,因此會不利于seo。為了實現(xiàn)單頁應(yīng)用,所以就有了前端路由。


          前端路由的概念簡單來講就是,當(dāng)路由發(fā)生變化,不請求服務(wù)端,而是通過js的方式修改dom(組件替換),并發(fā)送Ajax獲取數(shù)據(jù)來達到頁面跳轉(zhuǎn)的效果。因此實現(xiàn)前端路由有兩個關(guān)鍵點:


          如何改變url不讓瀏覽器向服務(wù)器發(fā)送請求。

          如何監(jiān)聽到url的變化,并執(zhí)行對應(yīng)的操作


          這里就要引出實現(xiàn)前端路由的兩種路由模式:hash模式和history模式


          2.前端路由的實現(xiàn)模式


          2.1 hash模式


          概念:hash 就是指 url 后的 # 號以及后面的內(nèi)容

          特點:hash模式有以下幾個特點


          hash值的變化不會導(dǎo)致瀏覽器向服務(wù)器發(fā)送請求,不會引起頁面刷新。


          hash值變化會觸發(fā)hashchange事件。


          hash值改變會在瀏覽器的歷史中留下記錄,使用瀏覽器的后退按鈕,就可以回到上一個hash值。


          hash永遠(yuǎn)不會提交到服務(wù)端,即使刷新頁面也不會。


          由此可見hash模式的特點完全可以滿足前端路由的實現(xiàn)需求,所以在 H5 的 history 模式出現(xiàn)之前,基本都是使用 hash 模式來實現(xiàn)前端路由。


          優(yōu)缺點


          優(yōu)點:

          1、兼容性好,支持低版本和IE瀏覽器。

          2、實現(xiàn)前端路由無需服務(wù)端的支持。


          缺點:

          URL帶#,路徑丑


          2.2 history模式


          概念:在 HTML5 之前,瀏覽器就已經(jīng)有了 history 對象來控制頁面歷史記錄跳轉(zhuǎn),主要有以下方法。


          history.forward():前進

          history.back():后退

          history.go(n):加載歷史列表中的某個具體的頁面


          在 HTML5 的規(guī)范中,history 新增了以下幾個 API:pushState(追加) 和 replaceState(替換),通過這兩個 API 可以改變 url 地址且不會發(fā)送請求,同時還新增popstate 事件。通過這些API就能用另一種方式來實現(xiàn)前端路由,其實現(xiàn)原理跟與hash模式 實現(xiàn)類似,只是用了 HTML5 的實現(xiàn),單頁面應(yīng)用的 url 不會多出一個#,會更加美觀。


          關(guān)于History模式有兩點需要說明:


          history模式如何監(jiān)聽路由變化


          history模式下,瀏覽器的前進后退(history.back(), history.forward()等)會觸發(fā)popstate 事件,但pushState,replaceState 并不會觸發(fā)popstate事件。因此要實現(xiàn)路由變化的偵聽,我們需要重寫這兩個方法,可以通過事件中心(EventBus)添加事件通知。


          history模式需要后端支持


          由于history模式?jīng)]有 # 號,所以當(dāng)用戶手動刷新或直接通過url進入應(yīng)用時,瀏覽器還是會給服務(wù)器發(fā)送請求。但服務(wù)端無法識別這個 url ,因此為了避免出現(xiàn)這種情況,history模式需要服務(wù)端的支持,即服務(wù)端需要把匹配不到的所有路由都重定向到根頁面。


          優(yōu)缺點


          優(yōu)點:

          路徑好看


          缺點:

          1、兼容性差,不能兼容IE9。

          2、需要服務(wù)端支持。

          瀏覽 66
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品无码一区二区三区在线 | 亚洲区无码在线播放 | 福利精品一区二区三区四区 | 亚洲综合婷婷 | 国产在线播放av 国产在线播放福利 |