ホームページ >バックエンド開発 >PHPチュートリアル >Web ページ上のすべての画像の長さと幅を最速で取得します。解決
Web ページ上のすべての画像の長さと幅を最速で取得します。
http://pinterest.com をプレイしたことがありますか?登録後、Web サイトの URL を送信して [画像の検索] を押すと、送信した Web ページ上のすべての画像が検索され、プロセス全体に通常 10 時間がかかります。数秒くらい。
最近真似してちょっとした機能部品を作りたいと思っています。邪悪な getimagesize() (48.64 秒かかる) は廃止され、imagecreatefromstring() (それでも 26.13 秒かかる) が使用されており、そのパフォーマンスは約 10 秒です。
TCP 接続の数を考慮し、サーバー リソースを最小限に抑え、実行時間を最小限に抑えます。全能のエビに助けを求めて、コードの最適化を続けるにはどうすればよいでしょうか?より速く走れるようになります。
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> function ranger($url){ $headers = array( "Range: bytes=0-32768" ); $curl = curl_init($url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); return curl_exec($curl); curl_close($curl); }//curl设置 require dirname(__FILE__) . '/simple_html_dom.php'; //采用simple_html_dom.php分析HTML nod $url = 'http://www.huffingtonpost.com/'; $html = file_get_html($url); if($html->find('img')){ foreach($html->find('img') as $element) { $raw = ranger($element->src); $im = @imagecreatefromstring($raw); $width = @imagesx($im); $height = @imagesy($im); if($width>=200||$height>=200){ echo $element;//得出长大于大于200,宽大于等于200的图片 } } }
http://s.huffpost.com/images/v/logos/v4/tagline.gif http://s.huffpost.com/images/v/logos/v4/homepage.gif?v9 http://i.huffpost.com/gen/559399/thumbs/r-OLBERMANN-huge.jpg http://s.huffpost.com/images/facebook_promo_connect.png?3 http://images.huffingtonpost.com/2012-04-04-michaeljfoxmarlo2SECOND.jpg http://images.huffingtonpost.com/2012-04-05-Screenshot20120405at9.40.24AM.jpg http://i.huffpost.com/gen/557914/thumbs/s-SCORSESE-large300.jpg <br><font color="#e78608">------解決策---------</font><br>解決策はクライアントにFeasibleをロードさせることだと思います, <br><br>その後、クライアントは要件を満たす画像情報をサーバーに送信し、サーバーは再度検証して保存します。 。 。 <br><br><br>もう 1 つの 32768 はどうやって入手しましたか? 1-200では足りないのでしょうか? <br><font color="#e78608">------解決策---------</font><br>学びましょう! PHP を使用して画像の URL を取得し、画像のヘッダー情報を直接読み取りますか? <br><font color="#e78608">------解決策------------------</font><br>ピンタレストのピン機能は非常にクリエイティブかつ技術的です。これは、js コードの文字列をブックマークするだけです。このブックマークをクリックすると、現在のページのドキュメントに js ファイルを追加するのと同じになります。この js ファイルの記述方法は非常に簡単です。 document.getElementsByTagName('img') <br><font color="#e78608">------解決策-----</font><br><strong>同時に138枚の写真を消費しますよね? 138 接続</strong><br>はい<br><br><strong>接続数を増やすには php.ini を変更する必要がありますか?</strong><br>いいえ、接続は外部に向けて行われます。変更、相手も変更 <br><br><strong>CPU とメモリのオーバーヘッドはどうですか</strong><br>これはテストするのが簡単ではありません<br><br><strong>と </strong> に関してjs を使用して判断する問題、コードが提供されなかったため、テストできませんでした<br>私が書いた 2 つの解決策は理想的ではなかったので、断念しました <br><br><strong>JS の使用リソース消費の観点から見ると、同時実行と PHP 直接同時実行、どちらも少なくなります</strong><br>リソース消費の観点から見ると、どちらも同じであり、どちらも画像を完全にロードする必要があります<br>ただし、前者ははクライアント側のリソースを消費し、後者はサーバー側のリソースを消費します<br>別のブラウザ メカニズムはよく理解されておらず、本当に同時実行であるかどうかは不明です。 <br><font color="#e78608">------解決策----------------------</font><br>このコードには約 1.8 秒かかります、File_get_html ( $url ) 時間は計算されません <br><br>$res [] = $url ;//$temp;<br>これはネットワーク アドレスです <br><br>ローカル ファイルとして保存されて使用されますgetimagesize サイズ <br><br> は、curl を通じて同時に取得する必要があります。このメカニズムについてはよくわかりません。 <br><font color="#e78608">------解決策---------</font><br>しかし if(in_array($absUrl, $visited ) )Continue; この行はエラーを報告します。警告: in_array() はパラメータ 2 が配列、null であることを想定しています。 <div class="clear"></div>