director.js實作前端路由使用實例_javascript技巧
做過後端開發,尤其是使用過類似Django或express對伺服器端的路由功能應該都比較熟悉,國外流行的部落格系統wordpress也是非常經典的路由實作案例。那麼,究竟什麼的路由呢,下面透過wordpress來簡單講一下。
理解wordpress重寫規則的的都是知道,實際上任何一條url的存取都是基於wordpress安裝目錄下的index.php(除了伺服器上已經存在檔案的存取),當wordpress的固定連結是模式設定是會很明顯,例如文章的url是index.php?p=id,分類頁面的url是index.php?cat=id。
在這裡,index.php就扮演了路由器的功能,請看下圖:
也就是說,不管你造訪的是什麼位址,所有的請求最終都會重定向到index.php,程式會根據存取url的特徵,決定你需要的是哪個類型的頁面,然後向資料庫作出查詢,最終把html內容回傳給瀏覽器。
上面說的是web後端路由,那麼前端的路由是什麼呢?其實現在前端路由技術應用非常廣泛,有許多開源的js類別函式庫都支援前端路由,如angularJS,ember.js, director.js等等。前端路由和後端路由原理一樣,是讓所有的互動和展現在一個頁面運行以達到減少伺服器請求,提高客戶體驗的目的,越來越多的網站特別是web應用都用到了前端路由。
director.js是最純粹的路由註冊/解析器,它在不刷新頁面的情況下,利用“#”符號組織不同的URL路徑,並根據不同的URL路徑來匹配不同的回調方法。 director.js不僅可以應用在客戶端,在使用node.js的後台,它也能夠實現前面所說的後端路由功能。來看下面關於前端路由實現的範例
需要設計一下類似web QQ上的web桌面應用,桌面上有很多小圖標,每一個小圖標是一個功能應用,類似電腦桌面。桌面上有一個百度新聞的按鈕,點擊它在當前頁面彈出一個窗口,能夠查看百度新聞,另外一個圖標,點擊可以查看當前時間,下面是一個簡單的示例:
<!DOCTYPE HTML> <html lang="en"> <head> <meta charset="UTF-8"> <script src="https://rawgit.com/flatiron/director/master/build/director.min.js"></script> <style> * {margin:0;padding:0} body {width:100%;height:100%;background:#3d72b8} #baidunews {width:40px;height:40px;background:url("./du.png") no-repeat;display:block;margin:50px;} #tweibo {width:40px;height:40px;background:url("./du.png") no-repeat;display:block;margin:50px;} </style> </head> <body> <a href="#/baidunews" id="baidunews" title="百度新闻"></a> <a href="#/time" id="tweibo" title="当前时间"></a> <script> //定义路由 var route = { "/time":nowtime, "/baidunews":[showframe,getbaidunew] } //初始化路由 var router = Router(route) router.init(); //定义显示当前时间的回调函数 function nowtime(){ var now=new Date(); var y=now.getFullYear(); var m=now.getMonth()+1; var d=now.getDate(); var h=now.getHours(); var mi=now.getMinutes(); var s=now.getSeconds(); alert("现在时间\n"+y+"年"+m+"月"+d+"日 "+h+"时"+mi+"分"+s+"秒"); } //定义显示浏览器框架的函数 function showframe(){ var f=document.createElement("div"); f.style.width="985px"; f.style.height="500px"; f.style.position="absolute"; f.style.top="50px"; f.style.left="200px"; f.style.background="white"; f.style.border="2px solid #ccc"; //关闭按钮 var close=document.createElement("span"); close.style.position="absolute"; close.style.right="5px"; close.style.cursor="pointer"; close.style.marginRight="5px"; close.onclick=function(){ document.body.removeChild(f); } close.innerHTML="X"; //加载站外的iframe var win=document.createElement("iframe"); win.id="myiframe"; win.frameBorder=0; win.style.width="100%"; win.style.height="100%"; f.appendChild(close); f.appendChild(win); document.body.appendChild(f); } //定义加载百度新闻网页的函数 function getbaidunew(){ document.getElementById("myiframe").src="http://news.baidu.com/"; } </script> </body> </html>
從上面的程式碼可以看出,director.js利用頁面中的「#」進行路由轉送。上面的例子只是一個非常簡單的實例,director.js能夠實現更複雜、龐大的功能,它可以透過ajax和服務端資料交互,可以和其它js類別庫並存,是一個web應用開發利器。
director.js對SEO有影響嗎?
客戶端的director.js對SEO有影響,因為資料所有資料只在一個頁面,有些資料的儲存方式不利於搜尋引擎蜘蛛的抓取,如果你需要對SEO友好,說明你需要建構的是一個”web頁面”而不是“web應用”,不建議使用director.js。
參考資料:director.js

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。
