Node.js Undocumented(1)
Node.js Undocumented(2)
鍐欒繖縐嶇郴鍒梑log錛屾槸涓轟簡(jiǎn)鐩戠潱鑷繁錛屼笉鐒舵垜浼拌鎴戜笉浼?xì)鏈夊姩鍔涘啓瀹屻傝繖涓鑺傦紝鎴戝皢浠嬬粛涓婤uffer榪欎釜module銆俲s鏈韓瀵規(guī)枃鏈弸濂斤紝浣嗘槸澶勭悊浜岃繘鍒舵暟鎹氨涓嶆槸鐗瑰埆鏂逛究錛屽洜姝ode.js鎻愪緵浜?jiǎn)Buffer妯″潡鏉ュ府鍔╀綘澶勭悊浜岃繘鍒舵暟鎹紝姣曠珶node.js鐨勫畾浣嶅湪緗戠粶鏈嶅姟绔紝涓嶈兘鍙鏂囨湰鍗忚鍙嬪ソ銆?br />
Buffer妯″潡鏈韓鍏跺疄娌℃湁澶氬皯鏈叕寮鐨勬柟娉曪紝閲嶈鐨勬柟娉曢兘鍦ㄦ枃妗i噷鎻愬埌浜?jiǎn)锛屾湁涓や釜鏂规硶绋嶅井鍊肩殑鎻愪笅銆?br />
Buffer.get(idx)
璺焍uffer[idx]鏄竴鏍風(fēng)殑錛岃繑鍥炵殑鏄idx涓瓧鑺傦紝榪斿洖鐨勭粨鏋滄槸鏁板瓧錛屽鏋滆杞垚瀛楃錛岀敤String.fromCharCode(code)鍗沖彲銆?br />
Buffer.inspect()
榪斿洖Buffer鐨勫瓧絎︿覆琛ㄧず錛屾瘡涓瓧鑺傜敤鍗佸叚榪涘埗琛ㄧず錛屽綋浣犺皟鐢╟onsole.dir鐨勬椂鍊欐墦鍗扮殑灝辨槸榪欎釜鏂規(guī)硶榪斿洖鐨勭粨鏋溿?br />
Buffer鐪熸鍊肩殑涓鎻愮殑鏄畠鐨勫唴閮ㄥ疄鐜般侭uffer鍦╪ode.js鍐呴儴鐨刢pp浠g爜瀵瑰簲鐨勬槸SlowBuffer綾伙紙src/node_buffer.cc)錛屼絾鏄袱鑰呬箣闂村茍涓嶆槸涓涓瀵瑰簲銆?strong>瀵逛簬鍒涘緩灝忎簬8K鐨凚uffer錛屽叾瀹炴槸浠庝竴涓猵ool閲宻lice鍑烘潵錛屽彧鏈夊ぇ浜?K鐨凚uffer鎵嶆槸姣忔閮絥ew涓涓猄lowBuffer銆傛煡鐪嬫簮鐮侊紙lib/buffer.js)錛?span style="color: #000000;">
Buffer.poolSize = 8 * 1024;
if (this.length > Buffer.poolSize) {
// Big buffer, just alloc one.
this.parent = new SlowBuffer(this.length);
this.offset = 0;
} else {
// Small buffer.
if (!pool || pool.length - pool.used < this.length) allocPool();
this.parent = pool;
this.offset = pool.used;
pool.used += this.length;
}
鍥犳錛屾垜浠彲浠ヤ慨鏀笲uffer.poolSize榪欎釜“闈?rùn)鎬?#8221;鍙橀噺鏉ユ敼鍙樻睜鐨勫ぇ灝?br />
Buffer.poolSize
Buffer綾誨垱寤虹殑姹犲ぇ灝忥紝澶т簬姝ゅ煎垯姣忔new涓涓猄lowBuffer錛屽惁鍒欎粠姹犱腑slice榪斿洖涓涓狟uffer錛屽鏋滄睜鍓╀綑絀洪棿涓嶅錛屽垯鏂板垱寤轟竴涓猄lowBuffer鍋氫負(fù)姹犮備笅闈㈢殑渚嬪瓙鎵撳嵃榪欎釜鍊煎茍淇敼鎴?6K:
console.log(Buffer.poolSize);
Buffer.poolSize=16*1024;
SlowBuffer綾?/strong>
SlowBuffer綾繪垜浠彲浠ョ洿鎺ヤ嬌鐢ㄧ殑錛屽鏋滀綘涓嶆兂浣跨敤Buffer綾葷殑璇濓紝SlowBuffer綾繪湁Buffer妯″潡鐨勬墍鏈夋柟娉曞疄鐜幫紝渚嬪瓙濡備笅錛?br />var SlowBuffer=require('buffer').SlowBuffer
var buf=new SlowBuffer(1024)
buf.write("hello",'utf-8');
console.log(buf.toString('utf-8',0,5));
console.log(buf[0]);
var sub=buf.slice(1,3);
console.log(sub.length);
璇鋒敞鎰忥紝SlowBuffer榛樿涓嶆槸Global鐨勶紝闇瑕乺equire buffer妯″潡銆?br />
浣跨敤寤鴻鍜屾ц兘嫻嬭瘯
Buffer鐨勮繖涓疄鐜板憡璇夋垜浠紝瑕佷嬌鐢ㄥソBuffer綾昏繕鏄湁璁茬┒鐨勶紝姣忔鍒涘緩灝忎簬8K鐨凚uffer鏈濂藉ぇ灝忓垰濂借兘琚?k鏁撮櫎錛岃繖鏍瘋兘鍏呭垎鍒╃敤絀洪棿錛涙垨鑰呮瘡嬈″垱寤哄ぇ浜?K鐨凚uffer錛屽茍鍏呭垎閲嶇敤銆傛垜浠潵鐪嬩竴涓ц兘嫻嬭瘯錛屽垎鍒驚鐜?000涓囨鍒涘緩16K,4096鍜?097澶у皬鐨凚uffer錛岀湅鐪嬭楁椂澶氬皯錛?br />function benchmark(size,repeats){
var total=0;
console.log("create %d size buffer for %d times",size,repeats);
console.time("times");
for(var i=0;i<repeats;i++){
total+=new Buffer(size).length;
}
console.timeEnd("times");
}
var repeats=10000000;
console.log("warm up
")
benchmark(1024,repeats);
console.log("start benchmark")
benchmark(16*1024,repeats);
benchmark(4096,repeats);
benchmark(4097,repeats);
鍒涘緩1024鐨凚uffer鏄負(fù)浜?jiǎn)鍋歸arm up銆傚湪鎴戞満鍣ㄤ笂鐨勮緭鍑猴細(xì)
start benchmark
create 16384 size buffer for 10000000 times
times: 81973ms
create 4096 size buffer for 10000000 times
times: 80452ms
create 4097 size buffer for 10000000 times
times: 138364ms
鍒涘緩4096鍜屽垱寤?097澶у皬鐨凚uffer錛屽彧宸簡(jiǎn)涓涓瓧鑺傦紝鑰楁椂鍗寸浉宸潪甯稿ぇ錛屼負(fù)浠涔堜細(xì)榪欐牱錛熻鑰呭彲浠ヨ嚜宸辨牴鎹笂闈㈢殑浠嬬粛鍒嗘瀽涓嬶紝鏈夊叴瓚g殑鍙互鐣欒█銆?br /> 鍙﹀錛屽彲浠ョ湅鍒板垱寤?6K鍜屽垱寤?K澶у皬鐨凚uffer錛屽樊璺濋潪甯稿皬錛屽鉤鍧囨瘡縐掗挓閮借兘鍒涘緩10涓囦釜浠ヤ笂鐨凚uffer錛岃繖涓晥鐜囧凡緇忚凍浠ユ弧瓚崇粷澶у鏁扮綉緇滃簲鐢ㄧ殑闇姹傘?br />
]]>