如何修复长时间运行的脚本
How to fix long running scripts?
我正在用一些数据构建传单地图。总的来说,在任何时间点,我都会在地图上有0到18000个标记点。
理解我试图实现的目标的必要代码:
var ds = L.markerClusterGroup({
disableClusteringAtZoom: 9,
maxClusterRadius: 120,
chunkedLoading: true,
iconCreateFunction: iconCreate
});
window.onload = function(){
map = L.map('map', {
layers: [baseLayer, ds],
worldCopyJump: true,
minZoom: 3,
inertiaMaxSpeed: 300
}).setView([lat, lng], zoom);
callAjax("/ajax/markers1.php", markers); // 4220 rows
// callAjax("/ajax/markers2.php", markers); // ~14000 rows
}
function callAjax(url, cb, options){
var xhttp = new XMLHttpRequest(),
opts = options || {};
xhttp.onreadystatechange = function(){
ajaxCheck(xhttp, cb, opts);
}
xhttp.open("POST", url, true);
xhttp.send();
}
function markers(xhttp){
var dJson = JSON.parse(xhttp.responseText);
for(var d = 0;d < dJson.length;d++){
addMarker(dJson[d]);
}
}
function addMarker(d){
L.marker([d.lat, d.lng], {
id: d.id
})
.addTo(ds);
}
上面的代码从指定的URL获取一个JSON请求,并循环返回,将标记添加到已经绑定到映射的集群组中。在Chrome 49.0.2623.112 m中,需要8秒后返回第一个AJAX响应,再加载3到5秒才能加载所有标记。
在IE 11中,我得到了长的运行脚本。第一次标记运行中有4220条记录。我已经将循环限制为只能运行100次,而且它仍然需要长时间运行的脚本。使它只输出1个标记有效,但我需要全部4220个(以及后来的14000个)。
我发现了不同的地方发布了"长时间运行的脚本",但每个地方最终都会说"让你的代码变得更好"。对于我试图完成的任务,我的代码感觉是完美的。
我在控制IE以使此代码能够成功运行并最终在该地图上添加所有18000多个标记方面缺少什么?
有几个因素与这个问题有关。第一个问题是传单不是主要问题,而是(看似)不必要的代码的重复。
IE可以在决定失败之前运行大约500万行Javascript(未经编辑的设置)。这种逻辑的一个缺陷是,即使脚本之间有一段时间的等待,它似乎也能节省运行的行数。重置这个数字(严厉)的唯一方法是setTimeout。这完全是一种逃避。如果你必须这样做,不要气馁,但如果你有多次循环的脚本,并且需要它在IE中工作,那么你很可能需要添加一个setTimeout。
我确实找到了超时时间的建议,但50ms似乎还可以。其他建议是不要将其设置为浏览器中的默认时间就足够了。然而,一些浏览器将其设置为400ms,这将近半秒长。。。这对我来说似乎不合理。所以是50毫秒。到目前为止没有问题。
我想"让你的代码变得更好"才是真正的可能。或者只是摆脱IE。只是说说而已。
使用web浏览器中的分析工具来查看一直在吃什么。
在您的情况下,我敢打赌会在dblclick
上调用addEventListener
,换句话说,就是传单错误3972和传单错误4357,简短的答案是"从传单0.7.x升级到传单1.0.0-beta"。
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- Chrome没有加载最新版本的web工作程序脚本(运行缓存版本)
- 从 jquery.ready() 调用的 javascript 何时相对于 中的脚本运行
- 如何从其中的另一个jquery脚本运行.load()
- 这个对象构造函数阻止我的脚本运行
- 当作为脚本运行时.js Node中“this”的上下文是什么
- 如何使 Tampermonkey 添加的函数在脚本运行后在控制台中可用
- 当脚本运行时,它每秒将 4px 添加到我的容器的高度,只发生在 Firefox 中
- 我可以阻止我的 HTML 页面加载,直到我的 Facebook 登录状态脚本运行之后
- 从 PHP 脚本运行 Javascript 函数
- 我如何将脚本运行到从 jQuery 加载特定标签加载的另一个页面
- 在 PHP 脚本运行时添加加载图像
- 在IE中导致“脚本运行缓慢”警告
- Javascript - 脚本 1 停止,直到脚本 2 运行
- 脚本运行不正确的功能
- ajax脚本运行后指向页面的链接(javascript锚点?)
- 在脚本运行之前终止与浏览器的连接
- 脚本运行时,无法从FTP服务器自动下载文件
- 如何在外部JS脚本运行完成后运行函数
- 根据设备大小阻止脚本运行