Javascript 在移动浏览器上显示大型文本文件

Javascript 在移动浏览器上显示大型文本文件,javascript,text-processing,Javascript,Text Processing,我需要在移动设备浏览器上显示大的ish文本文件(小于10MB)。当前不支持分块下载文件 我现在做的是: 下载文件 将文件内容放入标记中 <pre id='text_preview'> </pre> 问题是不能很好地使用单词包装:断开单词CSS进行单词包装。它(显然)以不可接受的方式打断单词,并使显示的文本无法阅读。不换行不是一个选项,因为您不希望水平滚动(而且mobile Safari拒绝在元素上生成水平滚动条) $.get("url/of/text/file.txt"

我需要在移动设备浏览器上显示大的ish文本文件(小于10MB)。当前不支持分块下载文件

我现在做的是:

  • 下载文件
  • 将文件内容放入
    标记中
  • <pre id='text_preview'>
    </pre>
    
    问题是
    不能很好地使用
    单词包装:断开单词
    CSS进行单词包装。它(显然)以不可接受的方式打断单词,并使显示的文本无法阅读。不换行不是一个选项,因为您不希望水平滚动(而且mobile Safari拒绝在
    元素上生成水平滚动条)

    $.get("url/of/text/file.txt", function(response) {
        var fileText = response, pageNumber = 1, pageSize = 105600;
        //first 100 kb of content, assuming 8 bytes/char
        //don't have exact value for this, using approx
        $('#text_preview').text(fileText.slice(0, pageNumber * pageSize);
        window.onscroll = function() {
           //implementation of this left as an exercise for the reader
           if(scrollNearBottom()) {
              pageNumber++;
              $("#text_preview").append(fileText.slice((pageNumber - 1) * pageSize, pageNumber * pageSize);
           }
        }
    });
    
    将纯文本转换为等价的HTML,然后将所述HTML插入DOM需要花费很长时间(插入是这里的瓶颈;转换时间为毫秒)

    关于如何在移动设备上以可接受的方式显示纯文本,有什么想法吗

    编辑:
    删除了关于使用web workers的部分,因为它无法进行DOM操作,当时我认为文本处理是瓶颈

    假设您显示的文档是日志文件

    以某种方式跟踪文件,例如,只取最后1k行。使用javascript加载并使每一行成为列表中的一个条目,然后使用css或javascript在交替元素上添加背景色。这使得换行变得无关紧要,而不需要添加水平滚动


    文档顶部有一个输入元素,其内容用于过滤列表。每当输入元素的内容发生更改时,列表中与之不匹配的元素(作为正则表达式)将被隐藏,并重新应用色带。如果不能一次显示整个文件,可以根据筛选框的内容重新请求文件(可能需要按下另一个按钮)

    我的做法如下:


    显然,这无助于我使用Ctrl+F查找文本,但确实满足了我能够显示大型电子书的要求。

    这里有很多选项,但基本上你需要一些方法来进行分块的HTML转换。实现这一点的最佳方式取决于数据的显示方式和使用方式。也许你会想提出一个将它分成几页的方案。你的要求似乎很繁重。10MB的纯文本大约是1500000字,这至少是几天的阅读时间。即使1MB也是数小时的阅读,这在移动设备上似乎是永远的。我认为您需要一个非常高效的策略。您可能希望使用Java小程序帮助程序绕过浏览器的限制,以便部分下载该文件。@RobG我同意,对于电子书(Anna Karenina的纯文本大小仅为3 MB)来说,要求似乎很繁重,但与日志文件不同。的确,在今天的大多数移动浏览器中,不能在页面中使用Ctrl+F,但将来可能会发生变化。@hobberwickey现在我已经实施了一种分块策略,当用户接近文档底部时插入新文本,但由于上述原因,这并不理想(允许对日志文件进行全文搜索)