Ata*_*Ata 17 javascript memcached node.js
我正准备memcached
着
$memcached->set("item" , ["1" => "hello"]);
Run Code Online (Sandbox Code Playgroud)
任何在PHP中工作,
在带有memcached
插件的Node.js中,我得到一个缓冲区而不是结果中的数组
<Buffer 61 3a 25 61 34 3a>
Run Code Online (Sandbox Code Playgroud)
我无法将这种缓冲区转换为数组
在Node.js中:
memcached.get("item" , function(err, data) {
console.log(data);
}
Run Code Online (Sandbox Code Playgroud)
你有什么办法吗?
小智 36
arr = [...buffer]
除了缓冲区之外,ES6还引入了许多其他功能.
你甚至可以像这样轻松追加:
arr.push(...buffer)
...
在数组中使用时,运算符会扩展数组和缓冲区等可枚举项.它还将它们扩展为单独的函数参数.
是的,它也更快:
...:x100000:835.850ms
来自原型的切片调用:x100000:2118.513ms
var array,
buffer = new Buffer([1, 4, 4, 5, 6, 7, 5, 3, 5, 67, 7, 4, 3, 5, 76, 234, 24, 235, 24, 4, 234, 234, 234, 325, 32, 6246, 8, 89, 689, 7687, 56, 54, 643, 32, 213, 2134, 235, 346, 45756, 857, 987, 0790, 89, 57, 5, 32, 423, 54, 6, 765, 65, 745, 4, 34, 543, 43, 3, 3, 3, 34, 3, 63, 63, 35, 7, 537, 35, 75, 754, 7, 23, 234, 43, 6, 247, 35, 54, 745, 767, 5, 3, 2, 2, 6, 7, 32, 3, 56, 346, 4, 32, 32, 3, 4, 45, 5, 34, 45, 43, 43]),
iter = 100000;
array = buffer;
console.time("... : x" + iter);
for (var i = iter; i--;) array = [...buffer]
console.timeEnd("... : x" + iter);
console.time("Apply/call/etc : x" + iter);
for (var i = iter; i--;) array = Array.prototype.slice.call(buffer, 0)
console.timeEnd("Apply/call/etc : x" + iter);
Run Code Online (Sandbox Code Playgroud)
Dar*_*zer 12
还有另一种方法可以转换为整数数组
使用toJSON()
Buffer.from('Text of example').toJSON()
{ type: 'Buffer',data: [ 84, 101, 120, 116, 32, 111, 102, 32, 101, 120, 97, 109, 112, 108, 101 ] }
// simple get data
Buffer.from('Text of example').toJSON().data
[ 84, 101, 120, 116, 32, 111, 102, 32, 101, 120, 97, 109, 112, 108, 101 ]
Run Code Online (Sandbox Code Playgroud)
基准示例
// I took this from @user4584267's answer
const buffer = new Buffer([1, 4, 4, 5, 6, 7, 5, 3, 5, 67, 7, 4, 3, 5, 76, 234, 24, 235, 24, 4, 234, 234, 234, 325, 32, 6246, 8, 89, 689, 7687, 56, 54, 643, 32, 213, 2134, 235, 346, 45756, 857, 987, 0790, 89, 57, 5, 32, 423, 54, 6, 765, 65, 745, 4, 34, 543, 43, 3, 3, 3, 34, 3, 63, 63, 35, 7, 537, 35, 75, 754, 7, 23, 234, 43, 6, 247, 35, 54, 745, 767, 5, 3, 2, 2, 6, 7, 32, 3, 56, 346, 4, 32, 32, 3, 4, 45, 5, 34, 45, 43, 43]);
let array = null;
const iterations = 100000;
console.time("...buffer");
for (let i = iterations; i=i-1;) array = [...buffer]
console.timeEnd("...buffer");
console.time("array.prototype.slice.call");
for (let i = iterations; i=i-1;) array = Array.prototype.slice.call(buffer, 0)
console.timeEnd("array.prototype.slice.call");
console.time("toJSON().data");
for (let i = iterations; i=i-1;) array = buffer.toJSON().data
console.timeEnd("toJSON().data");
Run Code Online (Sandbox Code Playgroud)
输出
...缓冲:559.932ms
array.prototype.slice.call:1176.535ms
的toJSON()数据:30.571ms
或者,如果您想在 Buffer 中使用更多专业和自定义功能,请使用:
Buffer.prototype.toArrayInteger = function(){
if (this.length > 0) {
const data = new Array(this.length);
for (let i = 0; i < this.length; i=i+1)
data[i] = this[i];
return data;
}
return [];
}
Run Code Online (Sandbox Code Playgroud)
基准示例:
const buffer = new Buffer([1, 4, 4, 5, 6, 7, 5, 3, 5, 67, 7, 4, 3, 5, 76, 234, 24, 235, 24, 4, 234, 234, 234, 325, 32, 6246, 8, 89, 689, 7687, 56, 54, 643, 32, 213, 2134, 235, 346, 45756, 857, 987, 0790, 89, 57, 5, 32, 423, 54, 6, 765, 65, 745, 4, 34, 543, 43, 3, 3, 3, 34, 3, 63, 63, 35, 7, 537, 35, 75, 754, 7, 23, 234, 43, 6, 247, 35, 54, 745, 767, 5, 3, 2, 2, 6, 7, 32, 3, 56, 346, 4, 32, 32, 3, 4, 45, 5, 34, 45, 43, 43]);
let array = null;
const iterations = 100000;
console.time("toArrayInteger");
for (let i = iterations; i=i-1;) buffer.toArrayInteger();
console.timeEnd("toArrayInteger");
Run Code Online (Sandbox Code Playgroud)
输出:
toArrayInteger:28.714ms
注意:在上一个示例中,我从Buffer.toJSON复制了一个函数并将其自定义为 lite
干得好:
var buffer = new Buffer([1,2,3])
var arr = Array.prototype.slice.call(buffer, 0)
console.log(arr)
Run Code Online (Sandbox Code Playgroud)
Ata*_*Ata -3
在interent上,没有这方面的信息,但我找到了转换方法
在nodejs中,我必须使用:
var arrayobject = phpjs.unserialize(data.toString());
Run Code Online (Sandbox Code Playgroud)
但是,这是获取数组的非常愚蠢的方法,似乎php在设置memcache时序列化了数据。
归档时间: |
|
查看次数: |
31820 次 |
最近记录: |