3

我正在尝试使用动态(ish)无服务器站点(没有数据库、服务器端语言等),这就是我希望只使用 JavaScript/AJAX/jQuery 的原因。我希望能够提供带有静态文件的动态(ish)网页。

我想出的一种解决方案是本质上在与网页相同的服务器上使用文本文件(json、xml)作为数据存储。但我只能找到加载整个文件而不是特定部分的方法。这并不是什么大问题,因为文本文件很小,但是文本文件可能会变得很大。

如果您可以逐行加载文件,客户端的负载会更快,并且 JavaScript 解析会显着加快。

如果我只对新数据感兴趣,我希望在填充文件时可以将数据添加到文件顶部并逐行读取(因为我只对每页 10 行感兴趣)。访问文件中间也非常有用。

我只是想避免将整个文件发送给客户端(不是为了安全,而是为了空间/时间效率)。

有没有办法在 JavaScript 中做到这一点?还是我错过了一个明显的解决方案?

4

2 回答 2

1

我以前没有这样做过,但是您应该有机会查看RangeIf-RangeAccept-Ranges HTTP 标头。

我通过访问http://www.stadt-salzburg.at/的网络服务器做了一个简短的测试。它为起始页的静态 html 文件资源发送Accept-Ranges:bytes响应标头,这意味着它接受 Range-requests。使用 Firefox 扩展Modify Headers然后我指定了请求头Range:bytes=257-2048并且服务器实际上只返回了该文件的请求部分。

根据HTTP 1.1 标头字段规范,您还应该能够确定文件是否已被修改并做一些其他不错的事情 :-) 由于我对 HTTP 标头不是很有经验,所以我想请您看看如果你能达到你想要的结果,你自己。

于 2012-11-06T22:27:06.763 回答
0

几年前我曾研究过同样的问题。JavaScript 本身不会削减它 - 有人请证明我错了。

  1. 以正常方式实时将数据添加到本地文本文件(将新数据附加到末尾)。
  2. 在本地机器上运行一个 cgi 应用程序,它可以一次执行一条记录的 OPEN、SEEK、READ、CLOSE。
  3. 将新/下一个文件偏移量和记录文本返回到在 javascript 中运行的应用程序。
  4. javascript 会记住下一个记录偏移量 - 或者可以将其设置为零以从头开始重新处理整个文件。
  5. javascript 使用下一个记录偏移量调用 cgi。
  6. cgi 应用程序接收请求并执行其 OPEN、SEEK、READ、CLOSE。如果没有可用的新数据,则读取将加载零字节,并且 cgi 应用程序可以返回相同的偏移量和空白记录。

我希望你能看到上面的步骤可以按照你的 JavaScript 想要的速度重复,只要它想要。

于 2012-11-06T22:06:44.783 回答