dynamics-crm - $batch 请求 - 与逐个执行的请求相比,它们是否提供客户端性能加速
问题描述
xrm 中的 $batch 请求应该用于作为一个组成功或失败的操作数。
IE而不是
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 ... }
现在我的问题是它们是否也应该为客户端加载提供性能加速?IE 当我使用 $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 实际上增加了一些开销。
解决方案
批量请求将节省往返时间。即主要性能优势。按顺序发送 2 个请求比只发送 1 个请求要慢得多。正如 Daryl 所说,您的 2 请求是异步发送的(这或多或少意味着并行)。这就是您看到差异的原因。因此,您基本上将并行处理与单线程进行比较。
推荐阅读
- oracle - Oracle sqlloader,可以只在一列中插入结果吗?
- html - Bootstrap 4中心(水平)图像+ div内的文本
- java - 为什么我得到“唯一约束失败”错误
- java - 没有执行器的Java Callable async
- php - 如何对一个 JSON 对象进行字符串化,同时将另一个对象保持为整数
- amazon-web-services - 调用 CreateLoadBalancer 操作时出错 (InvalidSubnet):子网 ID 'MythicalMysfitsCoreStack:PublicSubnetOne' 无效
- python - 如何设置转弯(Python - Tkinter)?
- ubuntu - sage -i -> sage-run 收到未知选项:-i
- python - 使用距离过滤数据框
- r - 如何通过原始行 ID 重建标记化数据?