使用 JavaScript、jQuery 和 AJAX 以避免达到 CPU 限制的正确方法是什么?
What is the proper way of using JavaScript, jQuery and AJAX to avoid reaching CPU limits?
也许我认为下面的这个脚本导致我服务器负载过高导致我的网站宕机以及 CPU 达到限制。有没有正确的方法来编码这个脚本的变量和安排?
还有一点,我在这里使用 SetTimeout()
因为我 确实需要 从 Codeigniter JSON 文件中获取数据 PHP 和 MySQL 每 2 秒。还有其他方法可以正确设置吗?我可以做些什么来最小化我的服务器负载并避免达到我的虚拟主机的 CPU 的限制?
<script>
var data1;
var data2;
var id = "1";
var url = '<?php echo base_url();?>index.php/site/get_products/';
products();
function products() {
$(document).ready(function () {
$.get(url + id, function (data) {
var obj = JSON.parse(data)
data1 = obj.product[0].data1;
data2 = obj.product[0].data2;
if (obj.product[0].data2 == "") {
document.getElementById("datap").innerHTML = "No data found";
} else {
document.getElementById("datap").innerHTML = data1 + data2;
}
});
});
setTimeout(products, 2000);
};
服务器端:(mycontroller.php)
public function get_product($id){
$this->db->select('*');
$this->db->from('product');
$this->db->where('id', $id);
$query = $this->db->get();
if($query->num_rows() > 0){
$data['product'] = $query->result();
}
echo json_encode($data);
}
locate
函数内部没有使用$(document).ready(function () {...}
您还把 setTimeout
放在 function locate
外面
function locate() {
$.get(get_loc + v_id, function(data) {
var obj = JSON.parse(data)
longtitude = obj.vehicle[0].longtitude;
latitude = obj.vehicle[0].latitude;
if (obj.vehicle[0].longtitude == "") {
document.getElementById("coordinates").innerHTML = "No coordinates found in the database";
} else {
document.getElementById("coordinates").innerHTML = "Longtitude: " + longtitude + "<br>Latitude: " + latitude + " ";
}
});
};
setTimeout(locate, 2000);
在与 Cross 交谈后,我想我们已经找到了问题所在。他正在创建 Android 地图以寻找 GPS 坐标,并将它们发送到网络服务器上的 PHP 脚本。 PHP 脚本用纬度和经度更新车辆的记录,使用车辆的 id(它是一个汽车跟踪器)来知道必须更新哪个记录。
然后另一个 PHP 脚本读取数据库并使用 JS 在地图上移动标记。
问题来自 Cross 在 Android 应用程序中使用计时器每 2 秒询问一次 GPS 位置,但他在没有 "timer" 的循环中调用网络服务器。所以在伪代码中他有类似的东西:
Every 2 sec, ask for GPS Location
Do
send Location to server
Loop
因此,即使 GPS 位置仅每 2 秒更新一次,他也会全速连续调用网络服务器....这解释了 CPU 过载。
我建议Cross这样的想法
Get GPS location every 2 sec
Do
if Location has changed
send to server
endif
Loop
也许我认为下面的这个脚本导致我服务器负载过高导致我的网站宕机以及 CPU 达到限制。有没有正确的方法来编码这个脚本的变量和安排?
还有一点,我在这里使用 SetTimeout()
因为我 确实需要 从 Codeigniter JSON 文件中获取数据 PHP 和 MySQL 每 2 秒。还有其他方法可以正确设置吗?我可以做些什么来最小化我的服务器负载并避免达到我的虚拟主机的 CPU 的限制?
<script>
var data1;
var data2;
var id = "1";
var url = '<?php echo base_url();?>index.php/site/get_products/';
products();
function products() {
$(document).ready(function () {
$.get(url + id, function (data) {
var obj = JSON.parse(data)
data1 = obj.product[0].data1;
data2 = obj.product[0].data2;
if (obj.product[0].data2 == "") {
document.getElementById("datap").innerHTML = "No data found";
} else {
document.getElementById("datap").innerHTML = data1 + data2;
}
});
});
setTimeout(products, 2000);
};
服务器端:(mycontroller.php)
public function get_product($id){
$this->db->select('*');
$this->db->from('product');
$this->db->where('id', $id);
$query = $this->db->get();
if($query->num_rows() > 0){
$data['product'] = $query->result();
}
echo json_encode($data);
}
locate
函数内部没有使用$(document).ready(function () {...}
您还把 setTimeout
放在 function locate
function locate() {
$.get(get_loc + v_id, function(data) {
var obj = JSON.parse(data)
longtitude = obj.vehicle[0].longtitude;
latitude = obj.vehicle[0].latitude;
if (obj.vehicle[0].longtitude == "") {
document.getElementById("coordinates").innerHTML = "No coordinates found in the database";
} else {
document.getElementById("coordinates").innerHTML = "Longtitude: " + longtitude + "<br>Latitude: " + latitude + " ";
}
});
};
setTimeout(locate, 2000);
在与 Cross 交谈后,我想我们已经找到了问题所在。他正在创建 Android 地图以寻找 GPS 坐标,并将它们发送到网络服务器上的 PHP 脚本。 PHP 脚本用纬度和经度更新车辆的记录,使用车辆的 id(它是一个汽车跟踪器)来知道必须更新哪个记录。 然后另一个 PHP 脚本读取数据库并使用 JS 在地图上移动标记。 问题来自 Cross 在 Android 应用程序中使用计时器每 2 秒询问一次 GPS 位置,但他在没有 "timer" 的循环中调用网络服务器。所以在伪代码中他有类似的东西:
Every 2 sec, ask for GPS Location
Do
send Location to server
Loop
因此,即使 GPS 位置仅每 2 秒更新一次,他也会全速连续调用网络服务器....这解释了 CPU 过载。 我建议Cross这样的想法
Get GPS location every 2 sec
Do
if Location has changed
send to server
endif
Loop