1

Twitter API 1.1 に基づいたアプリケーションを作成しています。ユーザー定義の Twitter プロフィール画像が取り込まれてアプリに表示され、クリックすると特定のアカウントの最新のツイートが表示されます。現在、このプロセスはクリックで開始され、AJAX と「for each」ループを使用して、別の php ページに含まれる正しいツイートを見つけて表示します。

このプロセスは正常に機能しますが、ユーザーがプロフィール画像をクリックすると、アプリが必要なツイートを読み込むのに非常に時間がかかります。ツイートの読み込みプロセスを最適化する方法についてアドバイスが必要ですか? クリックに依存する必要はないかもしれませんが、コードを最適化する方法がわかりません。

どんな助けでも大歓迎です。

理解を助けるコードは次のとおりです。

特定のプロフィール画像に応じて最新のツイートを開始するコード:

// Create all Tweeter objects
foreach ($tweeters as $i => $tweeter){
$tweeters[$i] = new Tweeter($tweeter, $tmhOAuth);
}

// Display all Tweeters
foreach ($tweeters as $tweeter){
$r+=1;
echo '<a class="fancybox fancybox.ajax" href="tweets.php #' . $r . '">';
echo '<img class="tweetTime' . $r . '" id="' . $r . '" src="' . $tweeter->getImage() . '" width="240px" height="240px" /></a>';
}

別のページでツイートを取得するコード:

require_once('config/FrameFunctions.php');

foreach ($tweeters as $i => $tweeter){
$tweeters[$i] = new Tweeter($tweeter, $tmhOAuth);
}

foreach ($tweeters as $tweeter){
$r+=1;
echo '<div id="' . $r . '"><p>Latest tweet from <b>' . $tweeter->getName() . '</b>:<br />';

foreach ($tweeter->getTweets() as $tweet){
    echo $tweet['text'] . '<br />';
    echo "Sent: <b>" . $tweet['created_at'] . "</b></p></div>";
 }
}
4

1 に答える 1

1

ツイートの取得をユーザーのクリックから分離する必要があります。AJAX を JQuery ajax() 呼び出しセットに移動して、間隔を置いて実行します。非表示の要素を追加して最新のツイートを保持し、AJAX 呼び出しの結果でそれを更新します。また、fancybox で AJAX 呼び出しを行うのではなく、非表示の要素のコンテンツを使用するように fancybox 呼び出しを変更します。

メイン HTML:

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
            <script src="scripts/jquery.fancybox.js"></script>
            <link rel="stylesheet" type="text/css" href="scripts/jquery.fancybox.css?v=2.1.4" media="screen" />
        </head>
        <body>

            <script type="text/javascript">
            $(document).ready(function() {

                         $('.fancybox').fancybox();
                /*
                 *  call ajax function and update latest
                 */     

                            var refreshTweets = function() {
                              console.log("updating..");
                              $.ajax({url:"updatetweets.php",success:function(result){
                                tweets = eval(result);
                                for(i=0;i<tweets.length;i++){
                                    $("#latesttweet"+(i+1)).html(tweets[i]);      
                                }

                              }});
                            }
                            //set the time in milliseconds here for each refresh
                            setInterval(refreshTweets , 30000); //Interval


                    });  
            </script>
    <?php

    //Setting up objects, you won't need this part
    $tweeters = array("one", "two", "three");
    $tmhOAuth = 0;
    $r =0;

    Class Tweeter{
        function __construct(){
            return array("bob", "sue", "derek");
        }

        function getImage(){
            return "images/turpin.gif";
        }
    }
    //end set up objects


     // Create all Tweeter objects
    foreach ($tweeters as $i => $tweeter){
        $tweeters[$i] = new Tweeter($tweeter, $tmhOAuth);
        }

        // Display all Tweeters
        foreach ($tweeters as $tweeter){
        $r+=1;
        echo '<a class="fancybox" href="#latesttweet' . $r . '">';
        echo '<img class="tweetTime' . $r . '" id="' . $r . '" src="' . $tweeter->getImage() . '" width="240px" height="240px" /></a>';
        echo '<span id="latesttweet'. $r .'" style="display: none;">Tweet text will go here</span>';
    }

    ?>

    </body>
    </html>

ツイートコードを更新 (Ajax php):

    <?php
    //Setting up objects, ignore this part
    $tweeters = array("bob", "sue", "derek");
    $tmhOAuth = 0;
    $r =0;

    Class Tweeter{
        private $thetweeter;

        function __construct($tweeter){
            $this->theTweeter =  $tweeter;
        }    

        function getTweet(){
            return $this->theTweeter  . "'s tweet at ". date('H:i:s') ;
        }
    }
    //end set up


    foreach ($tweeters as $i => $tweeter){
        $theTweeter = new Tweeter($tweeter, $tmhOAuth);
        $tweeters[$i] = $theTweeter->getTweet();
    }

    header("Content-type: application/json");
    echo json_encode($tweeters);
    ?>
于 2013-02-08T23:18:18.550 に答える