Ajaxは、本来あるべき/できる限り10倍かかります


50

私はWordPressで最初の深刻な問題に直面したばかりで、Ajaxを楽しんでいる人にとってはこれは大きなことです。

Ajax APIの使用中に完了するのに1.5秒かかるAjaxリクエストがあります。

同じ正確なコードを取得し、カスタムスクリプト(WordPressなし)で実行すると、Ajaxリクエストには150ミリ秒しかかかりません。これは誇張ではありません

http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/の最初のコメントとそれに続く会話を見ると、この遅延が引き起こされていることがわかります。あなたの要求に応じて、すべてのWPがロードされるという事実によって...

WordPressのすべてをロードせずにAjaxリクエストを行うことができる解決策があることを期待しています。

WordPressでAjaxリクエストを高速化した経験は何ですか?


3
人気のあるキャッシングプラグインがこの状況をカバーしているかどうかは疑問です。
ラファエル

@Raphael、私もそれについて考えましたが、それについての言及は見ていません。彼らがそうする場合、それは素晴らしいでしょう
マイク

回答:


57

うん、これは厄介な問題であり、完全なWordPress環境を使用するには、ロードにかなりの時間を費やす必要があります。

私は仕事のためにはるかに優れたパフォーマンスが必要でした(非常に動的なインクリメンタル検索機能のため)。

  1. Ajaxハンドラーとしてのカスタムファイル。
  2. WPコアの負荷を制限するためのSHORTINIT定数
  3. コアの非常に選択的にロードされた部分、タスクに必要な部分のみ。

これは非常に限られた環境を提供しますが、パフォーマンスはかなり良い方法であり、WP(から始まる$wpdb)との合理的な互換性の程度は保持されます。

きれいではありませんが、特定のニーズに合ったローダーファイルを開始します。

<?php

ini_set('html_errors', 0);
define('SHORTINIT', true);

require '../../../../wp-load.php';
require( ABSPATH . WPINC . '/formatting.php' );
require( ABSPATH . WPINC . '/meta.php' );
require( ABSPATH . WPINC . '/post.php' );
wp_plugin_directory_constants();

// stuff goes here

1
SHORTINIT定数とはどういう意味ですか?例を提供できますか?リクエストの必要に応じて、さまざまな程度のWPをロードして独自のハンドラーをセットアップする必要があると思いますが、作成した例をいくつか見たいと思います。
マイク

6
それは概念に広く知られているが、実際には単純ではない@マイク- 場合はSHORTINIT定数が設定されている WPは、ほとんどのコアの(無テーマ、ノープラグイン、APIは/機能のない最も)をロードしないでしょう。答えるコードを追加します。
最悪の

1
それは大丈夫だ。require '../../../../wp-load.php'を使用しなければならないという事実が好きではありません。これはかなりカスタムになります。また、WordPressはモジュール化されていないため、「必要な」リソースを実際に簡単に取り込むことができるか心配です。
マイク

@Mikeは正しいですが、問題がある場合でも、WPについてまったく手がかりがないエンドポイントよりもはるかに優れています。これは、さらに改善することができます(そして改善すべきです)が、現時点では私にとって緊急のタスクではありません。
最悪の

WordPress内からwp-load.phpの場所を検出する方法はありますか?たとえば、プラグインのロード時にパスを変数として設定した静的ファイルを作成し、そのファイルをスタンドアロンのAjax応答ファイルに含めることはできますか?
hereswhatidid

0

これを見つけて、ajaxを高速化しました。

function my_deregister_heartbeat() {
    global $pagenow;

    if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) {
         wp_deregister_script('heartbeat');
         wp_register_script('heartbeat', false);
     }
}
add_action( 'admin_enqueue_scripts', 'my_deregister_heartbeat' );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.