做过后端开发,尤其是使用过类似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桌面应用,桌面上有很多小图标,每一个小图标是一个功能应用,类似电脑桌面。桌面上有一个百度新闻的按钮,点击它在当前页面弹出一个窗口,能够查看百度新闻,另外一个图标,点击可以查看当前时间,下面是一个简单的示例:

* {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;}

//定义路由

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.οnclick=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/";

}

从上面的代码可以看出,director.js利用页面中的“#”进行路由转发。上面的例子只是一个非常简单的实例,director.js能够实现更加复杂、庞大的功能,它可以通过ajax和服务端数据交互,可以和其它js类库并存,是一个web应用开发利器。

director.js对SEO有影响吗?

客户端的director.js对SEO有影响,因为数据所有数据只在一个页面,有些数据的存储方式不利于搜索引擎蜘蛛的抓取,如果你需要对SEO友好,说明你需要构造的是一个”web页面”而不是“web应用”,不推荐使用director.js。

js路由在php上面使用,director.js实现前端路由使用实例相关推荐

  1. director.js教程

    directive.js 初始化和注册路由 director.js 的主要对象是Router对象,构造方法如下: var router = new Router(routes); //routes为路 ...

  2. javascript基础修炼——前端路由的基本原理

    前端路由,顾名思义就是一个前端不同页面的状态管理器,可以不向后台发送请求而直接通过前端技术实现多个页面的效果. [造轮子]是笔者学习和理解一些较复杂的代码结构时的常用方法,它很慢,但是效果却胜过你读十 ...

  3. Vue学习杂记(八)——SPA模式和前端路由

    SPA模式和前端路由 一.SPA模式介绍 二.前端路由工作原理 三.配置前端路由 三.路由的其他使用方式 四.动态路由与参数说明 五.导航卫士 一.SPA模式介绍     SPA(single pag ...

  4. SPA 中前端路由基本原理与实现方式

    SPA 前端路由原理与实现方式 通常 SPA 中前端路由有2中实现方式,本文会简单快速总结这两种方法及其实现: 修改 url 中 Hash 利用 H5 中的 history Hash 我们都知道 ur ...

  5. 将Vue项目部署在Nginx,解决前端路由、反向代理和静态资源问题

    将Vue项目部署在Nginx,解决前端路由.反向代理和静态资源问题 需求: 一台服务器,Linux 安装了Nginx 使用Vue脚手架编写的Vue项目 第一步:将Vue项目打包,然后将生成的dist文 ...

  6. 前端路由工作原理与使用

    单页应用和多页应用 单页面应用:所有功能在一个页面上实现 一个.html 文件 前端路由 组件化开发 网易云音乐 小米移动端 多页应用:与单页应用相对应的,不同的功能通过不同的页面来实现 单页面 - ...

  7. 【Web技术】943- 对前端路由的一些理解

    来自:掘金,作者:尼克陈 链接:https://juejin.cn/post/6917523941435113486 一篇文章,不可能做的面面俱到,全部受众.希望大家带着发散思维去看文章,将文章涉及的 ...

  8. 【Web技术】913- 谈谈你对前端路由的理解

    来自:掘金 作者:尼克陈 链接:https://juejin.cn/post/6917523941435113486 一篇文章,不可能做的面面俱到,全部受众.希望大家带着发散思维去看文章,将文章涉及的 ...

  9. 前端路由(一) 路由,hash,history

    从vue-router回溯相关原理和知识点 前端路由(二)hash实现路由示例 什么是路由 路由是URL解析对应的函数的映射 从用户的角度看: 记录当前页面状态,例如保存当前页的url再次打开url时 ...

最新文章

  1. 贾珈:自然语言处理中9个不可不知的研究热点(附视频)
  2. c 语言重载参数类型不同重载和,C++基础学习之函数重载的简单介绍
  3. 20145105 《Java程序设计》第5周学习总结
  4. printf函数输出详解
  5. 5、jeecg 笔记之 minidao 条件判断
  6. LeetCode 2090. 半径为 k 的子数组平均值(滑窗)
  7. fatal error C1083: Cannot open include file: 'qttreepropertybrowser.moc': No such file or directory
  8. OSChina 周一乱弹 —— 最无法理解的程序员行为
  9. bootstrap 快速入门
  10. 基于vivoY97的Adb驱动程序的安装
  11. [经验教程]2022网线水晶头插座接头排线接线顺序与方法图解
  12. 泰勒公式的计算机应用,泰勒公式应用
  13. 鸿蒙系统怎么在桌面添加小程序,从微信小程序到鸿蒙JS开发-menutoastdialog
  14. iOS开发 关于YY_Model中,modelContainerPropertyGenericClass解析数组出现崩溃问题
  15. php 逻辑思维题,倘若3分钟内,你能答对这道智力题,说明你的逻辑思维能力很强...
  16. ajaxtoolkit
  17. 银联在线支付接入总结
  18. 数据校验JSR303快速入门(简单使用、分组效验、自定义注解效验)
  19. 2021年数学建模B题分析--乙醇偶合制备乙烯
  20. DouPHP模块化企业网站管理系统源码

热门文章

  1. VS Code 1.18版本更新内容整理(2017年10月 October 2017)
  2. 九度OJ 1435:迷瘴
  3. C++重载IO操作符
  4. 156万在校大学生!中国高校第一城诞生
  5. 你尝试登录的服务器语言不通,七骑士国内服务器正式上线后,各种登录问题解决方案汇总...
  6. 神经网络训练3次就准确率不变_1组高效徒手训练,6个动作每周3-5次,帮你在家高效率燃脂增肌!...
  7. 面试官最常问的垃圾回收器CMS
  8. 聊聊redo log是什么?
  9. 一次Maven依赖冲突采坑,把依赖调解、类加载彻底整明白了
  10. 程序员利用网吧挖矿,获利上亿元~!