パイックスとは

Nov 22, 2016 pm 01:46 PM
ajax js pjax

pjax とは何ですか?

現在、多くの Web サイト (Facebook、twitter) がこのような閲覧方法をサポートしています。サイト内のリンクをクリックすると、そのページにジャンプするのではなく、サイト内のページが更新されるだけです。 この種のユーザー エクスペリエンスは、ページ全体をフラッシュするよりもはるかに優れています。

これらの Web サイトの Ajax 更新では、ページを更新すると、ブラウザのアドレス フィールドに戻ることもできます。前のページ。

では、そのような機能を実装したい場合は、どうすればよいでしょうか?

pjax がそのような機能をサポートするスクリプトを提供していることがわかりました。

pjax プロジェクトのアドレスは https://github.com/defunkt/jquery-pjax です。 実際の効果については、 http://pjax.heroku.com/ を参照してください。 pjax がチェックされていない場合、リンクをクリックするとジャンプします。 確認後、リンクは ajax 更新されます。

なぜ pjax を使用するのですか?

pjax にはいくつかの利点があります:

ユーザー エクスペリエンスの向上。ページがジャンプするとき、人間の目はページ全体を再識別する必要があります。ページの一部を更新する場合、再識別する必要があるのは 1 つの領域だけです。私は自分の Web サイトで pjax テクノロジーを使用しているため、ページジャンプしかない他の Web サイトにアクセスする方がはるかに不快だと感じずにはいられません。 同時に、一部のページを更新するときに読み込みプロンプトが表示され、更新時に古いページがブラウザに引​​き続き表示されるため、ユーザーはページの読み込み時間が長くなっても許容できます。

帯域幅の消費とサーバーの消費を大幅に削減します。ページの一部のみが更新されるため、ほとんどのリクエスト (css/js) は再取得されず、ユーザーのログイン情報が含まれる Web サイトの外枠部分を再生成する必要はありません。 この部分の消費量を具体的に計算したことはありませんが、リクエストの少なくとも 40%、サーバー消費量の 30% 以上が節約されたと推定します。

デメリットもあると思います:

IE6 などの歴史的なブラウザのサポートを実際にテストしたことはありませんが、pjax は新しい標準を利用しているため、古いブラウザとの互換性に問題が発生します。 ただし、pjax 自体はフォールバックをサポートしており、ブラウザがこの機能をサポートしていないことが判明した場合は、元のページに戻ります。

複雑なサーバー側のサポート サーバー側では、受信したリクエストに基づいて、ページ全体のレンダリングを実行するか、部分的なページのレンダリングを実行するかを決定する必要があります。 ただし、適切に設計されたサーバー コードの場合、そのような機能のサポートは大きな問題にはなりません。

総合すると、ユーザーエクスペリエンスとリソース利用率の向上により、デメリットは完全に補うことができます。ぜひ皆さんにも使ってみることをお勧めします。

pjax の使い方

公式ドキュメントを見てください。

技術者は直接の技術情報を読む習慣を身につけるべきだと思います。

直接使用できる pjax 用の Rails gem プラグインがあります。 ジャンゴのサポートもあります。

pjax の原理

この問題に対処できるようにするには、pjax がどのように機能するかを理解できる必要があります。 pjax コードには 1 つのファイルしかありません: https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js

能力がある場合は、自分で見てみることができます。 ここでその原理を説明しましょう。

まず、HTML で pjax する必要があるリンク コンテンツと、クリック後に更新する必要がある部分を指定します (data-pjax 属性に入れます):

$('a[data-pjax]').pjax()
ログイン後にコピー

pjax スクリプトがロードされると、リンクされたイベントは、ajax リクエストにラップされてサーバーに送信されます。

$.fn.pjax = function( container, options ) {
  return this.live('click.pjax', function(event){
    handleClick(event, container, options)
  })
}
function handleClick(event, container, options) {
  $.pjax($.extend({}, defaults, options))
  ...
  event.preventDefault()
}
var pjax = $.pjax = function( options ) {
  ...
  pjax.xhr = $.ajax(options)
}
ログイン後にコピー

