字符串是小于还是大于包含相同值的整数?

时间:2014-04-11 09:47:47

标签: javascript json performance

我们需要保存服务器带宽以发送和接收json文件,而不是这个长响应:

(...)
        {
            var serverResponse = JSON.parse(xml.responseText);

             switch(serverResponse.votestatus)
             {
                case 'image_deleted':
                    console.log("image deleted");
                break;

                case 'image_not_found':
                    console.log("image not found");
                break;
             }
        }
(...)

我们缩短这样的字符串(2个字符串是一个字符串的两倍):

        {
            var serverResponse = JSON.parse(xml.responseText);

             switch(serverResponse.votestatus)
             {
                //image deleted
                case '1':
                    console.log("image deleted");
                break;
                //image not found
                case '2':
                    console.log("image not found");
                break;
             }
        }

问题是字符串大小比整数更大吗?是这个

var a = "1";

尺寸大于此?

var a = 1;

4 个答案:

答案 0 :(得分:3)

对于bandwith,文件大小很重要。

是的,在文本文件中1"1"小两个字节。

但你确定这是值得的吗?

在尝试手动执行此操作之前,请先查看Javascript minifiers和gzip压缩。


好的,走这条路:

如果您愿意

{ "voteStatus": 1 }

{ "voteStatus" : "1" }

为什么不

{ "vs": 1 }

甚至

[ 1 ]

答案 1 :(得分:3)

这很容易测量,应该测量!

实施例

在浏览器中打开调试器(例如Firebug with Firefox),激活网络选项卡,然后使用JSON结果调用REST API,例如

https://freegeoip.net/json/www.bp.com

https://freegeoip.net/json/www.bp.com

您将看到内容大小(此处235个字节对应于JSON结果的三行)。

enter image description here

请注意,HTTP标头也会对接收的总网络流量(此处为421字节)做出贡献。 您可以通过将鼠标指针移动到尺寸列上来触发工具提示来查看这些尺寸。

因此,这里也提到了其他答案,不仅要考虑JSON有效负载的大小,还要考虑其他影响,如HTTP头或传输压缩模块。

答案 2 :(得分:1)

参考this帖子。在javascript内存中字符串每个字符占用2个字节,而数字占用8个字节。这意味着您减少了已解析的JSON对象的大小,但如果您的目标是节省带宽,那么在HTTP请求/响应中,所有对象都将作为字符串发送,因此带宽不能依赖于对象类型。 在尝试节省带宽时:您的服务器是否使用gzip?

答案 3 :(得分:0)

“这取决于”。

在内存中,单个数字字符串更短(16位)(在utf16中)。 number是uint32(或者像浮点数这样的大数字的两倍)。这至少是32位。

但是,您需要“节省服务器带宽”。所以这并不重要,所有内容都以“字符串”发送,大小取决于服务器和客户端之间的协商。如果你的http标头是正确的,将使用utf8(8位),它将被gzip压缩。

此外,我在代码中看到:“JSON.parse(xml.responseText)”。

如果在xml中发送响应,则开销非常大,就像 <stuff>1</stuff>

它包含在JSON中:
{response: "<stuff>1</stuff>"};

向xml和json添加标题,你会有很多东西。发送原始文本值可能是您的最佳选择。