###発生している問題
Simple HTML DOM Parserを使った場合と使わなかった場合で処理速度が大きく変わっているところまでは判明したのですが、原因が判明しておりません。
ただ処理自体が重いというわけではなく処理後のレスポンスが遅いという状況です。
###該当のソースコード
PHP
1$ch = curl_init(); 2curl_setopt($ch, CURLOPT_URL, $url); 3curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 4curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 5curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 6curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); 7curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 8curl_setopt($ch, CURLOPT_POST, TRUE); 9curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 10curl_setopt($ch, CURLOPT_HEADER, TRUE); 11curl_setopt($ch, CURLOPT_TIMEOUT, 30); 12$html = curl_exec($ch) or die('error ' . curl_error($ch)); 13curl_close($ch); 14 15error_log("a"); 16 17$dom = new simple_html_dom(); 18$dom->load($html); // これを使うと重くなる 19 20error_log("b"); 21 22$ret = $dom->find('*****', 0); 23 24error_log("c"); 25 26return !empty($ret);
###試したこと
- 処理前後にerror_logを仕込んで処理速度の確認(a,b,c,が表示された後もしばらくレスが返ってこない
- php.iniのメモリ上限変更、文字コードをutf-8に変更
- 文字列長は2万前後
###補足情報(言語/FW/ツール等のバージョンなど)
OS CentOS Linux release 7.2.1511
Apache/2.4.6
Phalcon (2.0.14)
PHP 5.6.26
MYSQL 5.5.50-MariaDB
どうぞよろしくお願いします。
#追記
返信ありがとうございます!
結果は以下になりました。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 6520952 868 409280 0 0 4 1 25 51 0 0 100 0 0 0 0 0 6520828 868 409280 0 0 0 0 58 115 1 0 100 0 0 0 0 0 6520828 868 409280 0 0 0 0 39 87 0 0 100 0 0 0 0 0 6520828 868 409280 0 0 0 0 35 83 0 0 100 0 0 0 0 0 6520828 868 409280 0 0 0 0 51 102 0 0 100 0 0 0 0 0 6520828 868 409672 0 0 0 0 154 247 1 0 99 0 0 // 通信開始 0 0 0 6520828 868 409680 0 0 0 4 141 217 1 1 99 0 0 0 0 0 6520828 868 409680 0 0 0 0 77 155 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 72 82 157 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 76 140 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 66 126 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 78 156 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 74 136 0 1 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 63 128 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 62 128 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 66 126 1 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 70 135 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 76 145 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 65 132 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 69 134 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 69 130 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 72 146 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 63 128 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 62 123 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 68 133 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 63 126 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 61 117 1 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 51 102 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 47 99 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 41 85 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 36 81 0 0 100 0 0 0 0 0 6520828 868 409680 0 0 0 0 53 111 0 0 100 0 0 // 通信終了
処理の始動は携帯端末からリクエストを飛ばしてローディングの表示を行いレスポンスがあればローディングの表示を消す、という流れになっています。
この回答でずれていないでしょうか?大丈夫でしょうか?
unset($dom)も効果ありませんでした。
回答2件
あなたの回答
tips
プレビュー