9

WordPress API へのリクエストをより高速にしたいと考えています。私の API はプラグインに実装されています (register_rest_route を使用してルートを登録します)。ただし、これはプラグインであるため、すべてがプラグインとともにロードされ (子テーマとテーマ)、基本的に、この API へのクエリは、ロードされたすべての役に立たない部分のために 0.5 秒かかります。

WordPress API を別の方法で使用することはできませんか? WP-API を使用するほとんどのプラグインは、他のプラグインをロードする必要がないため、テーマはさらに少なくなります...どうやってそれを見逃すのかわかりません。

とにかくこれを行うことはありますか?

4

4 に答える 4

12

はい、可能です。最小限の WordPress コア (プラグインとテーマのない DB) が必要なプラグインの 1 つでは、次のようにします。

<?php

define('SHORTINIT', true);  // load minimal WordPress

require_once PATH_TO_WORDPRESS . '/wp-load.php'; // WordPress loader

// use $wpdb here, no plugins or themes were loaded

私が作ったPATH_TO_WORDPRESS定数。それを正しいパスに向けるだけです。たとえばプラグインでは、次のようになります。

require_once dirname(__FILE__) . '/../../../wp-load.php'; // backwards 'plugin-dir/plugins/wp-content'

に設定SHORTINITするとtrue、パフォーマンスが少し向上します。

無効にWP_DEBUGした場合、WordPress のブートストラップにかかる時間は次のとおりです。

  • SHORTINIT なし: ~0.045 秒
  • SHORTINIT の場合: ~0.0015 秒

これがパフォーマンスを必要とする独自のサイト用である場合は、OpCache (たとえば、最近のバージョンの APC または PHP OpCache) を有効にすることで、おそらくこれを少し増やすことができます。

SHORTINITしかし、定義して要求する上記の 2 行のコードwp-load.phpは、あなたが探しているものだと思います。

明確にするために、このファイルはプラグインの一部ですが、WordPress 自体とは独立して (Ajax 経由で直接) 呼び出されます。プラグインまたは WP 自体の他の部分に含まれたり、使用されたりすることはありません。

編集: OPは実際にはWordPressではなくWP-APIに関係しているため、実際の質問に対処するためにこれを追加しています。他の誰かを助けることができる場合に備えて、元の回答内容を残します。

私はWP APIでさらにテストを行いました.@Davidが彼の答えで言ったように、問題はおそらく別のものです.

残りのAPI、いくつかのかなり「大きな」プラグインに加えて、12個のプラグインをロードしました。ローカルインストールには約25個のテーマがインストールされています(もちろん1つはアクティブです)。WordPress のindex.phpファイルを編集microtime(true)して、すべての開始時刻を記録し、REST コントローラーの 1 つを編集して、開始から API エンドポイントに到達するまでの時間を計算しました。

私のシステムでの結果は一貫して約0.0462-0.0513秒です (PHP OpCache はなく、他のシステム負荷もありません)。そのため、WordPress のすべてをブートストラップしても、パフォーマンスにはほとんど影響がないようです。

リクエストに 0.5 秒かかっている場合、ボトルネックは別の場所にあり、プラグインとテーマを除外しても影響は最小限に抑えられます。少なくともこれは私が見つけたものです。

于 2016-04-04T00:45:41.183 に答える
1

これを試してみてください 。投稿タイプ、ページ、その他の状況で特定のプラグインを有効/無効にすることができるプラグインです。

テーマの部分については、書いておけば API リクエストの際にフックやフィルターを付けないように function.php に何か追加するのは簡単です。

補足として、de DB に直接クエリを実行できませんでしたか?

于 2016-04-03T23:47:17.143 に答える