JavaScriptでバイト列をコピーせずに共有してサイズを増やしたり減らしたりしたときは ArrayBuffer.transfer が使えるけど、どのブラウザもサポートされてない
パフォーマンスのためにバイト列をコピーせずにサイズを大きくしたり小さくしたりしたい時がある。大きくしてそのあとに書き込んだりする。ArrayBuffer.transferというものが見つかるが残念ながら全てのブラウザでサポートされてない。
https://gyazo.com/9807e676805c54ed9d29f508daaec371
code:js
if (!ArrayBuffer.transfer) {
ArrayBuffer.transfer = function(source, length) {
if (!(source instanceof ArrayBuffer))
throw new TypeError('Source must be an instance of ArrayBuffer');
if (length <= source.byteLength)
return source.slice(0, length);
var sourceView = new Uint8Array(source),
destView = new Uint8Array(new ArrayBuffer(length));
destView.set(sourceView);
return destView.buffer;
};
}
正しく機能するはずだが、ただしUint8Array#setやsliceが使われていてコピーされるためパフォーマンスの向上には役立たない。
参考: