我正在测试一些自定义数据格式,以便在我的服务器和客户端的浏览器之间发送。我想确保我的数据和我想象的一样小,所以我做了一些测试,结果很困惑。
<a itemprop="image" title="portfolio-single-13" data-rel="prettyPhoto[single_pretty_photo]" href="http://tile.johnzuh.com/wp-content/uploads/2016/09/portfolio-single-13.jpg">
<img itemprop="image" src="http://tile.johnzuh.com/wp-content/uploads/2016/09/portfolio-single-13.jpg" alt="s" />
</a>
在服务器上,我创建了一个160,000,000字节的ArrayBuffer。然后我用一个20,000,000浮点64的“数组”填充缓冲区。每个float64是8个字节,所以20,000,000 * 8 = 160,000,000。至少,我认为这是如何运作的,但如果我的假设错了,请纠正我。
接下来,我连接到我的网页,当我点击一个按钮时,服务器使用Socket.io向我发送bufArr,它看起来像这样:
var bufArr = new ArrayBuffer(160000000);
var bufView = new Float64Array(bufArr);
for(i=0; i<20000000; i++) {
bufView[i] = 5.632 + i
}
所以理论上我应该发送大约160MB。但我发现它只发送大约23MB。客户端实际上获取了完整的数据,我控制台记录它,并查看它,它是准确的。例如:
socket.on('test1', function(data) {
socket.emit("test2", bufArr)
})
左边的数字是索引,所以如果i = 19989999,那么我们添加5.632并得到19990004.6,这对每个索引都是如此,所以没有数据丢失或任何东西。
所以我收到了20,000,000个浮点数,应该是160MB,但是当我检查我的网络监控工具(Windows 10设置,任务管理器,还有我的路由器流量分析页面)时,所有人都说我收到了大约23MB 。
我对ArrayBuffers和Float64Arrays的理解是不正确的,还是在socketio中发生了一些神奇的事情,或者我的路由器使传输大小明显降低了?