Google Chrome 在一系列 XHR 调用完成之前不会呈现进度条
Google Chrome does not render progress bar till series of XHR calls are complete
将 toastrjs 中的进度条 (bootstrap) 添加到执行远程 apex 的列表视图上的 Salesforce.com 自定义按钮。对于列表视图中的每个选定记录,远程顶点在 for 循环中执行。进度条宽度在每次调用后更新,以显示任务进度。
当所有的 toastr 都显示时,toastr/progressbar 直到所有 xhr 调用完成后才显示。
在 Chrome 检查器中注意到只有在远程调用完成后才会 "rasterized" 渲染。
1) 这是 Google Chrome 的预期行为吗?
2) 是否有解决方法来确保 toastr/progressbar 在每次 xhr 调用后更新?
谢谢!
想通了!希望这可以帮助其他人解决同样的问题。
在使用异步 XHR 时有效。请参阅此 answer 以了解如何设置回调。
Chrome(也许还有其他浏览器?)推迟 "rasterization"(实际上是在显示器上绘制像素!!)直到完成 xhr 调用 apex 方法的 for 循环。如果进度条更新是在循环内完成的,则只有在循环结束后才能看到结果。
通过将进度条更新移动到回调中:
- 一开始所有的xhr都在排队(当进度为零时),
- 显示初始进度条,
- 随着每个 xhr 成功(或失败),进度条会更新。
参见 codepen for an example of how this would be done in a pure javascript+xhr(createCORSRequest) 场景。
for(i = 0; i < total; i++) {
xhr = createCORSRequest(method, url);
xhr.onload = function() {
// Success code goes here.
done++;
processbarupdate(done / total * 100);
};
xhr.onerror = function() {
// Error code goes here.
done++;
processbarupdate(done / total * 100);
};
xhr.send();
}
将 toastrjs 中的进度条 (bootstrap) 添加到执行远程 apex 的列表视图上的 Salesforce.com 自定义按钮。对于列表视图中的每个选定记录,远程顶点在 for 循环中执行。进度条宽度在每次调用后更新,以显示任务进度。
当所有的 toastr 都显示时,toastr/progressbar 直到所有 xhr 调用完成后才显示。
在 Chrome 检查器中注意到只有在远程调用完成后才会 "rasterized" 渲染。
1) 这是 Google Chrome 的预期行为吗? 2) 是否有解决方法来确保 toastr/progressbar 在每次 xhr 调用后更新?
谢谢!
想通了!希望这可以帮助其他人解决同样的问题。
在使用异步 XHR 时有效。请参阅此 answer 以了解如何设置回调。
Chrome(也许还有其他浏览器?)推迟 "rasterization"(实际上是在显示器上绘制像素!!)直到完成 xhr 调用 apex 方法的 for 循环。如果进度条更新是在循环内完成的,则只有在循环结束后才能看到结果。
通过将进度条更新移动到回调中:
- 一开始所有的xhr都在排队(当进度为零时),
- 显示初始进度条,
- 随着每个 xhr 成功(或失败),进度条会更新。
参见 codepen for an example of how this would be done in a pure javascript+xhr(createCORSRequest) 场景。
for(i = 0; i < total; i++) {
xhr = createCORSRequest(method, url);
xhr.onload = function() {
// Success code goes here.
done++;
processbarupdate(done / total * 100);
};
xhr.onerror = function() {
// Error code goes here.
done++;
processbarupdate(done / total * 100);
};
xhr.send();
}