相信不少人對ajax並不陌生,對ajax的一些優勢也瞭如指掌,如:局部刷新改善用戶體驗,減小開銷,讓服務器和瀏覽器之間的響應更快等。javascript
可是它的缺點也是很顯而易見的:html
然而如今部分網站(http://plus.google.com,http://www.github.com/) 都支持這樣的一種瀏覽方式:當你點擊一個站內的連接的時候, 不是作頁面跳轉, 而是隻是站內頁面刷新。 這樣的用戶體驗, 比起整個頁面都閃一下來講, 好不少。 其中有一個很重要的組成部分, 這些網站的ajax刷新是支持瀏覽器歷史的, 刷新頁面的同時, 瀏覽器地址欄位上面的地址也是會更改, 用瀏覽器的回退功能也可以回退到上一個頁面。 那麼若是咱們想要實現這樣的功能, 咱們如何作呢? html5
在HTML5以前的版本,DOM中的window對象經過window.history方法提供了對瀏覽器歷史記錄的讀取,讓你能夠在用戶的訪問記錄中前進和後退。java
從HTML5開始,咱們能夠開始操做這個歷史記錄堆棧。HTML5的history提供了兩個新特性pushState和replaceState經過這兩個方法咱們能夠對history實體進行添加和修改,從而能夠在不刷新頁面的前提下添加和修改history以實現瀏覽器的前進和後退。jquery
pjax即pushState+ajax,頁面之間的點擊是經過ajax異步請求的,同時對於整個頁面來講URL地址卻發生了變化,然而頁面卻並無刷新,而且能夠支持瀏覽器的前進和後退。git
關於pjax的用法能夠參考https://github.com/defunkt/jquery-pjax上的說明,我這裏寫了一個簡單地例子,能夠看到使用pjax和不使用pjax瀏覽器地址和請求數的變化。github
這裏寫了幾個關於<a>導航的請求。ajax
下面是首頁:瀏覽器
當使用pjax時,它的連接和請求以下:服務器
不使用pjax時,它的連接和請求以下:
咱們能夠看到,雖然地址是同樣的,可是pjax的請求數明顯少於常規方法。
固然,關於html5的新特性,只能在支持html5的瀏覽器中使用,在不支持html5的瀏覽器中,仍是會使用常規的方法。