xrm中的$ batch请求应该用于成组成功或失败的操作数量。
I.E。代替
POST [Organization URI]/api/data/v9.0/tasks
{ ...payload for task1.. }
POST [Organization URI]/api/data/v9.0/tasks
{ ...payload for task2.. }
您创建请求
POST [Organization URI]/api/data/v9.0/$batch
{ .... shared payload ... }
现在我的问题是,它们是否也应该为客户端加载提供性能提升?即当我使用$ batch时,应该认为客户端的整体性能更好吗?
编辑
我使用过的测试代码段:
syncTest = function() {
var now = Date.now();
var count = 0;
var done = function() {
count++;
if (count === 2) {
console.log("Sync: " + (Date.now() - now) + " ms");
}
};
$.ajax({method:"GET",url:"/api/data/v9.0/contacts(53c4918e-5367-e911-a83b-000d3a31329f)", success: function() { done(); }});
$.ajax({method:"GET",url:"/api/data/v9.0/contacts(50b297c5-4867-e911-a843-000d3a3130ea)", success: function() { done(); }});
};
asyncTest = function() {
var now = Date.now();
var done = function() {
console.log("Async: " + (Date.now() - now) + " ms");
};
var headers = {
'Content-Type': 'multipart/mixed;boundary=batch_123456',
'Accept': 'application/json',
'Odata-MaxVersion': '4.0',
'Odata-Version': '4.0'
};
var data = [];
data.push('--batch_123456');
data.push("Content-Type: application/http");
data.push("Content-Transfer-Encoding:binary");
data.push('');
data.push('GET /api/data/v9.0/contacts(53c4918e-5367-e911-a83b-000d3a31329f) HTTP/1.1');
data.push('Content-Type:application/json;type=entry');
data.push('');
data.push('{}');
data.push('--batch_123456');
data.push("Content-Type: application/http");
data.push("Content-Transfer-Encoding:binary");
data.push('');
data.push('GET /api/data/v9.0/contacts(50b297c5-4867-e911-a843-000d3a3130ea) HTTP/1.1');
data.push('Content-Type:application/json;type=entry');
data.push('');
data.push('{}');
data.push('--batch_123456');
var payload = data.join('\r\n');
$.ajax({method:"POST",url:"/api/data/v9.0/$batch", data:payload, headers: headers, success: function() { done(); }});
};
测试方法-刷新浏览器缓存执行代码段;次(五次重试的平均值):
$batch - 242ms per combined request (average for 5x)
one by one in parallel - 195ms per combined request (average for 5x)
因此$ batch似乎实际上增加了一些开销。
答案 0 :(得分:0)
该Web API批处理可以接受100条记录,与并行进行一对一记录相比,可以提供更高的性能。这主要是由于减少了客户端与服务器之间的通信数量,这在高延迟环境中可能是性能问题。如下所述,它并不是专门为满足这种情况而设计的,它主要是为了实现交易行为。
使用Web API的Batch操作与组织服务的ExecuteTransactionRequest和ExecuteMultipleRequest有点相似。
Batch
ExecuteTransactionRequest
ExecuteMultipleRequest
相匹配,则可能为1000)。ExecuteMultipleRequest
答案 1 :(得分:0)
对于您的请求,由于它们正在异步运行,因此这两个请求都将发送到服务器,并且将与批处理异步处理,批处理将一次处理一个。因此,我可以想象两个异步的总执行时间会少于一个异步的总执行时间,但是由于服务器处理,而不是客户端问题。您可以改为将通话更改为通过同步,以查看是否存在差异。
答案 2 :(得分:0)
批处理请求将节省往返时间。即主要性能优势。顺序发送2个请求,比仅发送1个请求要慢得多。如Daryl所述,您的2个请求均发出Async(或多或少表示并行)。这就是您看到差异的原因。因此,您基本上将并行处理与单线程进行比较。