我有一个包含16742条记录的SQL表。使用jquery并获取并检索所有数据。然后对于每一行,然后我再次检查每一行,我有我的条件,如果匹配,使用帖子将该行保存到另一个表。这一切都很好,我们计算出需要6秒才能遍历表格。根据我们计算出的数字,该脚本将运行27个小时。
现在,当应用程序运行时,它总是停在已保存到另一个表的8190行。
似乎服务器超时了。有什么东西可以让脚本继续运行吗?
感谢您输入,这是我现在的代码。
<script type="text/javascript" >
$.getJSON("/Home/GetAllAusPostCodes", function (data) {
// alert('All Data Collected')
var firstlat
var firstlng
var origionalpostcode
var auspostid
var orsuburb
$.each(data, function (index, item) {
alert('yes');
// alert(item.ID + " " + item.Postcode + " " + item.Suburb + " " + item.latitude + " " + item.longitude);
firstlat = item.latitude;
firstlng = item.longitude;
auspostid = item.ID
origionalpostcode = item.Postcode
orsuburb = item.Suburb
// alert('lat: ' + firstlat + ' ' + 'lng: ' + firstlng);
$.each(data, function (index, item) {
var p1 = new LatLon(Geo.parseDMS(firstlat), Geo.parseDMS(firstlng));
// alert(p1);
var p2 = new LatLon(Geo.parseDMS(item.latitude), Geo.parseDMS(item.longitude));
// alert(p2);
if (p1.distanceTo(p2) > 0 && p1.distanceTo(p2) < 30) {
var url = "/Home/SaveDistancePostCode?AusPostCodeID=" + auspostid + "&PostCode=" + item.Postcode + "&OrigionalSuburb=" + orsuburb + "&SuburbName=" + item.Suburb + "&lat=" + item.latitude + "&lng=" + item.longitude + "&state=" + item.State + "&distance=" + p1.distanceTo(p2);
// $.each(function (i) {
var i
$.post(url, function (data) {
alert(i + 1);
});
// })
}
});
警报( '完全')
});
});
这个当前脚本仍然停止在我的第一次测试中更好的电脑上的8190条记录。我将继续努力。 tkz供您参考。
答案 0 :(得分:1)
这里有四个可能的问题,我们无法确定它是哪一个,但我会解决这三个问题的可能变化:
如果服务器超时是因为客户端没有足够快地处理数据并且您无法找到更快的方法来处理客户端上的数据,那么您只能修复此问题更改服务器以加快其请求处理或延长其超时或数据请求的结构变化(例如,请求服务器可以处理的较小数据块而不会超时)。 / p>
如果ajax调用本身超时是因为服务器耗时太长或者因为读取所有数据需要太长时间,那么你可以更改jQuery ajax调用的超时时间,看看是否有帮助。 jQuery有一个名为timeout
的ajax选项,允许您设置客户端ajax请求超时所需的内容。您可以为特定的jQuery ajax调用单独设置它,也可以为所有jQuery ajax调用设置它。有关详细信息,请参阅jQuery ajax reference。
如果浏览器超时是因为单个javascript操作花费的时间太长而无法处理服务器结果,那么您将不得不重新构建客户端代码以处理块中的数据并允许JS引擎在此过程中服务其他事件。这将允许客户端操作基本上无限期地运行,而不会使浏览器不满意。以下是有关如何进行分块的一些参考:Processing very large array,jQuery ajax freezes UI on large response,Avoiding unresponsive script message。
如果您正在对服务器进行大量连续的POST,这就是导致问题的原因,那么我们就很难确切地知道问题的所在位置(它可能是上述三个项目的某种组合),但是提高许多连续POST操作性能的最快方法是重新安排将数据传输到服务器的方式,以便您发送更大的数据块而不是更多的小块数据数据的。传输大量数据的最慢方法是执行请求,等待响应,执行另一个请求,等待另一个响应等等...收集大量数据并发送速度要快得多一次大量数据,等待一个响应,再做大量数据等等......
或者,您可以将这三者结合起来,并且需要进行多项更改。