使用JavaScript、jQuery和AJAX避免达到CPU限制的正确方法是什么?

使用JavaScript、jQuery和AJAX避免达到CPU限制的正确方法是什么?,javascript,php,jquery,codeigniter-3,Javascript,Php,Jquery,Codeigniter 3,也许我认为下面的脚本导致了我的高服务器负载,使我的站点宕机,CPU达到极限。有没有合适的方法来编码这个脚本的变量和安排 还有一点,我在这里使用了一个SetTimeout(),因为我确实需要每隔2秒从Codeigniter PHP和MySQL的JSON文件中获取数据。有没有其他方法可以正确设置?我可以做什么来最小化服务器负载并避免达到web主机CPU的限制 <script> var data1; var data2; var id = "1"; var url = '<?php

也许我认为下面的脚本导致了我的高服务器负载,使我的站点宕机,CPU达到极限。有没有合适的方法来编码这个脚本的变量和安排

还有一点,我在这里使用了一个
SetTimeout()
,因为我确实需要每隔2秒从Codeigniter PHP和MySQL的JSON文件中获取数据。有没有其他方法可以正确设置?我可以做什么来最小化服务器负载并避免达到web主机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);
};
locate
函数中没有使用
$(document).ready(函数(){…}

您还可以将
setTimeout
置于
函数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);
函数locate(){
$.get(get_loc+v_id,函数(数据){
var obj=JSON.parse(数据)
长程=目标车辆[0]。长程;
纬度=目标车辆[0]。纬度;
if(目标车辆[0]。长度==“”){
document.getElementById(“坐标”).innerHTML=“在数据库中找不到坐标”;
}否则{
document.getElementById(“坐标”).innerHTML=“longtudent:+longtudent+”
纬度:+Latitude+”; } }); }; setTimeout(locate,2000);
定位
函数中没有使用
$(document).ready(函数(){…}

您还可以将
setTimeout
置于
函数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);
函数locate(){
$.get(get_loc+v_id,函数(数据){
var obj=JSON.parse(数据)
长程=目标车辆[0]。长程;
纬度=目标车辆[0]。纬度;
if(目标车辆[0]。长度==“”){
document.getElementById(“坐标”).innerHTML=“在数据库中找不到坐标”;
}否则{
document.getElementById(“坐标”).innerHTML=“longtudent:+longtudent+”
纬度:+Latitude+”; } }); }; setTimeout(locate,2000);
在与Cross聊天后,我认为我们已经找到了问题所在。他正在创建和Android map,查找GPS坐标,并将它们发送到web服务器上的PHP脚本。PHP脚本使用车辆id(它是一个汽车跟踪器)更新车辆的lat和Long记录,以了解必须更新的记录。 然后另一个PHP脚本读取数据库,并使用JS在地图上移动标记。 问题来自于Cross在Android应用程序中使用计时器每2秒询问一次GPS位置,但他在没有“计时器”的循环中调用web服务器。因此,在伪代码中,他有类似的内容:

  Every 2 sec, ask for GPS Location
  Do
      send Location to server
  Loop
因此,即使GPS位置每2秒被提升一次,他也会连续全速呼叫web服务器……这就是CPU过载的原因。 我建议你这样想

       Get GPS location every 2 sec
       Do
          if Location has changed
            send to server
          endif
       Loop

在与Cross聊天后,我认为我们已经找到了问题所在。他正在创建和Android map来查找GPS坐标,并将它们发送到web服务器上的PHP脚本。PHP脚本使用车辆的id(它是一个汽车跟踪器)更新车辆的记录,并使用lat和Long来知道必须更新哪些记录。 然后另一个PHP脚本读取数据库,并使用JS在地图上移动标记。 问题来自于Cross在Android应用程序中使用计时器每2秒询问一次GPS位置,但他在没有“计时器”的循环中调用web服务器。因此,在伪代码中,他有类似的内容:

  Every 2 sec, ask for GPS Location
  Do
      send Location to server
  Loop
因此,即使GPS位置每2秒被提升一次,他也会连续全速呼叫web服务器……这就是CPU过载的原因。 我建议你这样想

       Get GPS location every 2 sec
       Do
          if Location has changed
            send to server
          endif
       Loop

把代码放回去,没有它你的问题就没用了。不确定这是一个“纯代码”问题,但可能更像是一个战略问题。如果你想从服务器获取数据,你可以像通过“链接”一样直接调用它这将导致它将整个数据发送回您。您还可以使用XMLHttpRequest对象从服务器返回您需要的数据(客户端的JS将显示出来。(请参阅)。您也可以只发送回数据,而不是要求JSON进行编码(更短更快)。CPU限制很奇怪,可能取决于PHP代码的质量和请求号?详细说明:在PHP方面,我认为您有“PHP代码”和“SQL查询”。添加一些microtime()关于每次调用的信息,以了解什么需要时间。知道时间损失在哪里是第一点,以便知道必须在哪里完成工作。我更新代码显示PHP代码,以便服务器端。把代码放回去,没有它,你的问题就没用了。不确定这是“纯代码”问题,但可能更具战略性。如果您想从服务器获取数据,您可以直接调用它,就像使用“链接”一样,这将导致它将整个数据发送回您。您还可以使用XMLHttpRequest对象从服务器获取您所需的数据(客户端的JS将显示)。与要求JSON编码不同,您还可以只发送数据(更短更快)。CPU限制很奇怪,可能取决于PHP代码质量和请求编号?详细信息:在PHP方面,我认为您有“PHP代码”和“SQL查询”。添加一些microtime()关于每次调用的信息,以查看需要的时间。知道时间损失在哪里是第一点,以便知道必须在哪里完成工作。我更新代码显示PHP代码,以便服务器端。您的解决方案每2秒获取GPS位置,如果位置已更改,则发送到服务器endif循环。正在工作,位置仅在位置已更改时发送f不停止发送。是的,它正在工作,但昨晚在测试30分钟后,我在我的网络主机上收到错误消息“数据库停止对mysql数据库响应太多请求流量”。20分钟后“CPU达到限制”,您的网站将在24小时内返回”。这是我的网络主机上的问题还是我的代码上的问题?是服务器负载太大吗?也许可以查看一下查询代码。发送一封邮件,我们将解决这个问题,而不是使用堆栈进行对话。:)您