1

ajax を使用してコンテンツの読み込みを最適化するためのアイデアを聞きたいです。次に、それを行ういくつかの方法を提案し、それぞれについて自分の考えを考え出します。

  • html を直接ロードする -これにより、追加の計算をあまり必要とせずにコンテンツを簡単にロードできます。ユーザー操作の影響を受けないコンテンツや、定期的に更新が必要な部分があるコンテンツに適しています
  • サーバーから json オブジェクトを取得する -ページのコンテンツを json オブジェクトに含める良い方法のようです。現在の値を新しいオブジェクトと比較することにより、一部の部分のみを変更できます
  • パーツ (チャンク) ごとのロード -更新するのが最も難しい方法に思えるかもしれません。どの部分が変更され、どこにロードするかを知る必要があります (変更/更新する必要があるノードへの特定の dom アクセス)。また、計算上の観点からは、json オブジェクトを取得して「手動で」タグを作成したり、データをロードするテンプレートを作成したりするよりも簡単に実行できるようです。

では、それぞれのアプローチについてどう思いますか?新しいアプローチを気軽に提案してください!

4

2 に答える 2

1

内容を3部に分類します。

  1. HTML、dbキャッシュおよびajaxではありません
  2. dbはキャッシュされ、ajaxではありません(コンテンツの変更サイクルは定期的です)
  3. キャッシュされたdbとajax(高いdb操作時間)

ページが遅い場合は、それを分析して2または3に変更します。ajaxコンテンツの読み込みを使用する前に、ページのアクセス速度とデータベースの読み込みを分析する必要があります。

dbキャッシュの場合、関数と引数を渡します。

$c1 = db_cache("main_top_naver_cache", 300, "naver_popular('naver_popular', 4)");
db_cache - php function(my own)
main_top_naver_cahce : cache name
300 : cache duration
naver('naver_popular',4) : php function and arguments

このコードは私のajaxコンテンツの読み込みメソッドです。とてもシンプルです。

リンク

私は長年ajaxのロード方法を検討しており、先月は非常に単純なコードを入手しました。私のajaxコンテンツ読み込みコードを試してください。

<div id='main_b'>
// codes for ajax content loading...
// enter this code at the end of program.
// your home page is boosted.
<?
function remove_nr($str) {
$reg_e = array('/\n/', '/\r/', '/\"/', "/<\/script>/i"); 
$reg_p = array(' ', ' ', '\\"', "<\/SCRIPT>"); 
return preg_replace($reg_e, $reg_p, $str);
}
?>
<script type="text/javascript">
$("#main_b").html( " <? echo remove_nr(db_cache("main_top_naver_cache", 300, "naver_popular('naver_popular', 4)"))?> " );
</script>

そして私のdb_cacheコード。これを分析することができます。

function db_cache($c_name, $seconds=300, $c_code) {

    global $g4;

    $result = sql_fetch(" select c_name, c_text, c_datetime from $g4[cache_table] where c_name = '$c_name' ");
    if (!$result) {
        // 시간을 offset 해서 입력 (-1을 해줘야 처음 call에 캐쉬를 만듭니다)
        $new_time = date("Y-m-d H:i:s", $g4['server_time'] - $seconds - 1);
        $result['c_datetime'] = $new_time;
        sql_query(" insert into $g4[cache_table] set c_name='$c_name', c_datetime='$new_time' ");
    }

    $sec_diff = $g4['server_time'] - strtotime($result['c_datetime']);
    if ($sec_diff > $seconds) {

        // $c_code () 안에 내용만 살림 
        $pattern = "/[()]/";
        $tmp_c_code = preg_split($pattern, $c_code);

        // 수행할 함수의 이름
        $func_name = $tmp_c_code[0];

        // 수행할 함수의 인자
        $tmp_array = explode(",", $tmp_c_code[1]);

        if ($func_name == "include_once" || $func_name == "include") {

            ob_start();
            include($tmp_array[0]);
            $c_text = ob_get_contents();
            ob_end_clean();

        } else {

        // 수행할 함수의 인자를 담아둘 변수
        $func_args = array();

        for($i=0;$i < count($tmp_array); $i++) {
            // 기본 trim은 여백 등을 없앤다. $charlist = " \t\n\r\0\x0B"
            $tmp_args = trim($tmp_array[$i]);
            // 추가 trim으로 인자를 넘길 때 쓰는 '를 없앤다
            $tmp_args = trim($tmp_args, "'");
            // 추가 trim으로 인자를 넘길 때 쓰는 "를 없앤다
            $func_args[$i] = trim($tmp_args, '"');
        }
        // 새로운 캐쉬값을 만들고
        $c_text = call_user_func_array($func_name, $func_args);
        }

        // db에 넣기전에 slashes들을 앞에 싹 붙여 주시고
        $c_text1 = addslashes($c_text);

        // 새로운 캐쉬값을 업데이트 하고
        sql_query(" update $g4[cache_table] set c_text = '$c_text1', c_datetime='$g4[time_ymdhis]' where c_name = '$c_name' ");

        // 새로운 캐쉬값을 return (slashes가 없는거를 return 해야합니다)
        return $c_text;

    } else {

        // 캐쉬한 데이터를 그대로 return
        return $result['c_text'];

    }
}

私はdbを集中的に使用するWebサイトを5年前のWebサーバーで1日あたり450,000ページ操作し、isコードやその他の多くのmysqlのヒントを使用して速度を上げています。私のWebサーバーには1つのCPU/4コア、RAM 12G、2つのSATAHDD/RAID1があります。

于 2012-07-07T12:01:31.697 に答える
1

私はエンタープライズソフトウェアの分野で働いており(開発者ではなく単なるコンサルタントとして;))、ページの動的性の点でより柔軟であるため、3番目のアプローチが広く使用されているのを何度も見てきました。

それを除けば、最初の2つのアプローチは、一部の部分だけを更新するという観点からは説得力がないようです。2番目のケース(JSONを使用)でも、2つのページフラグメントを比較する必要があります。これは単純なアプローチだと思います(それほど維持可能ではないので、私は恐れています)。

しかし、あなたの質問には、ページの生成に使用しているものなど、いくつかの重要な情報が欠けています。これは、最初のケースでは(ページのソースコードを含む)文字列を生成するだけなのでそれほど重要ではありませんが、3番目のケースでは、AJAXロードコードが使用しているHTMLテンプレートエンジンに干渉する場合、混乱する可能性があります。

これがお役に立てば幸いです。必要に応じて、質問にさらに情報を追加してください。

于 2012-07-07T11:17:39.607 に答える