• 解決済 LVP8

    (@lvp8)


    お世話になっています。

    ログイン時とそうでない時とのページ生成時間が大幅に異なるので、その原因を探っています。状況は下記の通りです。

    該当ページ
    カスタム投稿タイプのアーカイブページ(example.com/custom)
    *register_post_type() の has_archive を true にしたものです。

    当該投稿タイプの記事数
    40,000件程度

    ページ生成時間
    ログイン時:0.6秒前後、非ログイン時:1.5秒前後

    プラグインを全て無効にし、ユーザー判別が必要な関数なども削除して試しましたが、結果は同じで、「1秒」もの開きが出てしまいます。

    また、この投稿タイプで利用しているタクソノミのアーカイブページ(記事数それぞれ数百から数千件)では大きな違いはありません。

    何か見落としていたり試していないこともあると思うので、「あれはやった?」とか「こうしてみては?」など、些細なことでも結構ですので、考えられる要因をアドバイスいただければと思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    LVP8さん、こんにちは。

    私であれば、まずデータベースへのクエリーを検証してみます。
    MySQL側でスロークエリ、またはWordPress側でクエリーのログを記録するようにしてみて、時間がかかっているクエリーがないか探ってみます。
    ログインしているときとしていないときで、かかっている時間に差があるクエリーがあれば、そのクエリーの内容を確認し、改善策(クエリーの書き換えやINDEXの追加など)を検討します。

    トピック投稿者 LVP8

    (@lvp8)

    jim912さん アドバイスありがとうございます。

    post_date(秒まで)の全く同じ投稿が、一日あたり20~30づつ、しかも4年半に渡り続いている、という状態のものでした。order orderby(共にデフォルトのまま) の処理で引っかかっていたのだと思います。

    同じ post_date の中で、ログイン時は投稿IDの小さい順に、非ログイン時は投稿IDの大きい順にソートされていて、前者のほうが処理が早かった?わけです。

    $wp_query の [request] を見ると、ログイン時に post_status = ‘private’ が加わっているだけなのですが、こういう違いが出るものなのでしょうか…。

    結局、pre_get_posts のフックで ‘orderby’ を ‘ID’ に変えたところ、非ログイン時との差がなくなりました。

    jim912さん、ヒントをいただきましてありがとうございまます。助かりました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「ログイン時とそうでない時のページ生成速度の違い」には新たに返信することはできません。