CG
(@du-bist-der-lenz)
「600万件のpostデータのインデックス」に時間がかかるのでしょう。軽量化したサイトと比較して、サーバースペックを検討する必要にあるのでしょう。
ご返信ありがとうございます。
ログイン状態ではindex.phpを表示するとサーバー応答時間がほぼ1~7秒以内なのですが、ログアウトして表示すると20~110秒ほど応答に時間がかかります。その後ログインして再び表示すると1~7秒ほどになります。さらにログアウトすると20~110秒ほどかかります。「chrome」「IE」で試しましたが結果は同じです。
おそらく未ログイン時には600万件のポストデータを検索しているクエリが存在すると思われるのですが、「Debug_bar」はログイン状態でないと表示できないので改善すべきクエリが分かりません。><
それともログイン状態の場合のみ何かキャッシュされるデータを参照しているため早いのでしょうか?
ちなみにindex.phpで600万件のpostを検索しないようにWP_Queryを「wp_posts.ID=1」と書き換えています。これで劇的に早くなり、上記のような結果になりました。
書き換え前は「ログイン時:10~20秒」「未ログイン時:30秒から~120秒」ほどでした。
ログイン状態での速度は問題がない(速度に問題があるのは未ログイン時のindex.phpページのみ)ので現状のサーバーでなにか改善できる方法を模索中です。
ちなみに5万件に減らしたテストサイトではクエリを改造しなくても「PageSpeed Insights 」で「good」評価になります。
もし心当たりがございましたらよろしくお願いいたします。
CG
(@du-bist-der-lenz)
5万件に減らしたテストサイトでは、不満がない。のですから、改造不用かインデックスしているプログラムの合理化を進めるのが良いでしょう。また、アクセス時のサーバーの動作に余裕が有るのか精査した方がいい。カテゴリでサイトを分散させれば、同時アクセスが増えてもサーバーの仕事量も軽減できるのではないでしょうか。
自分のサイトhttp:URL.jp/wp-admin/でwordpressのダッシュボードにログインできなくなりました。
英語でこんな表示がされるようになりました。
Fatal error: Can’t use function return value in write context自分のURL in /.jp/public_html/wordpress/wp-content/plugins/akismet/class.akismet-admin.php on line 1060
対策方法を教えてください。宜しくお願いします。
CG
(@du-bist-der-lenz)
プラグインが関数の戻り値が空かどうかチェックしていてエラーを見つけたのではないですか。
こんにちは
@shincan
このトピックと同じ現象でないのなら、新しくトピックを立てていただけますでしょうか。
このトピックが進行できなくなってしまいます。
CGさん
ご提案ありがとうございます。
サーバーを増強すれば改善はされると思われるのですが
現状index.php(またはfront-page.php)以外は速度に問題がないためプログラムでの解決を目指しています。
index.php以外は「PageSpeed Insights」でほぼ「medium」か「good」の評価になります。
これはテーマ作成のために使用しているサンプルデータ5万件の未改造テストサイトと同等レベルの速度です。なお、現在アクセスに余裕はあります。
サーバー応答速度に問題があるのは「wordpressにログインしていない状態」でトップページ(index.phpまたはfront-page.php)にアクセスしたときのみです。
「wordpressにログインした状態」でトップページにアクセスしたときは上記のような速度で問題はありません。
ログイン時に速度が速い理由はプラグイン「Debug_Bar」で遅い処理を洗い出して不要なクエリなどを削除または改造したためです。しかし未ログイン時は「Debug_Bar」を表示できないためどこを直せばいいのかわかりません。(処理が遅いため、wordpressのタグやタクソノミーなどは一切使用していません。)
ピンポイントですが、
「wordpressにログインしていない状態」で
「トップページ(index.phpまたはfront-page.php)」の
「サーバー応答速度」
を改善できる方法がありましたら関連サイトなどでもよいのでご教授頂けると幸いです。
よろしくお願いいたします。
□トピック作成前に行った改善方法
・postテーブルはパーテーションで分割しました。(検索ページ用)
・index.php(front-page.php)はデータ量を減らした軽量postテーブルのデータを表示させています。(トップページ用)
・WP_Queyが600万件走査しないようにクエリを改造しました。(トップページ用)
・remove_action()で必要ないアクションを削除しました。(投稿ページ用)
・各種圧縮しました。(全ページ用)
・キャッシュを使用しています。(全ページ用)
shincanさん
トピックが違うので新しく立ててもらえませんでしょうか?
ちなみに
Fatal error: Can’t use function return value in write context自分のURL in /.jp/public_html/wordpress/wp-content/plugins/akismet/class.akismet-admin.php on line 1060
は「class.akismet-admin.php」の1060行目でisset()やempty()に関数の戻り値を直接渡してしまっている場合に出るエラーです。empty()の場合はphpのバージョンを5.5以上にすると解決します。isset()の場合は戻り値を変数に置き換える必要があります。
下記サイトなどを参考にしてください。
(参考:https://gotohayato.com/content/56)
単にダッシュボードに入るだけでしたら該当プラグイン(akismet)を削除すれば入れるようになります。
こんにちは
以下のCODEXベージにある、SAVEQUERIESを試してみてください。
http://wpdocs.osdn.jp/WordPressでのデバッグ#SAVEQUERIES
データベースで実行されているSQLクエリが全て出力できます。
ログインしている/していないかの状態で実行されているSQLクエリを比較し、非ログイン時にのみ実行されているものや、非ログイン時にのみ非常に遅い物を特定し、WordPressのどのクエリでそれが実行されているかを類推することができます。
そのWordPressのクエリを回避できれば速くなる可能性があります。
munyaguさん
ご返信ご回答ありがとうございます。^^
SAVEQUERIES「define( ‘SAVEQUERIES’, true );」を使用して
全発行SQLクエリを確認してみたところ、未ログイン時だけ
————————————————–
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = ‘post’ AND (wp_posts.post_status = ‘publish’) LIMIT 0, 10
————————————————–
というSQLクエリ(WQ_Query)が発行されていることがわかりました。この処理がほぼすべての応答時間を費やしていました。
ログイン時は
————————————————–
SELECT wp_2_posts.ID FROM wp_2_posts WHERE wp_2_posts.ID=1
————————————————–
と変更して処理を軽くしている部分です。(wp_2_postsは投稿数が数件のテーブルです。)
WP_Queryを変更しているところ(function.php)を確認したところ
————————————————–
function my_posts_request_filter( $sql ) {
is_home(){
str_replace(オリジナルsqlクエリ,新sqlクエリ,$sql)
}
}
————————————————–
と$wp_queryを使用してトップサイトかチェックするis_home()を使用していることがわかりました。
これを削除したことでログオフ時でもログイン時とほぼ同等のサーバー応答時間になりました。
まだ、「pagespeed insights」でスマホサイトは「Low」となるため改善が必要ですが、体感速度としてはそこそこまでになりました。
ご教授本当にありがとうございました。
現在はスマホサイトとPCサイトで評価に大きく違いがあるため(「pagespeed insights」で30点と60点)そちらを検証中です。
また、行き詰まりましたらご質問させていただきたいと思います。
みなさまありがとうおございました。