gpt4 book ai didi

javascript - 如何优化长时间运行的脚本

转载 作者:行者123 更新时间:2023-12-03 03:08:02 25 4
gpt4 key购买 nike

在我的应用程序中,用户能够更新 Kendo 网格的多行。将这些信息保存在我的数据库中后,我必须更新行。但我能做到这一点的唯一方法是迭代我的分区和网格的每一行来更新这些记录。

这会导致长时间运行的脚本错误并且需要很长时间。并锁定浏览器。我的问题是;有没有一种方法可以优化我的迭代,使其在另一个线程或后台发生。或者有没有更快的方法可以更新记录。

//maingrid contains 400 records
//10 partitions containing 10 rows changed by user
//100 records needing to be updated.

function updateAssignmentsInUI(partitions) {

for (var i = 0; i < partitions.length; i++) {

for (var j = 0; j < partitions[i].length; j++) {

var mainGrid = $("#mainGrid").data("kendoGrid");
$.each(mainGrid.dataSource.data(), function () {

if (this.RowSelected === true) {

if (this.ID === partitions[i][j].ID) {
var row = mainGrid.dataSource.getByUid(this.uid);
row.set("Changed", "Yes");
}
}
});
}
}

}

这将循环遍历 10 个分区,然后循环遍历 10 条记录,在主网格的 400 条记录的整个列表中查找该记录。所以你可以想象这需要多长时间用户才能再次获得控制权。

最佳答案

您可以尝试更改/缓存您的查询。我不知道这会有多大帮助,但尝试像这样使用你的代码

//maingrid contains 400 records
//10 partitions containing 10 rows changed by user
//100 records needing to be updated.

function updateAssignmentsInUI(partitions) {
var mainGrid = $("#mainGrid").data("kendoGrid");
$.each(mainGrid.dataSource.data(), function () {
if (this.RowSelected === true) {
for (var i = 0; i < partitions.length; i++) {
for (var j = 0; j < partitions[i].length; j++) {
if (this.ID === partitions[i][j].ID) {
var row = mainGrid.dataSource.getByUid(this.uid);
row.set("Changed", "Yes");
}
}
}
}
});
}

这样你的 mainGrid 将被缓存,你不会多次查询它,也不会搜索它的数据,如果没有选择行,你也不会运行昂贵的 n^2 循环。这是一个工作演示(简化): https://plnkr.co/edit/n3ZHmlqtoKZP4UQikw2A?p=preview

对于 n^2 次循环。我不太懂优化,请多多指教算法大佬。

关于javascript - 如何优化长时间运行的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47083613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com