繁体   English   中英

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

[英]What is the proper way of using JavaScript, jQuery and AJAX to avoid reaching CPU limits?

也许我认为以下脚本导致我服务器负载高,使我的网站宕机以及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);
};

服务器端:(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聊天之后,我认为我们已经找到问题了。 他正在创建用于查找GPS坐标的Android地图,并将其发送到Web服务器上的PHP脚本。 PHP脚本使用车辆的ID(这是汽车追踪器)使用lat和Long来更新车辆的记录,以了解必须更新的记录。 然后,另一个PHP脚本读取数据库,并使用JS在地图上移动标记。 问题出在以下事实:Cross在Android App中使用计时器每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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM