首选“起搏”的JS / jQuery的HTTP请求的技术?(Preferred technique

2019-10-29 06:05发布

我想“蜘蛛”使用TamperMonkey /使用Javascript / jQuery和整理它到一个页面一个站点一个小的数据集。

我写了一个脚本TM(当我打开目标页面时触发)执行以下操作:

  • 搜索页面的特定类型的链路(通常大约8链接)
  • “跟随”发现了新的一页的各个环节,找到并跟随从那里一个链接
  • 提取我感兴趣的是和“合并”成原来的页面,我打开了数据。

通过这些行动迭代通常会导致16(8×2链接)的HTTP请求的站点被触发。 如果我手动调用它(通过控制台),以在一个步骤的方式执行的操作的所有16个数据,我写的代码工作正常。

但是,如果我尝试只设置一个循环起来,让代码“做的事情”我知道您请求的页面后约4次迭代没有响应型HTML回来(状态= OK)。 我猜该网站是保护自身免受某种XSRF攻击或仅仅是真正的慢?

我的问题是什么是降低我从网站上请求的数据在它速度的首选技术? 我认为建筑的HTTP函数调用或URL来处理数组,但这似乎笨重,还有什么更地道提供给我?

我猜这一定是它这样一个共同的问题和固溶体存在,但我就是没有对术语的好足够的抓地力,为它正确地搜索。

Answer 1:

类似的答案,我贴在其他问题: 浏览器停止在一个同步Ajax调用for循环后工作一段时间

您可以使用“递归”功能,以帮助您控制与异步调用流动。 取而代之的则同步运行的,你可以当它是时间的下一个异步运行所有这些和功能。

就像是:

function doCall() {
    setTimeout(function() {
        $.ajax({
            //...
            succcess: function(data) {
                //...
                //time to start the next one
                doCall();
            },
            error: function() {
                //call the next one on error?
                doCallI();
            }
        });
    }, 1000); //1 second wait before each run
}

它们异步运行,而他们都呼吁不要阻止一切这样; 但在一系列静止运行。 你甚至可以把doCall函数内的小延迟,所以有一定的空间。



文章来源: Preferred technique for 'pacing' HTTP requests in JS/jQuery?