2016-01-22 10 views
0

我正在设计和实施物业管理系统,并且我的仪表板包含指定日期间隔的房间预订。并行ajax请求或sql查询? [性能方面]

我在问什么,与表现有关[加载房间的信息]。 目前,我有

for (var r = 0; r < rooms.length; r++) 
    { 
     $.ajax({ 
     type: 'POST', 
     url: '/dashboard/getAllOrders.php', 
     data: 'room_id=' + encodeURIComponent(rooms[r].id), 
     complete: function (e, xhr, settings) { 
      if (e.status === 200) 
      { 
       var orders = $.parseJSON(e.responseText); 
       for (var i = 0; i < orders.length; i++) 
       { 
        drawOrder(orders[i]); 
       } 
      } 
     } 
     }); 
    } 

但是,我也可以写为:

var room_ids = []; 
    for (var r = 0; r < rooms.length; r++) 
    { 
     room_ids.push(rooms[r].id); 
    } 

    $.ajax({ 
    type: 'POST', 
    url: '/dashboard/getAllRoomsOrders.php', 
    data: { 'room_ids' : room_ids }, 
    complete: function(event, request, settings) 
    { 
     if (event.status === 200) 
     { 

      var orders = $.parseJSON(event.responseText); 
      for (var i = 0; i < orders.length; i++) 
      { 
       drawOrder(orders[i]); 
      } 
     } 
    } 
    }); 

你能推荐我的选项,我需要坚持和提供的参数,这将证明为什么一个选项从性能的角度来看,比其他的更好?

如果不是,您能否推荐客户端 - 服务器应用程序的最佳基准测试实践?

+1

第二个好得多,假设你做了正确的事情并将它合并到后端的单个SQL查询中。更少的网络流量,更少的数据库查询发送等,不知道这是甚至是一个问题。 –

+0

从另一个角度看,让我们说你需要商店里的牛奶和面包。什么更快/更高效?立即派一个人坐在一辆车上,或者派两个人坐在两辆不同的车上来得到它?只有2个项目的差异很小,但如果您需要50个以上的项目,显然会出现带宽问题。 –

+0

我几乎同意你的意见。但是我们需要50辆以上的汽车,而不是一辆,对吧?它会吃掉更多必须分配的内存,并且分配给它的内存会占用资源,还需要分配时间,否?在C++中,动态内存比自动静态内存慢。好吧,也许我会尝试做一些基准测试,看看哪个选项更快。 –

回答

0

您可能会看到几乎没有差别非常小的数据,但是,由于roomId的数量的增加,你会开始看到第一种方法主要是由于带宽以长于第二。

通过将所有这些请求合并到一个请求中,您正在减少客户端与Web服务器以及Web服务器与数据库服务器之间的网络通信量,因为在这两种情况下,组合请求都不需要重复发送标头数据和sql查询,而是发送一次,从而减少网络流量和数据库查找。