【问题标题】:What is the fastest way to deliver binary data to browser?将二进制数据传送到浏览器的最快方法是什么?
【发布时间】:2012-04-14 22:25:44
【问题描述】:

我想向浏览器提供自定义二进制数据。它们实际上是图像,但我需要提供同一图像的多个版本 + 一些元数据。网络性能应该通过只使用一个 GET 请求来实现,并且应该在浏览器中快速解包。到目前为止,我可以想到这些解决方案:

  • 图像精灵(元数据呢?)
  • 邮编
  • 消息包
  • JSON + base64 编码

我不关心

【问题讨论】:

  • 如果图像是无损压缩的,您可以创建一个图像精灵并向精灵添加一个区域,您可以在其中存储元数据(在像素值内)。然后,您将使用 +JS 来读取像素值,从而读取元数据。
  • 如果 OTOH,图像是 JPG 压缩的,您仍然可以使用相同的技巧:只需使用 8x8 对齐的恒定像素块,您应该一切顺利。
  • 你想用二进制数据制作一个可下载的文件吗?如果是这样,HTML5 有一个很好的 API。缺点是浏览器支持。

标签: javascript performance html binary


【解决方案1】:

这取决于数据结构,但如果您需要在 JavaScript 中处理这些数据 - 有两种(三种)方法可以实现这一点

  • JSON + base64 或转义特殊字符
  • XML + base64 或转义(根据偏好选择其中之一)
  • 更难,但最有效 - 带有转义 0 字符和特殊标记的纯文本(制作三个特殊代码 - 0x20 0x40 用于 0x00 字符,0x20 0x41 作为标记,0x20 0x42 用于 0x20)

【讨论】:

  • 我不喜欢使用 base64 编码来克服 JSON 或 XML 限制的想法。你能再解释一下第三个选项吗?
  • 如果您使用json,则无需使用base64,只需转义一些特殊代码(例如XML中的CDATA的0和]或json中的\0、\r、\n、\' -这可能就足够了)。第三种选择是把数据打包成OWN格式(完全二进制/0x20 0x41在数据端),替换特殊代码,发送,用JavaScript处理 - 用0x20 0x41('A')分割
  • 了解更多关于 msgpack 的信息——它最适合数据大小,但不稳定
【解决方案2】:

事实证明,今天(以及不久的将来 - IE9)浏览器对二进制数据的支持非常差,所以无论您决定使用什么,都必须将其编码(可编码?)为 Javascript 字符串,即。 JSON+base64。

对于好奇的人:http://status-501.tumblr.com/post/20293218962/delivering-binary-data-to-browser

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多