일부 webSQL 테이블을 업데이트하는 코드가 있지만 다른 트랜잭션 내부의 다른 트랜잭션 내부의 트랜잭션입니다. 테이블을 업데이트하는 데 꽤 오랜 시간이 걸리지 만 CREATE/INSERT 값에는 정상적인 시간이 걸립니다. 나는 다음과 같은 코드를 가지고 웹 서비스에 AJAX 성공 콜백 안쪽 (? 걸리는 시간)을 webSQL 트랜잭션의 성능WebSQL 성능 문제 - 많은 양의 데이터 업데이트
를 볼 수있는 방법이 있나요 :
function handleOrderNote(value, tx, ite) {
tx.executeSql('SELECT * FROM MobileOrder where MobileOrderID = ?', [value.mobileOrder.mobileOrderID],
function (tx, result) {
function updateCreateOrderNote(tx, result, nResultadosIn, ite) {
if (nResultadosIn > 0) {
function updateOrderNote(value2, tx, ite) {
tx.executeSql('UPDATE MobileOrder SET CompanyID =?, CustomerID =?, OrderDate = ?, TotalQtt = ?, TotalCost = ?, UserPHC=?, HeaderID=?, OrderState=?, Observations=?, Status = ? WHERE MobileOrderID = ?', [value2.mobileOrder.companyID, value2.mobileOrder.customerID, value2.mobileOrder.orderDate, value2.mobileOrder.totalQtt, value2.mobileOrder.totalCost, value2.mobileOrder.userPHC, value2.mobileOrder.headerID, value2.mobileOrder.orderState, value2.mobileOrder.observations, value2.mobileOrder.status, value2.mobileOrder.mobileOrderID],
function (tx, result) {
function searchEqualOrderNote(value3, tx, ite) {
tx.executeSql('SELECT * FROM MobileOrderDetail where MobileOrderDetailID = ?', [value3.mobileOrderDetailID],
function (tx, result) {
function updateCreateLineOrderNote(tx, result, nResultadosIn, ite, value3) {
if (nResultadosIn > 0) {
function updateLineOrderNote(value4, tx, ite) {
tx.executeSql('UPDATE MobileOrderDetail SET MobileOrderID =?, Ref =?, CompanyID = ?, Discount = ?, Qtt = ?, TotalDetail=?, DetailID=? WHERE MobileOrderDetailID = ?', [value4.mobileOrderID, value4.ref, value4.companyID, value4.discount, value4.qtt, value4.totalDetail, value4.detailID, value4.mobileOrderDetailID],
function (tx, result) {}
);
}
updateLineOrderNote(value3, tx, ite);
} else {
function createLineOrderNote(value4, tx, ite) {
tx.executeSql('INSERT INTO MobileOrderDetail (MobileOrderDetailID, MobileOrderID, Ref, CompanyID, Discount, Qtt, TotalDetail, DetailID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [value4.mobileOrderDetailID, value4.mobileOrderID, value4.ref, value4.companyID, value4.discount, value4.qtt, value4.totalDetail, value4.detailID],
function (tx, result) {});
}
createLineOrderNote(value3, tx, ite);
}
}
updateCreateLineOrderNote(tx, result, result.rows.length, ite, value3);
});
}
for (var i = 0; i < value2.mobileOrderDetail.length; i++) {
var linhaNotaEncomenda = value2.mobileOrderDetail[i];
searchEqualOrderNote(linhaNotaEncomenda, tx, i);
}
}
);
}
updateOrderNote(value, tx, ite);
} else {
function createOrderNote(value2, tx, ite) {
tx.executeSql('INSERT INTO MobileOrder (IDLocal, MobileOrderID, CompanyID, CustomerID, OrderDate, TotalQtt, TotalCost, UserPHC, HeaderID, OrderState, Observations, Status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [idLocalDestaEncomenda, value2.mobileOrder.mobileOrderID, value2.mobileOrder.companyID, value2.mobileOrder.customerID, value2.mobileOrder.orderDate, value2.mobileOrder.totalQtt, value2.mobileOrder.totalCost, value2.mobileOrder.userPHC, value2.mobileOrder.headerID, value2.mobileOrder.orderState, value2.mobileOrder.observations, value2.mobileOrder.status],
function (tx, result) {
function searchEqualOrderNote(value3, tx, ite, idLocalInput) {
tx.executeSql('SELECT * FROM MobileOrderDetail where MobileOrderDetailID = ?', [value3.mobileOrderDetailID],
function (tx, result) {
function updateCreateLineOrderNote(tx, result, nResultadosIn, ite, value3) {
if (nResultadosIn > 0) {
function updateLineOrderNote(value4, tx, ite) {
tx.executeSql('UPDATE MobileOrderDetail SET MobileOrderID =?, Ref =?, CompanyID = ?, Discount = ?, Qtt = ?, TotalDetail=?, DetailID=? WHERE MobileOrderDetailID = ?', [value4.mobileOrderID, value4.ref, value4.companyID, value4.discount, value4.qtt, value4.totalDetail, value4.detailID, value4.mobileOrderDetailID],
function (tx, result) {}
);
}
updateOrderLine(value3, tx, ite);
} else {
function createLineOrderNote(value4, tx, ite) {
tx.executeSql('INSERT INTO MobileOrderDetail (MobileOrderDetailID, MobileOrderID, Ref, CompanyID, Discount, Qtt, TotalDetail, DetailID, IDLocal) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [value4.mobileOrderDetailID, value4.mobileOrderID, value4.ref, value4.companyID, value4.discount, value4.qtt, value4.totalDetail, value4.detailID, idLocalInput],
function (tx, result) {
//trata linhas de encomenda
});
}
createLineOrderNote(value3, tx, ite);
}
}
updateCreateLineOrderNote(tx, result, result.rows.length, ite, value3, idLocalInput);
});
}
for (var i = 0; i < value2.mobileOrderDetail.length; i++) {
orderLine = value2.mobileOrderDetail[i];
searchEqualOrderNote(orderLine, tx, i, idLocalDestaEncomenda);
}
});
}
createOrderNote(value, tx, ite);
}
}
updateCreateOrderNote(tx, result, result.rows.length, ite);
});
은}
Webkit Developer Tools에서 빌트인 프로파일 러를 사용하거나 수동 솔루션을 작성하여 시간을 절약 할 수 있습니다. 내 눈먼 추측은 당신이 당신의 WHERE 조건에서 사용 된 컬럼에 대한 인덱스를 가지고 있지 않다는 것입니다. (코드가 실제로 배치 된 방법이라면 누구든지 이것을 유지해야 할 것입니다.) – DCoder
이 LOL을 유지해야합니다. 상속 된 코드입니다 : P – Astronaut