富运用中 URL 治理以及 Javascript 测试

URL 存在的意义在于运用者可以运用一段字符串就可以找到对应的资本。富运用中的内容转变都是经由过程 Javascript 去转变文档内容,某种角度上来讲全部网站实在只须要一个 URL。假如真的运用同一个URL的话,用户就没法疾速的经由过程特定字符串进入他想到到达资本。就像搜刮引擎的表单都是 GET 而不是 POST,你可以把你搜刮结果的链接发给你的朋侪,然后他们也可以看到雷同的内容。因而必需许可 URL 变化。

URL 变化却不会让网页重新载入只要两种要领。一个是运用锚链接,即 http://url/#path 的体式格局完成。另一种就是须要浏览器支撑的 history.pushState ,后者 github 有运用,Pajax 计划也是运用了这类要领。由因而写的初版,现在只完成了锚链接的完成。

相干代码传送门:https://github.com/HaiyiYun/VintJS/blob/master/src/location.js

因为 URL 转变后浏览器没有触发新的要求,就意味着你须要经由过程 Javascript 去晓得 URL 发生了变化。HTML5 的范例中同时划定了onhashchange 的要领,老式的浏览器和 IE 的 documentMode 下面都不支撑,因而就须要运用 setInterval 要领来不停的读取当前 url ,假如 url 发生了变化就要触发响应的事宜。之前的事宜模子在这里又派上了用处。直接 this.trigger(‘urlChange’) 便完成了这里的事情,而不须要去斟酌路由的代码或许其他地方的代码。

此时还须要的事情就是去剖析新的 URL ,先猎取当前的相对地点,然后去剖析。详细参考 __checkUrl 的源码。分红当前的 path ,这个会影响当前运用的路由,另有就是 search 的对象。这一块的代码是在阅读了 Angularjs 的基础上完成的,同时也引用了 Angularjs 的 hash_prefix 设置。谷歌开辟文档中有提到 Ajax Url 的划定规矩,传送门:https://developers.google.com/webmasters/ajax-crawling/docs/getting-started?hl=zh-CN ,#! 的划定规矩是比较友爱的做法,所以预留了这个设置。

完成剖析事情后要做的就是去试着转变 URL。直接转变 URL,个中还包含 location.herf = ‘xxx’ 和 location.replace(‘xxx’) 两种体式格局的区分。一种会在浏览器的历史记录内里留下陈迹,一种不会。然后须要转变 path ,转变 search 的对应的要领,另有就是猎取当前 url 、 path 、 search 的要领。

这些都完成以后, URL 相干的功用基本上就告一段落。接下来要做的就是路由,将当前的 path 剖析至对应的路由上面去并去衬着页面。

华美丽的分隔符后最先说说 javascript 的测试。

做顺序的人大多相识测试。写完一个函数后就去测试一下,看看写出来的代码是不是是可以到达本身预期的目的。浏览器的 javascript 除了要考证函数的输入是不是掩盖周全、结果是不是即是预期,还须要防备本身的代码在一些特定的浏览器上面存在bug。传统的测试要领就是在完成后手动去触发事宜,然后手动输入来检测是不是获得预期的结果。在打仗详细的测试框架前,我本身的做法常常是在代码内里写一些测试的代码,然后输出检测是不是和预期雷同。这类的题目就是假如须要磨练多种浏览器的话,事情比较累坠。

引入了测试框架后事情简朴了许多。比方 Qunit,jasmine, 我现在用的是 jasmine ,传送门:http://pivotal.github.io/jasmine/ 。写完一个要领,然后写一些简朴的测试用例,在所有浏览器上面许可就可以晓得结果。而无需本身去手动触发或许是写代码输出然后去对比。

前篇传送门:

给本身挖个坑,最先去开辟javascript富运用框架

从 BackboneJS 的源码最先说事宜模子

    原文作者:丁文森
    原文地址: https://segmentfault.com/a/1190000000316755
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