【发布时间】:2014-02-05 19:38:37
【问题描述】:
Given:一个用于解析网站上部分数据的 php 脚本。它解析大约 10k 产品,因此相当慢。
我需要为它制作一个带有 html/css/js 的网络前端。我做了一个循环,它发出 ajax 请求并显示进度信息。它使用同步 ajax,因为它需要等到另一个请求完成才能执行另一个。
do {
var parseProductsActive = true;
var counter = 0;
myAjax('parseProducts.php?start='+counter, false, function(resp) {
if (resp[0]=='s') {
counter += Number(resp.substring(1));
parseProductsActive = false;
}
else {
counter += Number(resp);
}
self.postMessage(counter);
});
} while (parseProductsActive==true);
我在 Web Worker 中这样做是因为我担心它会因为这个无限循环而挂起界面,并且(a)ajax 本身的同步性无助于解决问题。
但是当我尝试在 Web Worker 中使用 ajax 时,我发现虽然可行,但它很难,因为 jQuery 根本不能在 Web Worker 中工作。它甚至将 DOM 用于非 DOM 操作,并且 DOM 在 Web Worker 中不可用。许多开发人员根本怀疑使用 Web Workers。我只是想问我这样做是对还是错。还有其他我看不到的表面解决方案吗?
【问题讨论】:
-
您能否在不使用 Web Worker 的情况下一次将您的记录 AJAX,例如 100 条,并动态更新显示?
-
跟我说的不一样吗?它怎么不会挂在页面上?如果我们用循环编写它。
-
不,您在异步(真正的 AJAX)中抓取 100 条记录(AT ONCE),显示它们,然后在第一个请求完成后再获取 100 条记录。
-
>然后在第一个请求完成后去获取另一个 100。 “那么”是什么意思?我在哪里写?你建议递归回调吗?
标签: javascript ajax web-worker