我想听听您使用ajax优化内容加载的想法。接下来,我将提出几种方法,我将对每一种方法提出自己的看法。
那么,您对每种方法有何看法?随意提出一种新的方法!
答案 0 :(得分:1)
我在企业软件领域工作(仅仅是顾问,而不是开发人员;))我已经多次看到第三种方法被广泛使用,因为它在页面的动态性方面更灵活。
除此之外,从更新某些部分的角度来看,前两种方法似乎并不引人注目:即使在第二种情况下(使用JSON),您必须比较两个页面片段,我认为这是一个天真的做法(我担心的不那么可持续)。
但您的问题缺少一些重要信息,例如您用于生成页面的信息。这在第一种情况下不太重要,因为您只是生成一个字符串(其中包含页面源代码),但如果您的AJAX加载代码干扰了您正在使用的HTML模板引擎,它在第三种情况下会变得混乱。
我希望这会有所帮助,如果您需要,请在问题中添加更多信息!
答案 1 :(得分:1)
我将内容分为3部分。
如果页面很慢,请分析并更改为2或3。 在使用ajax内容加载之前,必须分析页面访问速度和数据库负载。
对于db cache,我传递函数和参数。
$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'];
}
}
我运行数据库密集型网站450,000页/天 在5年的web服务器上提高速度 与代码和许多其他mysql技巧。 我的网络服务器有1个CPU / 4Core,RAM 12G,2个SATA HDD / Raid 1。