


Penjelasan terperinci tentang modul Penampan dalam NodeJS_node.js
1, analisis pembukaan
Penampan penimbal yang dipanggil bermaksud "kawasan storan sementara", iaitu bahagian memori yang menyimpan data input dan output buat sementara waktu.
Bahasa JS itu sendiri hanya mempunyai jenis data rentetan dan tiada jenis data binari, jadi NodeJS menyediakan Penimbal pembina global bersamaan dengan String untuk menyediakan operasi pada data binari. Selain membaca fail untuk mendapatkan contoh Penampan, ia juga boleh dibina secara langsung, contohnya:
var penimbal = Penampan baharu([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
Terdapat perbezaan penting antara Penampan dan rentetan. Rentetan adalah baca sahaja, dan sebarang pengubahsuaian pada rentetan menghasilkan rentetan baharu, manakala rentetan asal kekal tidak berubah.
Bagi Penampan, ia lebih seperti tatasusunan bahasa C yang boleh melakukan operasi penunjuk. Sebagai contoh, anda boleh menggunakan kaedah [indeks] untuk mengubah suai bait secara langsung pada kedudukan tertentu.
------------------------------------------------ --------------------------------------------------- --------------------------------------------------- --------------------------------------------------- --- --------------------------------
Kaedah
slice tidak mengembalikan Penampan baharu, sebaliknya mengembalikan penuding ke kedudukan di tengah Penampan asal, seperti ditunjukkan di bawah.[ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]
|
bin bin.slice(2)
Oleh itu, pengubahsuaian kepada Penampan yang dikembalikan melalui kaedah hirisan akan menjejaskan Penampan asal, contohnya:
sub[0] = 0x65;
console.log(buffer); //
Ini sama seperti memohon memori baharu dan menyalin data dalam memori sedia ada. Di bawah adalah contoh.
buffer.copy(dup) ;
dup[0] = 0x48 ;
console.log(buffer); //
console.log(dup) ; //
Ringkasnya, Penampan memanjangkan keupayaan pemprosesan data JS daripada rentetan kepada data binari arbitrari.
Di atas ialah pengenalan ringkas tentang apa itu Penampan Mari kita bincangkan tentang cara menggunakannya dan senario penggunaan khusus.
Dua, mari bercakap tentang Penampan
JavaScript sangat mesra pemprosesan rentetan sama ada bait lebar atau rentetan bait tunggal, ia dianggap sebagai rentetan. Node perlu memproses protokol rangkaian, mengendalikan pangkalan data, memproses gambar, muat naik fail, dsb. Ia juga perlu memproses sejumlah besar data binari Rentetan terbina dalam jauh daripada memenuhi keperluan ini, jadi Penimbal wujud.
Struktur penimbal
Penimbal ialah modul biasa yang menggabungkan Javascript dan C. Bahagian berkaitan prestasi dilaksanakan dalam C, dan bahagian bukan berkaitan prestasi dilaksanakan dalam JavaScript.
Node telah pun memuatkan Penampan ke dalam memori apabila proses bermula dan meletakkannya ke dalam objek global, jadi tidak perlu memerlukan
Objek penimbal: serupa dengan tatasusunan, elemennya ialah dua digit digit perenambelasan.
Peruntukan memori penimbal
Peruntukan memori objek Penampan tidak berada dalam memori timbunan V8 Aplikasi memori dilaksanakan pada tahap C Node.
Untuk menggunakan memori yang diminta dengan cekap, Node menggunakan mekanisme peruntukan papak ialah mekanisme pengurusan memori dinamik yang menggunakan pelbagai sistem pengendalian *nix. Papak mempunyai tiga keadaan:
(1) penuh: status diperuntukkan sepenuhnya
(2) separa: status peruntukan separa
(3) kosong: tiada status diberikan
Penukaran penimbal
Objek penimbal boleh ditukar kepada dan daripada rentetan Jenis pengekodan yang disokong adalah seperti berikut:
ASCII, UTF-8, UTF-16LE/UCS-2, Base64, Binary, Hex
Rentetan untuk Penampan
Penimbal baharu(str, [pengekodan]), lalai UTF-8
buf.write(rentetan, [offset], [panjang], [pengekodan])
Penimbal kepada rentetan
buf.toString([pengekodan], [mula], [tamat])
Jenis pengekodan tidak disokong oleh Penampan
Tentukan sama ada ia disokong oleh Buffer.isEncoding(encoding)
iconv-lite: Pelaksanaan JavaScript tulen, berat lebih ringan, prestasi lebih baik tanpa penukaran C kepada javascript
iconv: Panggil pustaka libiconv C untuk melengkapkan
Penyambungan penimbal
Beri perhatian kepada "res.on('data', function(chunk) {})". boleh dijana ,
Penyelesaian:
(1) Melalui kaedah setEncoding() dalam strim boleh dibaca, kaedah ini membenarkan peristiwa data dihantar bukan lagi sebagai objek Penampan, tetapi sebagai rentetan yang dikodkan, yang menggunakan modul StringEncoder secara dalaman.
(2) Simpan objek Penampan ke dalam tatasusunan buat sementara waktu, dan akhirnya pasangkannya ke dalam Penampan yang besar dan kemudian kodkannya ke dalam rentetan untuk output.
Penimbal digunakan secara meluas dalam fail I/O dan rangkaian I/O Prestasinya sangat penting, dan prestasinya jauh lebih tinggi daripada rentetan biasa.
Selain kehilangan prestasi dalam menukar rentetan, penggunaan Buffer mempunyai tetapan highWaterMark yang penting untuk prestasi semasa membaca fail.
a. Tetapan highWaterMark mempunyai kesan tertentu pada peruntukan dan penggunaan memori Penampan.
b. Menetapkan highWaterMark terlalu kecil boleh mengakibatkan terlalu banyak panggilan sistem.
Bila hendak menggunakan penimbal dan bila tidak menggunakannya ------ Javascript tulen menyokong kod unicode tetapi bukan binari Apabila berurusan dengan strim TCP atau strim fail, adalah perlu untuk memproses strim tersebut. utf-8, binari dan format lain, kita mesti menggunakan "Buffer".
3. Pengenalan contoh
var buf = new Buffer("ini adalah ujian concat teks !") ,str = "ini ialah ujian concat teks ;
console.time("buffer concat test !");
senarai var = [] ;
var len = 100000 * buf.length ;
untuk(var i=0;i<100000;i ){
List.push(buf) ;
len = buf.length ;
}
var s1 = Buffer.concat(senarai, len).toString() ;
console.timeEnd("buffer concat test !") ;
console.time("string concat test !") ;
senarai var = [] ;
untuk (var i = 100000; i >= 0; i--) {
List.push(str) ;
}
var s2 = list.join("") ;
console.timeEnd("string concat test !") ;
Berikut ialah keputusannya:
Kelajuan membaca rentetan pasti lebih pantas, dan penimbal juga memerlukan operasi toString(). Oleh itu, apabila kita menyimpan rentetan, kita harus menggunakan rentetan atau rentetan Walaupun rentetan besar disambungkan ke dalam rentetan, kelajuan penyambungannya tidak akan lebih perlahan daripada penampan.
Jadi bila kita perlu menggunakan penimbal lagi? Apabila tidak ada cara lain, apabila kita menyimpan rentetan bukan utf-8, binari dan format lain, kita mesti menggunakannya.
Empat, ringkasan
(1), JavaScript sesuai untuk memproses data yang dikodkan Unicode, tetapi ia tidak mesra pemprosesan data binari.
(2), jadi apabila memproses aliran TCP atau sistem fail, adalah perlu untuk memproses aliran oktet.
(3), Node mempunyai beberapa kaedah untuk memproses, mencipta dan menggunakan aliran oktet.
(4) Data asal disimpan dalam contoh Penampan A adalah serupa dengan tatasusunan integer, tetapi memorinya diperuntukkan di luar tindanan V8. Saiz Penampan tidak boleh diubah.
(5), jenis pengekodan yang diproses ialah: ascii, utf8, utf16le, ucs2 (alias utf16le), base64, binari, hex.
(6), Penampan ialah elemen global, dan anda boleh mendapatkan contoh Penampan secara langsung dengan menggunakan Penampan baharu().

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Perbezaan utama antara Node.js dan Tomcat ialah: Runtime: Node.js adalah berdasarkan masa jalan JavaScript, manakala Tomcat ialah bekas Java Servlet. Model I/O: Node.js menggunakan model tidak menyekat tak segerak, manakala Tomcat menyekat segerak. Pengendalian konkurensi: Node.js mengendalikan konkurensi melalui gelung peristiwa, manakala Tomcat menggunakan kumpulan benang. Senario aplikasi: Node.js sesuai untuk aplikasi masa nyata, intensif data dan konkurensi tinggi, dan Tomcat sesuai untuk aplikasi web Java tradisional.

Node.js ialah masa jalan JavaScript bahagian pelayan, manakala Vue.js ialah rangka kerja JavaScript sisi klien untuk mencipta antara muka pengguna interaktif. Node.js digunakan untuk pembangunan bahagian pelayan, seperti pembangunan API perkhidmatan belakang dan pemprosesan data, manakala Vue.js digunakan untuk pembangunan sisi klien, seperti aplikasi satu halaman dan antara muka pengguna yang responsif.

Node.js boleh digunakan sebagai rangka kerja bahagian belakang kerana ia menawarkan ciri seperti prestasi tinggi, kebolehskalaan, sokongan merentas platform, ekosistem yang kaya dan kemudahan pembangunan.

Terdapat dua fail berkaitan npm dalam direktori pemasangan Node.js: npm dan npm.cmd Perbezaannya adalah seperti berikut: sambungan berbeza: npm ialah fail boleh laku dan npm.cmd ialah pintasan tetingkap arahan. Pengguna Windows: npm.cmd boleh digunakan daripada command prompt, npm hanya boleh dijalankan dari baris arahan. Keserasian: npm.cmd adalah khusus untuk sistem Windows, npm tersedia merentas platform. Cadangan penggunaan: Pengguna Windows menggunakan npm.cmd, sistem pengendalian lain menggunakan npm.

Ya, Node.js ialah bahasa pembangunan bahagian belakang. Ia digunakan untuk pembangunan bahagian belakang, termasuk mengendalikan logik perniagaan sebelah pelayan, mengurus sambungan pangkalan data dan menyediakan API.

Pembolehubah global berikut wujud dalam Node.js: Objek global: modul Teras global: proses, konsol, memerlukan pembolehubah persekitaran Runtime: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Untuk menyambung ke pangkalan data MySQL, anda perlu mengikuti langkah berikut: Pasang pemacu mysql2. Gunakan mysql2.createConnection() untuk mencipta objek sambungan yang mengandungi alamat hos, port, nama pengguna, kata laluan dan nama pangkalan data. Gunakan connection.query() untuk melaksanakan pertanyaan. Akhir sekali gunakan connection.end() untuk menamatkan sambungan.

Node.js dan Java masing-masing mempunyai kebaikan dan keburukan dalam pembangunan web, dan pilihan bergantung pada keperluan projek. Node.js cemerlang dalam aplikasi masa nyata, pembangunan pesat dan seni bina perkhidmatan mikro, manakala Java cemerlang dalam sokongan, prestasi dan keselamatan gred perusahaan.
