jQuery在处理大文件时跳动

问题描述:

在我的web应用程序中,用户可以生成一个CVS文件,有时可能会得到非常大的10+ Mb。报告显然可能需要一些时间才能生成。我想在生成报告时为用户显示一个跳跃者,一旦他们被提示保存/运行,我希望跳跃者隐藏。这可能吗?jQuery在处理大文件时跳动

不,这不是真的有可能当文件到达,用户保存它来检测。你几乎停滞不前,只是更新你的throbber并提供一个继续的链接,当他们准备好继续。

如果这是可能的,那么当您完成文件的着陆页时,下载站点将使用它来自动将您转到下载列表。

+0

是的,我有一种感觉,这将是棘手。除了继续链接/跳动之外,是否真的有任何方法让用户知道在后台进行繁重的处理? – 2010-12-17 23:11:41

+0

好吧,很好,这是可能的,但很多努力。假设您重定向到CSV开始下载,放置一个空的进度条,'setTimeout'设置回调。一段时间后,您使用XMLHttpRequest向服务器询问该会话中的下载进度。它会告诉你,然后你在另一段时间再次调用setTimeout。在服务器上,您将设置一个会话变量来跟踪CSV创建进度。一旦服务器说完成,请执行完成代码。服务器上的WebSockets和node.js可能会变得更加复杂,但是我们不要在这里发疯。 – 2010-12-22 15:15:18

是的,通常在JavaScript中繁重的操作被拆分成块,然后从setInterval调用。超时会阻止页面冻结。

var csvTxt = ""; 
var isDone = false; 
addPart = function(){ 
    csvTxt += addTextFromLongCalculation(); 
    if(csvTxt > 10000000) isDone = true; // this is an arbitrary example 
} 

var handle = setInterval(function(){ 
    addPart(); 
    if(isDone){ 
     clearInterval(handle); 
    } 
}, 20); 
+0

这是很好的分裂,但他也想增加throbber ...所以除了你的分裂,这个问题的答案 - http://*.com/questions/357323/showing-a-throbber -during-html-page-load-and-rendering/417710#417710应该帮助他获得他想要的位置。 – 2010-12-17 21:30:53

我猜你发布了一些数据,在服务器上生成CSV,设置内容类型并等待浏览器的保存对话框出现。正确?

在这种情况下,我想你会感到失望。我花了很长一段时间试图找到能够解决这个问题的事件,但我无法弄清楚。我终于必须做一些令人费解的事情,比如使用XHR来轮询文件创建的状态。一旦我得到了我想要的回应,我就隐藏了心跳,并请求了CSV。

更清晰:

  • 显示活动指示器
  • 使用XHR告诉服务器来启动CSV代
  • 使用XHR轮询CSV创建
  • 一旦文件创建的状态已完成:
    • 向指向新创建的CSV的文档中添加一个不可见的iframe,并让服务器将content-disposition标头添加到该文档。
    • 在短暂延迟后隐藏跳动(可以尝试对其进行计时,以便在显示文件保存窗口后,但用户正在与窗口进行交互时隐藏跳动者)。你也可以检测窗口模糊事件来隐藏跳动者,但我很确定这不会很可靠。
+0

这是正确的。 – 2010-12-17 21:25:44

+1

这属于一个评论,而不是一个答案。我知道你还没有足够的代表评论任意问题。 – 2010-12-17 22:43:10

+0

所以我尽我所能。我想我可以帮助OP,但我需要更多的信息。 – Hemlock 2010-12-18 03:17:18