web-dev-qa-db-ja.com

is_paged()のような関数を複数回使用するのではなく、変数に代入することは意味がありますか?

実際には簡単な質問ですが、関数の結果に変数を代入すると、サイトの速度を上げるのに役立つことを確認する必要があります。

関数:if is_paged(){ $paged = 1; }

置換え:if $paged == "1" .. then do - 何度も何度も同じ機能を使っている人

W3トータルキャッシュはたぶんそれをキャッシュするでしょう、しかし時々ユーザーはキャッシュされていないページをヒットします、そして私はそれがウェブサイトの速度を上げることができると思います、私の仮定は正しいですか?

1
mashup

したがって、すべての クエリ条件is_pagedis_singularなど)は、次のようになります。

function is_paged() {
    global $wp_query;

    if ( ! isset( $wp_query ) ) {
        _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1' );
        return false;
    }

    return $wp_query->is_paged();
}

$wp_queryをグローバル化して、WP_Queryオブジェクトの対応するメソッドを呼び出します。この場合:

<?php
function is_paged() {
    return (bool) $this->is_paged;
}

あなたが被る唯一のデータベースヒットはWP_Queryオブジェクトが作成された時からで、それはとにかく起こります。

関数を呼び出すとコストがかかるため、if文を使用するとコストがかかります。今日のハードウェアにかかるこれらのコストは、本当に心配するものではありません。

とは言っても、同じ関数を使ってたくさんの条件付きチェックをしているのであれば、おそらくプログラムの制御フローを評価するほうがよいでしょう。

このようなもの:

<?php
if(is_paged() && 1 == get_query_var('some_query_var'))
{
   // do stuff
}
else if(is_paged() && 2 == get_query_var('some_query_var'))
{
   // do other stuff
}

になる可能性があります:

<?php
if(is_paged())
{
   switch(get_query_var('some_query_var'))
   {
      case 1:
          // do stuff
          break;
      case 2:
          // do stuff
          break;
      default:
          // do stuff
          break;
    }
}

最後のアドバイスとして、もし私があなたがそれらを何度も必要とするならば、私は同じ関数の中で条件付き(あるいは他の関数呼び出し)の結果を "キャッシュ"するが本当にそれがメソッドからメソッドへと持続する必要があります。

これは、恐らく上の私のアドバイスに従わないという恐ろしい例です。

<?php
function wpse65916_stuff()
{
    $paged = is_paged();

    if($paged)
    {
        // do stuff because paged
    }

    if($paged && /* some other condition */)
    {
        // do stuff
    }
}
2
chrisguitarguy

いいえ.

クエリ条件はWordPressのオブジェクトキャッシュの一部であり、呼び出されたときに追加のリソースは発生しません。

1
Chip Bennett