teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3243閲覧

wordpressで記事一覧を一括取得する際に取得を早くさせる方法を知りたい

tomato01

総合スコア82

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/02/25 14:38

0

0

Wordpressの投稿データに対して、REST API経由で全件(300件程度)を取得をしているのですが(json形式)、取得が終わるまでに5秒程度タイムラグが発生してしまいます。

jsで使用しているコードの取得部分

$.getJSON("https://サイト名/wp-json/wp/v2/posts?per_page=500", function(json){ for (var i = 0; i <= json.length-1; i++) { ...

尚、条件検索があるページは同一のドメイン内となります。カスタムフィールドも使用しておりフィールド数は30ぐらいです。
投稿データをjson形式で取得したい理由は、Ajaxの検索機能を実装する予定な為です。

知りたいこと
・現状では$.getJSONでデータを取得しているのですが、記事の取得を早くする為にwordpress側で投稿記事からjson形式に変換する為の他のやり方などはありますでしょうか。
・WP_Queryで一覧を取得した際に、そのデータをjsonデータに変換する方法などはありますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

・現状では$.getJSONでデータを取得しているのですが、記事の取得を早くする為にwordpress側で投稿記事からjson形式に変換する為の他のやり方などはありますでしょうか。
・WP_Queryで一覧を取得した際に、そのデータをjsonデータに変換する方法などはありますでしょうか。

と書かれていますが、データベースから取り出したデータをJSON 形式に変換する部分が遅いと確定しているのでしょうか?

WordPress の JSON の作成は、wp_json_encode という関数が使われますが、中身はは、PHP の関数 json_encode を 使っています。

置き換えるのであれば、この関数に相当する関数を自作することになると思いますが、自作したところで早くなるとは思えません。

個人的な経験則からするとMySQL からの取り出しが遅いことが多いです。


遅いというのは、いろいろな原因があると思いますので、どこがボトルネックになっているかを調べるところからはじめる必要があります。

まずは、Web ブラウザのデベロッパーツールでどの部分が遅いのかを調べる。

サーバーからのレスポンスが遅いのであれば、サーバーのアクセス状況やメモリ状況を調べる。
アクセスが多くて待ちが発生しているのであれば、サーバーのスペックの見直しも必要かもしれません。

MySQL でログを取得する設定にして、スロークエリがあるかを調べる必要もあるかもしれません。

WordPress の発行している SQL を調べて、最適化できないかを検討することも必要でしょう。


WordPress が、実行するSQL を調べる方法は、SAVEQUERIES をキーワードにして検索してみてください。

例:
WordPressが発行したSQLの履歴を確認する方法
【WordPress】WordPressが実行しているSQLを見たい

投稿2020/02/26 00:44

CHERRY

総合スコア25234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomato01

2020/02/26 12:02

とても詳しいご回答を頂きありがとうございます。 ご指摘の点についてはgetJSONでurlを指定して取得をする取得方法だと、普通より遅さが発生するのではと個人的に考えだけで、深い処理の部分まで考えた発言ではないです。すみません。 getJSONではなく、例えばfunction.phpに予め処理内容を書いておけば取得スピードが上がるのではと個人的にかんがえました。 なのでMySQLの取り出しまで考えておりませんでしたのでとても勉強になりました。 教えて頂いた点を調べてみようと思いますが、現状で普通のレンタルサーバー で運用しているのでサーバー自体を検討する必要がある旨も理解しました。 ありがとうございます。
CHERRY

2020/02/27 06:31 編集

レンタルサーバーであれば、データベースの設定は変更できないと思いますので、速度アップ対策としては、WordPress が実行する SQL をチューニングする方向になると思います。 簡単に流れを書くと... まず、回答に書いたリンク先の方法等で、WordPress がどのようなSQLを実行しているかを調べください。 つぎに、調べた SQL を phpMyAdmin 等のデータベース接続ツールから EXPLAIN を使って、SQL の実行計画を調べてください。(EXPLAINは、 https://dev.mysql.com/doc/refman/5.6/ja/explain-output.html を 参照) SQL の実行計画を見ることで、SQL のどの部分で時間がかかっているのか特定できます。 関係する SQL をすべて確認して、一番処理時間のかかる SQL を特定します。 つぎは、時間のかかる SQL を早くするためにどのような SQL にすればよいかを考えます。 特に WordPress の SQL の場合は、入力と出力の結果を変えないようにする必要があり、WordPress 側が組み立てる SQL を大枠を変更できないので、[ WP_Query フィルター フック ]( https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7#WP_Query_.E3.83.95.E3.82.A3.E3.83.AB.E3.82.BF.E3.83.BC ) 等を使って、検索条件を追加したり、SQL文の一部を置き換えたりして、速度アップするようにSQL を調整します。
tomato01

2020/03/03 09:14

詳しいご回答をいただきありがとうございます! phpMyAdmin で EXPLAIN は試してみようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問