1. 程式人生 > >pjax 和 ajax 的區別

pjax 和 ajax 的區別

pjax 是一個 jQuery 外掛,它通過 ajax 和 pushState 技術提供了極速的(無重新整理 ajax 載入)瀏覽體驗,並且保持了真實的地址、網頁標題,瀏覽器的後退(前進)按鈕也可以正常使用。
pjax 的工作原理是通過 ajax 從伺服器端獲取 HTML,在頁面中用獲取到的 HTML 替換指定容器元素中的內容。然後使用 pushState 技術更新瀏覽器位址列中的當前地址。以下兩點原因決定了 pjax 會有更快的瀏覽體驗:

  • 不存在頁面資源(js/css)的重複載入和應用;
  • 如果伺服器端配置了 pjax,它可以只渲染頁面區域性內容,從而避免伺服器渲染完整佈局的額外開銷。

從官網的這段描述中可看出 pjax 的核心其實還是 ajax,所以如果是 ajax 去做這種區域性 html 重新整理的話需要寫更多的程式碼,而 pjax 已經做的很好了。

pjax 的使用方法:使用 pjax 一般需要後臺配合,比如 java 後端可以寫個過濾器過濾當前請求,如果包含 X-PJAX 請求頭 (說明是 pjax 請求) 那麼只需要返回區域性 html 程式碼,剩下的交給前端 pjax 外掛渲染就好,如果不包含則返回完整 html 程式碼(包含頭尾的 html 程式碼,不包含 X-PJAX 說明是普通請求)

使用 pjax 的好處:由於搜尋引擎的蜘蛛不會執行 javascript,所以如果你的頁面是 ajax 方式載入將不會被引擎收錄,比如:

<nav id="tab">
  <a href="javascript:void(0);">簡介</a> <a href="javascript:void(0);">動態</a> <a href="javascript:void(0);">禮包</a> <a href="javascript:void(0);">開服</a> <a href="javascript:void(0);">攻略</a> </nav> <div id="con"></div> <script> $("#tab a").click(function(){ //發起ajax請求 $.ajax({ url:"./introduction.html",//注意:這裡實際情況應該是根據點選的不同a標籤載入不同頁面 success: function(html){ //將請求回來的內容新增到下面的內容div $("#con").append(html); } }); }); </script> 

除了主頁會被收錄,簡介、動態、禮包…這幾個頁面將不會被收錄,因為引擎蜘蛛爬取主頁時會順著 a 標籤的 href 爬取另一個頁面,而不會執行 javascript。
如果使用 pjax,就可以解決這種問題(注意:這裡為了使程式碼直觀提供的是 ajax 的解決程式碼,並未使用 pjax,解決思路一樣,使用 pjax 可以使程式碼更簡化),頁面可以這樣修改:

<nav id="tab">
  <a href="./introduction.html">簡介</a> <a href="./dynamic.html">動態</a> <a href="./gift.html">禮包</a> <a href="./service.html">開服</a> <a href="./strategy.html">攻略</a> </nav> <div id="con"></div> <script> $("#tab a").click(function(){ //發起ajax請求 $.ajax({ url: "./introduction.html",//注意:這裡實際情況應該是根據點選的不同a標籤載入不同頁面 data: {key: 'ajax'}//注意:這是必須的引數標識 success: function(html){ //將請求回來的內容新增到下面的內容div $("#con").html(html); } }); return false; // 阻止 A 連結跳轉 }); </script> 

後臺程式碼可以這樣處理,php 為例:

$isAjax = $_GET["key"];
$con = include 'con.php';
if($isAjax == "ajax"){ echo $con; }else{ $head = include 'head.php'; $foot = include 'head.php'; echo $head + $con + $foot; } 

如果請求中的引數 key 的值是“ajax” 則只輸出部分內容,否則則輸出包含頭部底部等完整內容。

參考:pjax 中文文件ajax 如何做到 SEO 友好

轉載自:http://meia.fun/article/1540982577311