【发布时间】:2014-07-23 19:29:08
【问题描述】:
我有一个循环 AJAX 调用,设置为 1000 毫秒。 PHP 脚本很简单,它只是将一些信息(一个数字)放入会话变量中。昨天我收到了来自我的托管服务提供商 (HostGator) 的电子邮件,其中说我在共享托管上使用了 75% 以上的 CPU。查看日志后,我发现问题出在那个 AJAX 调用上。代码如下:
PHP (ajax.session.php):
<?php
session_start();
$movieID_e = $_POST['id'];
$state = trim(strtolower($_POST['status']));
if ($state == 'playing') {
if (empty($_SESSION[$movieID_e])) {
$_SESSION[$movieID_e] = 1;
}
else {
$_SESSION[$movieID_e]++;
}
}
echo $_SESSION[$movieID_e];
?>
Javascript:
function interval(func,wait,times){
var interv = function(w, t){
return function(){
if(typeof t === "undefined" || t-- > 0){
setTimeout(interv, w);
try{
func.call(null);
}
catch(e){
t = 0;
throw e.toString();
}
}
};
}(wait,times);
setTimeout(interv, wait);
};
var watched = (function() {
var executed = false;
return function () {
$.post('ajax.session.php',{id:'<?php echo encrypt($id); ?>',status:'none'},function(result) {
if (result == 1000) {
if (!executed) {
executed = true;
var highlightad = introJs();
highlightad.setOptions({
steps: [
{
element: '#advertisment1',
intro: 'test',
position: 'bottom'
},
{
element: '#advertisment2',
intro: 'test2',
position: 'left'
}
]
});
highlightad.start();
}
}
else {
executed = false;
return false;
}
});
};
})();
interval(function(){watched()},1000,3000);
JS解释:
function interval() -> 替代 setInterval(),取自 thecodeship.com
functionwatched() -> AJAX 请求文件 ajax.session.php 如上所示。如果结果是 1000,那么它会使用 Intro.JS 突出显示网站的一部分。
interval(function(){watched()},1000,3000); -> 每 1000 毫秒重复 watch(),最大值。重复次数为3000次。
请注意,PHP 脚本 (ajax.session.php) 也由 AJAX 从另一个脚本调用,函数 interval() 每 1000 毫秒调用一次。
我每秒使用一次 interval() 来计算视频播放器中过去的秒数。
您对如何使用以下脚本防止 CPU 过载有任何建议吗?
【问题讨论】:
-
会话如何存储在共享主机上?您发布的 PHP 脚本似乎不太可能导致任何类型的负载,即使您每秒调用 10 次也是如此。您如何通过查看日志确定这是问题的根源?
-
我不确定您的意思,您始终可以在共享主机上使用会话。我不是指 PHP 错误日志,托管服务提供商向我发送了一个如下所示的文件:Open connections Current Site Requests: 204.129.55.79 [DOMAIN_NAME] /ajax.session.php --->repeating the upper text
标签: php ajax loops overloading cpu