【问题标题】:jQuery crawler big object / $.each / Ajax IN then Ajax OUjQuery爬虫大对象/$.each/Ajax IN 然后Ajax OU
【发布时间】:2014-11-13 03:26:42
【问题描述】:

我正在 jQuery 中构建一个有趣的爬虫...但我在最后一步遇到了问题,即获取一些 ajax 内容,探索它,然后用 ajax 保存结果。

这是一个对象的例子:

finalResult = [];

links = {
    categorie1:{
        categorie2:{
            categorie3:{
                products:{
                    link1,...,linkN
                    //get the content url with ajax
                        ajaxCall(link);
                    //load the content into an hidden div
                        ajaxSuccess(data);
                    //parse the content with selectors
                        myProduct = data.find(selectors).do();
                    //put all the infos into an object
                        finalResult.push(myProduct);
                }
            }
        }    
    }
}

如你所料,我将访问每个内部每个内部的链接等...有 5500 个链接,太多了。

然后,当我的 5500 循环完成后,我想将对象 finalResult 发送到带有 ajax 的 php 页面以记录所有这些产品。

一切正常,直到我达到 3500 多个产品,然后我的浏览器崩溃或变得非常慢并且没有响应。

所以我想每 50 次迭代保存一次 finalProducts,然后执行 50 次以下等...等等。这样我认为操作更小的对象会更容易。

但我不知道该怎么做...有什么想法吗?

谢谢大家,

【问题讨论】:

  • 嗯,浏览器确实有内存限制……查询 5500 个页面可能太多了。

标签: javascript jquery ajax object each


【解决方案1】:

我有一些不同的方法来解决这个问题。

因为,你有你的 JSON。 只需使用 JSON.stringify() 将整个 JSON 字符串化。

然后在链接的基础上进行拆分。 将所有链接连接到一个变量中。 对整个 Strigified 数据执行此操作。 最后发出你的 AJAX 请求。

【讨论】:

  • 所以你的意思是我应该用所有链接制作另一个对象,然后将这个对象串起来,剪切字符串然后在链接上工作......可以工作,但有什么办法直接拆分对象?
  • 如果您可以通过字符串形成来实现您的目标,那么请采用这种方法。 Becoz,这在性能方面比对对象属性的迭代要好得多。
  • 好吧,我改变了一点我的方法。现在我将所有链接放在一个简单的数组中,然后我将该数组拼接到包含数百个链接的 50 个块中,并在每个块之前添加几秒钟的超时。我现在有 5k 链接的 60%,看起来不错,我们会在一小时内看到 :) 无论如何感谢您的支持
  • 看起来很棒。 :) 但我仍然不知道你在做什么,以及为什么它花了太长时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
相关资源
最近更新 更多