0

現在のコードでは、非常に非効率的で混乱を招き、パフォーマンスが不足しているように見えます。

MySQL Querying または PHP を改善して、このコードをより簡単にし、[あちこち] を減らすことができます。

[iDに従って]データベースから情報を取得して表示するという、現在達成しようとしているものを置き換えるより良い方法はありますか。私の質問は、主に foreach に基づいています。

Posts table
+---------------+
|Post_iD        |
|message        |
|uid_fk         |
|tagged_people  |
|_iP            |
|created        |
|uploads        |
+---------------+

->load_messages.php -->

<?php
    $lastid = "";
if ($lastid == '')
    $lastid = 0;

if ( $_iD ) {
    $updatesarray = $Wall->Updates($_iD, $lastid);
    $total        = $Wall->Total_Updates($_iD);
} else {
    $updatesarray = $Wall->Friends_Updates($_iD, $lastid);
    $total        = $Wall->Total_Friends_Updates($_iD);
}

if ($updatesarray) {
    foreach ($updatesarray as $data) {
        $post_iD     = $data['post_iD'];
        $orimessage = $data['message'];
        $message    = tolink(htmlcode($data['message']));
        $time       = $data['created'];
        $mtime      = date("g:i", $time);
        $_iUsername   = $data['_iUsername'];
        $uploads    = $data['uploads'];
        $msg_uid    = $data['uid_fk'];
?>  
    <ul class="_Om" id="stbody<?php echo $post_iD;?>">
        <li>
            <div class="_VC">
                <div class="stimg">
                    <img src="<?php echo $Profile_Pic;?>" class='picture' alt='<?php echo $_iUsername;?>'/>
                </div>      
                <div class="">
                    <b class="timeago">
                        <?php echo $_iUsername;?>&nbsp;&nbsp;&middot;&nbsp;
                            <a href='<?php echo $base_url ?>status/<?php echo $post_iD; ?>'title='<?php echo $time;?>' class="timeposted">
                                    <?php echo $mtime;?>
                            </a>
                    </b> 
                </div> 
                <div class="body_text">
                    <?php echo clear($message);?>
                </div>
                <?php
                    if ($uploads) {
                        echo "<div style='margin-top:10px'>";
                        $s = explode(",", $uploads);
                        foreach ($s as $a) {
                            $newdata = $Wall->Get_Upload_Image_Id($a);
                            if ($newdata)
                                echo "<a href='uploads/" . $newdata['image_path'] . "' rel='facebox'><img src='uploads/" . $newdata['image_path'] . "' class='imgpreview' /></a>";
                        }
                        echo "</div>";
                    }
                ?>

                <div class="stexpandbox">
                    <div class="stexpand<?php echo $post_iD;?>">
                        <?php
                            if (textlink($orimessage)) {
                            $link = textlink($orimessage);
                            echo Expand_URL($link); 
                            }
                        ?>     
                    </div>
                </div>
                <?php if ($_iD == $msg_uid) { ?>
                    <a class="stdelete" href="#" id="<?php echo $post_iD;?>" title="Delete Update"></a>
                <?php } ?>
            </div>      
        </li>
    </ul>
<?php } if ($total > $perpage) { ?>
        <div id="more<?php echo $post_iD;?>" class="morebox">
            <a href="#" class="more" id="<?php echo $post_iD;?>">More</a>
        </div>
<?php } } else echo '<h3 id="noupdates">No Updates!</h3>';?> 

データベース クエリ(Updates,Total_Updates,Friends_Updates,Total_Friends_Updates)

http://pastie.org/private/j66vwnsfyk1fai7zlnrrg
4

1 に答える 1

2

私の考えを述べさせてください。

とても非効率です

ゼロから再コーディングすると、作成した設計上の欠陥が見つかることを願っています。おそらくあなたは止めることができます:

 $post_iD     = $data['post_iD'];

私が見る限り、これは同じループにあるので、代わりに連想配列を使用してください。

紛らわしい

MVC アーキテクチャ パターンを使用してみて、コードにコメントを追加してください。ただし、MVC は大いに役立つはずであり、関数は非常に長い道のりを歩むことができます。

そしてその:

        <?php if ($_iD == $msg_uid) { ?>
                <a class="stdelete" href="#" id="<?php echo $post_iD;?>" title="Delete Update"></a>
        <?php } ?>

そのアンカーは削除用ですか、それとも削除用ではありませんか? 一部のテキストが欠落しているように見えるためです。それをスタイルするCSSがこの同じページの上部にない限り? あなたがやっていることは、私の観点からは css を埋め込むことと同じです。おもう

<?php

   if ($_iD == $msg_uid) { 

      echo '<a class="stdelete" href="#" id="'.$post_iD.'" title="Delete Update">Delete</a>';

   }

?>

ほとんどのプログラマーにとってはるかに読みやすいです。

パフォーマンス不足

事前にシステムを計画し、必要なものだけを選択するより優れたクエリを作成し、それが失敗した場合は、投稿の重要性を判断します。カップルを失っても世界の終わりじゃないなら。NoSQL データベースを確認してください。しかし、提出されたコードからは、MySQL ではなく、パフォーマンス不足の責任者になります。

于 2013-06-19T02:46:57.353 に答える