web-dev-qa-db-ja.com

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

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

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

これは機能しますが、Drupalはまだ完全にブートストラップしていると考えています。これは、ドロップしたいオーバーヘッドが大幅に増えることを意味します。

私は 高性能JavaScriptコールバックハンドラー を見てきました。これは、「高性能JavaScriptコールバックハンドラー」としての地位を誇り、要するにjs.phpお世辞にindex.phpリクエストを送信し、ブートストラップをカスタマイズ/制限/最適化するにはDrupalがデフォルトで行います。

残念なことに js プロジェクトにはまだD7リリースがありません( ここでの請願 )。これは私たちを最初に導きます...

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

17
electblake

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

Drupal 6が提供するものです。 Drupal 7 AJAX framework はそれよりも少し多くのことができます。はい、Drupalをブートストラップします。簡単に言えば ajax_deliver() をページ配信メソッドとして使用し、コマンドをブラウザーに送信できます。

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

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

8
Jeremy French

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

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

4
Berdir

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

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

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

3
Adam DiCarlo