PJAX和html5 history api

什么是PJAX PJAX其实是一组技术的简称,即HTML5的pushState+ajax,实现的效果是无刷新的改变页面某个部分的内容(ajax),同时地址栏URL又能随之改变(HTML5 push State) 访问github的时候当查看某个文件的源码的时候发现其实整个页面没有刷新而URL改变了其实也是用到了PJAX,还有如网易云音乐等 为什么会产生PJAX 为了更好的用户体验,URL能改变同时页面又能局部刷新,即所谓的单页面应用single page application 为了能让ajax被搜索引擎抓取,有利于SEO 如何实现PJAX 其实就是利用html5的history api和普通的ajax实现了 history api Window. ...

nodejs的流stream

buffer和stream 说道stream就不能不涉及到buffer,提到这2个东西首先得说一个都熟悉的场景-在线听歌或者在线看电影 在线看电影的时候,当你的网络带宽不足看高清视频或者突然下降到视频播放的比特率以下时,可能碰到缓冲中30%,50%最后100%的 况,其实buffer缓冲区是为了流的消费者的体验服务的,比如当一首歌的音频流需要256kbps的速度播放,而你的带宽只有200kbps时,流可能会在开始播放之前30秒就预加载并放入缓冲区,然后你就一边听直到最后流下载完了你也听完了,缓冲区能提前加载你还没听到的部分,也有可能保存你听过的部分,这样你可以点击任意时间处可以从那个进度开始播放。说完这些,应该知道了流最大的好处就是你可以一边下载一边使用,看电影的时候不用下完了才看,可以边下边看 下载完电影再看就是同步的感觉,一边下载一边看就是一种异步的味道,仔细品位,facebook的bigpipe其实不也是利用了这样的一种思路去解决前端性能优化的问题吗。 ...

js单元测试断言框架chaijs

chai是一套TDD(测试驱动开发)/BDD(行为驱动开发)的断言框架 他包含有3个断言库支持BDD风格的expect/should和TDD风格的assert,这里主要说明expect/should库,BDD风格说简单的就是你的测试代码更加的语义化,让你的断言可读性更好,expect/should库都支持链式调用,有如下的链式API,多部分都是英文的介词和be动词,可以用来做谓语 to be been is that and has have with at ...

js单元测试sinonjs库

单元测试的意义 提高测试效率 提升代码质量 能够及时重构代码,减少依赖项 更好的理解需求和业务逻辑,因为每一个测试可能对应一个测试用例 好的测试代码可读性强,新人也能很好的通过测试代码了解到需求,减少维护成本 sinonjs就是这样一套面向js的单元测试辅助库 当我们需要测试的某个方法中,需要去某个接口发送http请求获得数据,如果你真实的发送某个请求,那么当有一天你请求的这个服务器挂掉的时候,你的单元测试就怎么也跑不过了,其实我们要测试的时候我们这个方法针对数据库的其他处理逻辑,我们并不是真的关心这个接口是否存在(甚至是否实现),那我们需要模拟一个这样的接口来返回假的数据,sinonjs就是为了解决这个问题的 { setUp: function () { sinon.spy(jQuery, ...

DigitalOcean上搭建ghost个人博客

DigitalOcean的上创建droplet 首先在DigitalOcean(以下简称为DO)上注册帐号,并创建一个Droplet 选择服务器机房 虽说现在有了新加坡机房,但是PING非常高和卡,还不如旧金山机房 选择镜像,有可以用的linux分发版和某些应用程序镜像(即装好某些应用程序的操作系统) 在域名提供商那里配置DO的域名服务器,这样你的域名就知道去哪里解析对应的地址 在DO的管理面板选择DNS,配置你的droplet的ip和你域名的绑定 添加一条A记录设置绑定,同时设置一条CNAME记录作为别名来使得2级域名www.shaynegui.com也能访问,test为我测试添加的2级域名test.shayengui.comSSH连到刚创建的droplet,帐号和密码会通过你注册的邮箱发送邮件给你 安装nodejs环境 ##下载nodejs源码 ...