Ajaxコールバックの最速のメソッド/実装は何ですか?


18

さまざまな/多数のマップイベントで、ajaxを介してマーカーをロードするマップがあります。現在、hook_menu()json / jsを印刷するアイテムのカスタムページコールバックを定義しています。

私のページコールバックコンテンツを返さず、コンテンツのみを印刷するため、Drupalは完全なテンプレート、メニューなどをレンダリングしないため、JavaScript のみでページを返すことができます。

これは機能しますが、Drupalはまだ完全にブートストラップされていると思います。つまり、ドロップしたいオーバーヘッドがかなり増えています。

私が見てきた高性能のJavaScriptのコールバックハンドラ「高性能JavaScriptのコールバックハンドラ」としての地位を誇り、これは、短期的にそれが提供していますかのように、ルックスjs.php賛辞にindex.phpにあなたの要求を指示すると、カスタマイズ/リミット/ Drupalがデフォルトで行うブートストラップを最適化します。

残念ながら、jsプロジェクトにはまだD7のリリースがありません(ここに1つの請願書があります)。

DrupalでAjaxコールバックを実装する最速の方法は何ですか?

回答:


8

hook_menu()json / jsを印刷するアイテムのカスタムページコールバックを定義します。

それがDrupal 6が提供したものです。Drupalの7 AJAXフレームワークでは、もう少しそれよりも行うことができます。はい、Drupalをブートストラップしますが、無料で多くの機能を提供します。要するに、ページ配信方法としてajax_deliver()を使用し、ブラウザにコマンドを送信できます。

... Ajaxは、ボタンとリンクにクラスを追加することで有効にできます。「use-ajax」クラスをリンクに追加すると、リンクはAjax呼び出しを介してロードされます。この方法を使用する場合、リンクのhrefにパスの一部として「/ nojs /」を含めることができます。Ajaxフレームワークがリクエストを作成すると、これを「/ ajax /」に変換します。サーバーは、このリクエストが実際のAjaxリクエストを介して行われたか、劣化した状態であるかを簡単に判断し、適切に対応することができます。

ただし、パフォーマンス上の理由でフレームワークを回避したい場合は、モジュール内のphpファイルをjavascriptから直接呼び出すのを止めることはできません。Drupalの利点は得られませんが、ページを完全に制御することもできます。


ありがとう!かかわらず、私は本当にAJAXページ要求プロセスは、おそらく、そのコンテキスト内で発生します:)への改善C / B(今、私はそれについて知っていること)のAjaxフレームワークを使用する必要があり、パフォーマンスの
electblake

2
サンプルモジュールをご覧ください。多くの場合に役立ちます。フレームワークはフォーム向けですが、どこでも使用できます。「use-ajax」クラスについて少し答えを編集しました。
ジェレミーフランス語

3
PHPファイルを直接呼び出すこともできます。そのファイルにbootstrap.incを含めてから、api.drupal.org / api / drupal / includes--bootstrap.inc / function /…を必要な特定のレベルまで呼び出すこともできます。
グレグル

4

少し遅れますが、特にそのajaxコールバックをポーリングに使用している場合(たとえば、新しいメッセージをチェックする)、興味深い代替手段があります:Drupal node.js integration

ポーリングする代わりに、ユーザー(ページ上のJS)がnode.jsサーバーへのオープン接続を維持するイベントのようなシステムを構築できます。何かが発生した場合、node.jsを介してすべてのユーザーに直接通知できます。


素晴らしい提案に遅すぎることはありません-この種のことのためにnode.jsを使用することを考えたことはありませんが、突然、理にかなっています。
electblake

3

DrupalでAjaxコールバックを実装したいので、JSモジュールを使用するのは良い方法のように見えます。私はコードをざっと見てみましたが、基本的には私が提案したものです(ただし、詳細にもっと注意を払っています)。メンテナーもトップのDrupal開発者の一人です。

あなたが使用する必要がありますように見えますmodule_load_include()おそらくより手動またはinclude 'sites/all/modules/contrib/...';あなたが他のモジュールからのAPIを使用する必要がある場合のアプローチを。

あなたが話しているまさにその問題は最近話題になっています。DrupalCon ChicagoのDriesの基調講演では、コールバックと非HTML出力形式を行うためにDrupal 8がより良いAPIを必要とする方法について説明しました。


要するに、JS.phpとdo / project / jsの調査を続けますか?D7リリースの問題queで請願を開始します。ビデオをありがとう!
-electblake

うん、JSプロジェクトがD7にまだ移植されていないのは本当に残念です。残念ながら、軽量のページリクエストを取得するのは非常に困難です。
マットコリンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.