このリクエストには X-PJAX の HEADER ロゴが含まれています。サーバーはそのようなリクエストを受信すると、ページの一部をレンダリングして返すだけでよいことを認識します。

xhr.setRequestHeader('X-PJAX', 'true')
xhr.setRequestHeader('X-PJAX-Container', context.selector)
ログイン後にコピー

pjax は返されたリクエストを受信した後、data-pjax で指定された領域を更新し、ブラウザのアドレスも更新します。

options.success = function(data, status, xhr) {
  var container = extractContainer(data, xhr, options)
  ...
  if (container.title) document.title = container.title
  context.html(container.contents)
}
ログイン後にコピー

ブラウザの後退をサポートするために、履歴 API を使用して対応する情報を記録します。

pjax.state = {
  id: options.id || uniqueId(),
  url: container.url,
  container: context.selector,
  fragment: options.fragment,
  timeout: options.timeout
}
if (options.push || options.replace) {
  window.history.replaceState(pjax.state, container.title, container.url)
}
ログイン後にコピー

ブラウザが後退すると、イベントをインターセプトし、記録された履歴情報に基づいて新しい ajax リクエストを生成します。

$(window).bind('popstate', function(event){
  var state = event.state
  if (state && state.container) {
    var container = $(state.container)
    if (container.length) {
      ...
      var options = {
        id: state.id,
        url: state.url,
        container: container,
        push: false,
        fragment: state.fragment,
        timeout: state.timeout,
        scrollTo: false
      }
      if (contents) {
        // pjax event is deprecated
        $(document).trigger('pjax', [null, options])
        container.trigger('pjax:start', [null, options])
        // end.pjax event is deprecated
        container.trigger('start.pjax', [null, options])
        container.html(contents)
        pjax.state = state
        container.trigger('pjax:end', [null, options])
        // end.pjax event is deprecated
        container.trigger('end.pjax', [null, options])
      } else {
        $.pjax(options)
      }
      ...
    }
  }
}
ログイン後にコピー

フォールバックをサポートするために、1 つは読み込み時にブラウザが履歴プッシュステート API をサポートしているかどうかを判断することです:

// Is pjax supported by this browser?
$.support.pjax =
  window.history && window.history.pushState && window.history.replaceState
  // pushState isn't reliable on iOS until 5.
  && !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/)
ログイン後にコピー

もう 1 つは、リクエストに対する応答がないことが判明した場合にページに直接ジャンプすることです。期間 (パラメーターのタイムアウトを設定できます)。

