2

新しいテーマを作成し、その記事にリンクする複数のオブジェクトを含む記事ビューを作成する最も効率的な方法は何ですか? 私は C# のプロですが、PHP については、私が望むほど精通していません。あなたが持っていると仮定します:

while(have_posts())
    <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
    <a href="<?php the_permalink(); ?>"><?php the_thumbnail(); ?></a>
    <a href="<?php the_permalink(); ?>">read more</a>

ご覧のとおり、関数への呼び出しが少なくとも 3 回あります。the_permalink();

関数を 3 回呼び出した方が速いですか、それとも 1 回呼び出して変数に保存し、必要なだけループ内でその変数をスローした方が速いですか?

4

3 に答える 3

5

これを行うと CPU の負荷は少なくなりますが、最適化が時期尚早の場合です。特にこの呼び出しはデータベースにアクセスする必要がないため、得られるメリットはそれほど大きくありません。PHP で最も時間がかかるのはコードのコンパイルであるという事実を考慮に入れると、ベンチマークで何らかの利点が見られた場合、私は驚かれることでしょう。

get_permalink() 関数 (wp-includes/link-template.php 内) を掘り下げると、このメソッドは、WP の初期化時に一度読み込まれるオプション ストアのみを参照することに注意してください。

サイトをスピードアップしようとしている場合、その方法の 99% はデータベース呼び出しを削減することです。私はあなたの努力をそこに集中させます:)

于 2013-08-09T14:35:56.053 に答える
3

興味があったので、次のコードを試してみました。

ob_start();
$bench = microtime(true);
for ($i = 0; $i < 1000; ++$i) {
    the_permalink();
    the_permalink();
    the_permalink();
}
$bench2 = microtime(true);
ob_end_clean();
echo ($bench2 - $bench) . '<br>';
ob_start();
$bench = microtime(true);
for ($i = 0; $i < 1000; ++$i) {
    $permalink = get_permalink();
    echo $permalink;
    echo $permalink;
    echo $permalink;
}
$bench2 = microtime(true);
ob_end_clean();
echo ($bench2 - $bench) . '<br>';

そして、次の結果を得ました:

the_permalink(): 1.891793012619
Storing in a variable and echoing: 0.62593913078308

そのため、呼び出しが多数ある場合、変数に格納してエコーする方が大幅に高速ですが、呼び出しが 3 回だけの場合、パフォーマンスの向上は 1,000 分の 1 秒を少し超える程度にとどまります。

一部のフィルターは、the_permalink() を呼び出すたびに呼び出されることに注意してください (例: the_permalink、post_link など)。そのため、変数に格納することによる速度の向上は、それらのフィルターにフックがいくつあり、フィルターが何をするかによって異なります。

于 2013-08-09T14:50:52.850 に答える
2

例ごとに3回連続して呼び出すよりも、変数に格納する方がバックエンド処理がはるかに少なくなります。the_permalink() はパーマリンクをエコーするため、変数に格納するには get_permalink() を使用する必要があります。

<?php
while(have_posts()) {
    $permalink = get_permalink();
?>
<h4><a href="<?php echo $permalink; ?>"><?php the_title(); ?></a></h4>
<a href="<?php echo $permalink; ?>"><?php the_thumbnail(); ?></a>
<a href="<?php echo $permalink; ?>">read more</a>
于 2013-08-09T14:27:55.123 に答える