我有以下代码:
<div id="uniquefriends">
<?php
$friends = $helper->getuniqueUser($uid, $TOKEN);
foreach($friends as $friend) {
echo $friend; // Facebook UID
}
?>
</div>
<a href="#" id="other"><img src="bilder/arrow_otherfriends.png" style="height: 30px;" alt="load other friends" /></a>
<script>
$(document).ready( function() {
$('#other').click(function() {
$.ajax({
type: 'POST',
url: 'otherfriends/',
data: { uid: "<?php echo $uid; ?>", token: "<?php echo $TOKEN; ?>" },
cache: false,
success: function(result) {
$('#uniquefriends').html(result);
},
});
});
});
</script>
描述:
$friends = $helper->getuniqueUser($uid, $TOKEN);
获取用户/我/的所有朋友并将其与数据库进行比较,array_diff()向我显示朋友与已使用该应用的用户的区别。
你可以想象,调用这个函数会产生巨大的过载,所以不要多次调用它会很聪明。
这个函数每次调用只给我4个uid(array_slice($ array,0,4))(可以修改)
问题:
当用户点击&#34; <a href="#" id="other"><img src="bilder/arrow_otherfriends.png" style="height: 30px;" alt="load other friends" /></a>
&#34;将生成下一组用户并将其作为结果给出(参见ajax调用)。
ajax调用如下所示:
<?php
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = $_POST['uid'];
$token = $_POST['token'];
$helper = new helper();
$friends = $helper->getuniqueUser($uid, $token);
foreach($friends as $friend) {
echo $friend;
}
}
?>
因此,当用户点击链接时,我每次都会"$friends = $helper->getuniqueUser($uid, $TOKEN);"
拨打电话。性能下降,等待时间很长。
我可以以某种方式改进此代码,不经常调用此函数吗?有什么选择吗?
答案 0 :(得分:2)
您可以在PHP脚本中实现一个由AJAX调用的小缓存系统。
每次调用getUniqueUser
存储某个地方(会话,文件,数据库,它们的混合)结果,与输入值配对。
如果缓存中已经知道输入值,只需从中获取结果并立即将其返回,否则,启动该函数并将缺失的结果存储在缓存中。
当然,您可能需要一个复杂的缓存,跟踪请求的时间戳,以避免返回“陈旧”的朋友(可能您最近添加了新朋友,您需要更新缓存)。这只是一个起点,但如果您不想一直调用相同的函数,则需要某种形式的缓存。
答案 1 :(得分:1)
如果
$friends = $helper->getuniqueUser($uid, $token);
确实是在获取所有相关用户(而不是通过所有朋友,通过每个相关朋友的函数调用,这当然没有意义),然后重载不应该像你说的那么多。 / p>
但是,如果您确实发现服务器需要很长时间才能回答您的回复,那么有几个选项。
不太可能相关:请不要将javascript和php混合在一起,这只是一个坏习惯。就像你应该避免混合太多的php和html一样。
答案 2 :(得分:-1)
我相信你只需要一次获取列表,所以在图片标签中添加一个类。仅触发一次请求。每次点击都无法获取结果,因为您只发送相同的参数。
$('#other').click(function() {
if (!$(this).hasClass('clicked')) {
$.ajax({
type: 'POST',
url: 'otherfriends/',
data: { uid: "<?php echo $uid; ?>", token: "<?php echo $TOKEN; ?>" },
cache: false,
success: function(result) {
$('#uniquefriends').html(result);
$('#other').addClass('clicked');
}
});
} });