【问题标题】:The difference in space octal/hex vs. ascii takes up in JavaScript fileJavaScript 文件中八进制/十六进制与 ascii 的空间差异
【发布时间】:2019-01-31 00:32:28
【问题描述】:

所以字母a十进制是97,十六进制是61,八进制是141。你可以用 JavaScript 写成这样:

var octal = [ '\141', '\141', '\141' ]
var hex   = [ '\x61', '\x61', '\x61' ]
var ascii = [ 'a', 'a', 'a' ]

它们的结果都是一样的:

console.log(octal) //=> ["a", "a", "a"]
console.log(hex)   //=> ["a", "a", "a"]
console.log(ascii) //=> ["a", "a", "a"]

然而,我想知道的第一部分是,它们实际上是不同数量的 ASCII 字符要定义

'\141' (4)
'\x61' (4)
'a'    (1)

我想知道如果你用八进制或十六进制定义一大块文本,它实际上会占用文件空间的 4 倍。因此,如果您从 /api/resources.json 以八进制返回 JSON 响应,则响应的大小将是您返回 ASCII 时的 4 倍。也就是对此的回应:

'\141\141\141\141\141\141\141\141\141\141\141\141....'

相对于对此的回应:

'aaaaaaaaaaa....'

所以我不确定它是否真的使文件大小/响应大小变大(可能是一个愚蠢的问题,但这个encoding stuff 很难)。只是想确保,是的​​,它会占用更多空间,因为它看起来就是这样。所以基本上,在 JavaScript 文件中写入“原始十六进制/八进制”会导致它变得比 ASCII 更大。

【问题讨论】:

  • 由于 JSON 响应是一个字符串,并且八进制或十六进制在 JSON 中无效,因此您也必须将这些值作为字符串发送。所以,是的,如果你必须将每个字符描述为一个由 4 个字符组成的字符串,那么对我来说这似乎很合乎逻辑,那么文件将大 4 倍左右。只有当您将字符串解析回 String 对象时,它才能在后台更有效地存储。但在那之前,脚本不会知道字符串是八进制还是十六进制。
  • 您的观察是正确的,并且构成了编译语言和解释语言之间差异的一部分。在编译语言中,生成的目标代码是相同的,唯一的大小差异在于源代码。在规模的这一端(即指定单个字符),开销并没有那么大,但是如果您以这种方式定义大量文本,或者执行诸如以 ASCII 格式编码二进制图像文件(例如URL 编码),然后使用的数据变得很重要,影响页面加载时间
  • 原则上是的。如果您使用需要更多字节来表示相同数据的编码来传递数据,那么它会更大,但是如果您使用 express 创建了一个简单的节点服务器并返回一个字符串作为结果,那么该字符串将被编码为相同的不管你如何在你的 js 文件中表达它。

标签: javascript hex ascii octal


【解决方案1】:

js文件存储文本,你写的越多文件越大。

这对于编译语言来说不是问题,因为源代码的目的是生成语法语义合理化的其他语言(中间语言、字节码等)。

javascript 为浏览器编写的文件在分发之前不会被编译,因此文件大小可能是性能方面需要考虑的一个因素。

所以这真的取决于你写javascript 的目的...

如果您是为 NodeJs 运行时环境编写它,则性能差异可以忽略不计。

如果您从 Web 服务器提供 js 文件,其中包含使用十六进制字符表示法定义的大字符串,您可以稍微减少加载时间。

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 2011-12-09
    • 2014-06-10
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多