Javascript 在移动浏览器上显示大型文本文件
我需要在移动设备浏览器上显示大的ish文本文件(小于10MB)。当前不支持分块下载文件 我现在做的是:Javascript 在移动浏览器上显示大型文本文件,javascript,text-processing,Javascript,Text Processing,我需要在移动设备浏览器上显示大的ish文本文件(小于10MB)。当前不支持分块下载文件 我现在做的是: 下载文件 将文件内容放入标记中 <pre id='text_preview'> </pre> 问题是不能很好地使用单词包装:断开单词CSS进行单词包装。它(显然)以不可接受的方式打断单词,并使显示的文本无法阅读。不换行不是一个选项,因为您不希望水平滚动(而且mobile Safari拒绝在元素上生成水平滚动条) $.get("url/of/text/file.txt"
标记中<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现在我已经实施了一种分块策略,当用户接近文档底部时插入新文本,但由于上述原因,这并不理想(允许对日志文件进行全文搜索)