options.beforeSend = function(xhr, settings) {
  if (settings.timeout > 0) {
    timeoutTimer = setTimeout(function() {
      if (fire('pjax:timeout', [xhr, options]))
        xhr.abort('timeout')
    }, settings.timeout)
    // Clear timeout setting so jquerys internal timeout isn't invoked
    settings.timeout = 0
ログイン後にコピー

結論

ここまで見たところで、実際に pjax を使ってみませんか? 非常に多くの利点があるため、ほとんどすべての Web サイトで pjax を使用する必要があると思います。 今すぐ使ってください!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

推奨: 優れた JS オープンソースの顔検出および認識プロジェクト 推奨: 優れた JS オープンソースの顔検出および認識プロジェクト Apr 03, 2024 am 11:55 AM

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

jQuery AJAX リクエストで発生した 403 エラーを解決する方法 jQuery AJAX リクエストで発生した 403 エラーを解決する方法 Feb 20, 2024 am 10:07 AM

タイトル: jQuery AJAX リクエストの 403 エラーを解決する方法とコード例。403 エラーは、サーバーがリソースへのアクセスを禁止するリクエストを指します。このエラーは通常、リクエストにアクセス許可がないか、サーバーによって拒否されたために発生します。 jQueryAJAX リクエストを行うときにこのような状況に遭遇することがありますが、この記事ではこの問題の解決方法とコード例を紹介します。解決策: 権限を確認します。まず、要求された URL アドレスが正しいことを確認し、リソースにアクセスするための十分な権限があることを確認します。

jQuery AJAXリクエスト403エラーを解決する方法 jQuery AJAXリクエスト403エラーを解決する方法 Feb 19, 2024 pm 05:55 PM

jQuery は、クライアント側の開発を簡素化するために使用される人気のある JavaScript ライブラリです。 AJAX は、Web ページ全体をリロードせずに、非同期リクエストを送信し、サーバーと対話するテクノロジーです。ただし、jQuery を使用して AJAX リクエストを行うと、403 エラーが発生することがあります。 403 エラーは通常、セキュリティ ポリシーまたは権限の問題が原因で、サーバーによってアクセスが拒否されたエラーです。この記事では、jQueryAJAX リクエストで 403 エラーが発生した場合の解決方法について説明します。

Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Mar 09, 2024 pm 05:36 PM

Ajax を使用して PHP メソッドから変数を取得することは、Web 開発では一般的なシナリオであり、Ajax を使用すると、データを更新せずにページを動的に取得できます。この記事では、Ajax を使用して PHP メソッドから変数を取得する方法と、具体的なコード例を紹介します。まず、Ajax リクエストを処理し、必要な変数を返すための PHP ファイルを作成する必要があります。以下は、単純な PHP ファイル getData.php のサンプル コードです。

jQuery AJAX エラー 403 の問題を解決するにはどうすればよいですか? jQuery AJAX エラー 403 の問題を解決するにはどうすればよいですか? Feb 23, 2024 pm 04:27 PM

jQueryAJAX エラー 403 の問題を解決するにはどうすればよいですか? Web アプリケーションを開発する場合、非同期リクエストを送信するために jQuery がよく使用されます。ただし、jQueryAJAX の使用時に、サーバーによってアクセスが禁止されていることを示すエラー コード 403 が発生する場合があります。これは通常、サーバー側のセキュリティ設定が原因ですが、回避する方法があります。この記事では、jQueryAJAX エラー 403 の問題を解決する方法と具体的なコード例を紹介します。 1.作る

PHP と Ajax: オートコンプリート提案エンジンの構築 PHP と Ajax: オートコンプリート提案エンジンの構築 Jun 02, 2024 pm 08:39 PM

PHP と Ajax を使用してオートコンプリート候補エンジンを構築します。 サーバー側スクリプト: Ajax リクエストを処理し、候補を返します (autocomplete.php)。クライアント スクリプト: Ajax リクエストを送信し、提案を表示します (autocomplete.js)。実際のケース: HTML ページにスクリプトを組み込み、検索入力要素の識別子を指定します。

jsとvueの関係 jsとvueの関係 Mar 11, 2024 pm 05:21 PM

js と vue の関係: 1. Web 開発の基礎としての JS、2. フロントエンド フレームワークとしての Vue.js の台頭、3. JS と Vue の補完関係、4. JS と Vue の実用化ビュー。

PHP と Ajax: 動的に読み込まれるコンテンツを作成するためのソリューション PHP と Ajax: 動的に読み込まれるコンテンツを作成するためのソリューション Jun 06, 2024 pm 01:12 PM

Ajax (非同期 JavaScript および XML) を使用すると、ページをリロードせずに動的コンテンツを追加できます。 PHP と Ajax を使用すると、製品リストを動的にロードできます。HTML はコンテナ要素を含むページを作成し、Ajax リクエストはロード後に要素にデータを追加します。 JavaScript は Ajax を使用して XMLHttpRequest を通じてサーバーにリクエストを送信し、サーバーから JSON 形式で商品データを取得します。 PHP は MySQL を使用してデータベースから製品データをクエリし、それを JSON 形式にエンコードします。 JavaScript は JSON データを解析し、ページ コンテナーに表示します。ボタンをクリックすると、製品リストをロードするための Ajax リクエストがトリガーされます。

See all articles