web-dev-qa-db-ja.com

リクエストごとにすべてのオプションがメモリにロードされますか?

すべてのオプション変数はデータベースから取得され、リクエストごとにキャッシュにロードされますか?

25
rsman

はい、そうです。 get_option 呼び出しが行われると、WordPressはwp_load_alloptionsという名前の関数を実行します。これは、すべての自動ロードオプションのキャッシュコピーを取得するか、それらのオプションをすべてキャッシュにロードします。それからwp_load_alloptionsはすべての自動ロードオプションの配列を返します。オプションがオートロードされている場合( add_option 関数を使用するときに指定される)、それはこの配列の一部となり返されます。

あなたのオプションが自動ロードされていない場合、WordPressはキャッシュ内でそのオプションを探し、存在する場合は値を返します。それが失敗した場合、最後のフォールバックはデータベースに行き、値を取得し、それをキャッシュに設定してからそれを返すことです。

最後に、オプションがまったく見つからない場合(たとえば、オプション名が無効だった場合)、WordPressはそのオプションの名前をnotoptionsというキャッシュされた配列に格納します。後続の非オプションの呼び出しが行われた場合、WPが最初にnotoptions配列をチェックするので、そこにないものをチェックするための時間を無駄にすることはありません。

ページロードごとにget_optionを複数回呼び出すことが心配な場合は、しないでください。 WordPressは、最初のget_option呼び出しの後に、その自動ロードの有無にかかわらず、オプション値をキャッシュします。

何が起こっているのかを見るために get_option のソースをチェックしてください。

24
chrisguitarguy

いいえ、

autoloadをtrueに設定して特別に読み込まれたオプションのみ

http://codex.wordpress.org/Function_Reference/add_option を参照してください。

そのため、すべてのページで必要なオプションである場合は、データベースに追加するときにautoload = trueを設定してください。

その後は普通にget_optionを使ってください - wpはキャッシュなどを処理します。

3
anmari

はい、

自動ロードをyes/trueに設定する必要はありません。デフォルトではyesに設定されています: http://codex.wordpress.org/Function_Reference/add_option - 最後の関数パラメータ($ autoload):

このオプションは、wp_load_alloptions()関数によって自動的にロードされるべきですか(ページがロードされるたびにオプションをオブジェクトキャッシュに入れます)。有効な値は、yesまたはnoです。デフォルト:yes

ただし、noに設定した場合、オプションはキャッシュに入れられません。

0
Toni Petrov