1

このコードは機能しますが、理由は不明ですが、私の Web サイトは 1 秒で読み込まれ、この php が追加されると 24 秒かかります。私はまだそれがなぜそんなに遅くなったのかを調べようとしています.コードの行数が多いほど遅くなることがわかりますが、これは24秒であり、スクリプトが機能していてもこれを修正しようとしています.サーバーに確認しましたが、技術的な問題はありません。このコードが追加されたときです。したがって、これが発生する理由を修正し、このコードを高速化する必要があります。

<?
class shareCount
{
    private $url, $timeout;
    function __construct($url, $timeout = 10)
    {
        $this->url     = rawurlencode($url);
        $this->timeout = $timeout;
    }

    function get_tweets()
    {
        $json_string = $this->file_get_contents_curl('http://urls.api.twitter.com/1/urls/count.json?url=' . $this->url);
        $json        = json_decode($json_string, true);
        return isset($json['count']) ? intval($json['count']) : 0;
    }

    function get_fb()
    {
        $json_string = $this->file_get_contents_curl('http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=' . $this->url);
        $json        = json_decode($json_string, true);
        return isset($json[0]['total_count']) ? intval($json[0]['total_count']) : 0;
    }

    function get_plusones()
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, "https://clients6.google.com/rpc");
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . rawurldecode($this->url) . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Content-type: application/json'
        ));
        $curl_results = curl_exec($curl);
        curl_close($curl);
        $json = json_decode($curl_results, true);
        return isset($json[0]['result']['metadata']['globalCounts']['count']) ? intval($json[0]['result']['metadata']['globalCounts']['count']) : 0;
    }

    private function file_get_contents_curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
        $cont = curl_exec($ch);
        if (curl_error($ch)) {
            die(curl_error($ch));
        }
        return $cont;
    }
}
?>

<div class="entry-share-buttons">
    <div class="share share_size_large share_type_facebook"><span class="share__count"><?php echo $obj->get_fb(); ?></span><a class="share__btn" href="http://www.facebook.com/sharer/sharer.php?u=<?php the_permalink()?>" data-url="<?php the_permalink()?>" data-text="<?php the_title() ?>" target="_blank">Like</a></div>
    <div class="share share_size_large share_type_twitter"><span class="share__count"><?php echo $obj->get_tweets(); ?></span><a class="share__btn" href="http://www.twitter.com/intent/tweet?url=<?php the_permalink()?>" data-url="<?php the_permalink()?>" data-text="<?php the_title() ?>" target="_blank">Tweet</a></div>
    <div class="share share_size_large share_type_email"><span class="share__count"><?php echo $obj->get_plusones(); ?></span><a class="share__btn" href="http://plus.google.com/share?url=<?php the_permalink()?>" data-url="<?php the_permalink()?>" data-text="<?php the_title() ?>" target="_blank">Email</a></div>
    <div class="share share_size_large share_type_comment"><span class="share__count"><?php comments_popup_link( __( '0' ), __( '1' ), __( '%' ) ); ?></span><a class="share__btn" href="#">Comment</a></div>
</div>
4

3 に答える 3

1

最近、この同じ問題に遭遇しました。このページには、FB や Twitter からいいね/シェア数のデータをダウンロードするためのリンクが多数あり、ページの速度が大幅に低下しました。

この問題を解決するために私が見つけた最良の方法は、データベース内にテーブルを作成することでした(更新できるフラットファイルxml / jsonとして保存したい場合は、それも機能します)、更新する必要がある情報のパラメーター(url /url)。

サービスとして、またはトリガーを設定して必要な更新量を設定できるスケジュールされたタスクとして実行する別のアプリケーションを作成します。

本当に簡単です。基本的には、クライアントの負荷を取り除き、サーバーに置きます。

于 2014-11-13T15:43:32.823 に答える
0

これは、他の Web サイトに多数の接続を確立し、そこからデータを取得しているためです。これを単純化する方法はあまりありません。

于 2014-08-05T19:01:21.377 に答える
0

問題は、Twitter、Facebook、Google への外部からのリクエストが非常に遅いことにあります。それについてあなたができることは何もありません。

できることは、いいね、シェア、+ の量をキャッシュすることです。次の訪問者が、Twitter、Facebook、Google の遅い API を待つ必要がないようにします。

于 2014-08-05T19:00:53.010 に答える