使用jQuery get()加载大型文本文件的最佳实践

Bri*_*nic 5 javascript jquery text get

目前我将get的结果存储在一个字符串中,因为我打开的文件是纯文本文件,大小为3MB到20MB.

然后我解析这个字符串并修改它,以便最终结果可以以html格式输出.

我只是在寻找一个健全性检查,看看以这种方式加载是否是最好的方法?

此外,有没有办法加载目标文本文件的大块,解析块,请求另一个块等.有点像音乐播放器在播放歌曲时缓冲歌曲.

谢谢

Che*_*eso 9

有没有办法加载目标文本文件的大块,解析块,请求另一个块等.

要检索资源的一部分(或块),请使用HTTP Range标头.大多数Web服务器正确地尊重此标头.

示例HTTP请求:

GET /resource/url/path HTTP/1.1\r\n
User-agent: whatever\r\n
Host: www.example.com\r\n
Range: bytes=0-3200\r\n\r\n
Run Code Online (Sandbox Code Playgroud)

更新:

使用jQuery,v1.5及更高版本,您可以告诉jQuery为单个ajax调用发送额外的HTTP标头,如下所示:

    $.ajax({type: "GET",
            url: url,
            headers : { "Range" : 'bytes=0-3200' },
            ....
Run Code Online (Sandbox Code Playgroud)

如果你不想修改每个$.ajax()电话,Stofke说你可以使用"beforeSend"fn.像这样的东西:

  $.ajaxSetup({ beforeSend : function(xhr) {
        xhr.setRequestHeader("Range", "bytes=0-3200" );
  }});      
Run Code Online (Sandbox Code Playgroud)

使用时$.ajaxSetup(),您需要为每个附加调用修改该范围标题.

我不知道告诉jQuery自动加载资源的方法.我想你必须在ajax调用的success()中使用setTimeout()或其他东西自己做.每次收到响应时,调用setTimeout()并进行下一次ajax调用.您的浏览器驻留Javascript将需要跟踪您已检索到的文件的哪些部分,以及您希望接下来的哪个部分(字节索引).

另一种方法是只在你的应用程序准备就绪时才进行ajax调用.而不是等待来自ajax调用的success(),只需在完成第一个范围检索的结果处理后进行ajax调用.

另外:为了支持算术目的,在进行第一次GET之前,您可以使用HEAD调用来学习资源的长度,这将告诉您可以使用的范围内的最大索引.