Node.js рдореЗрдВ рдХреБрд╢рд▓ рдореЗрдореЛрд░реА рд╣реИрдВрдбрд▓рд┐рдВрдЧ

рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рд░реИрдВрдбрдо рдПрдХреНрд╕реЗрд╕ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, Node.js рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреИрдорд╛рдиреЛрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╕рдВрдЧрдарди рд╣рдореЗрд╢рд╛ рдПрдХ рдХрдард┐рди рдФрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХрд╛рд░реНрдп рд╣реИред рдЗрд╕реА рд╕рдордп, рдЕрдЧрд░ C рдФрд░ C ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдмрд╣реБрдд рдХрд╕рдХрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, JS рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддрдВрддреНрд░ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХреБрд╢рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред Node.js рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкреВрд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдЪрд▓рддрд╛ рд╣реИред



рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ Node.js. рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧреАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдзрд╛рд░рд╛рдПрдВ, рдмрдлрд╝рд░реНрд╕ рдФрд░ pipe() рд╕реНрдЯреНрд░реАрдо рд╡рд┐рдзрд┐ рдЬреИрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдкрд░ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ Node.js v8.12.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╡рд╛рд▓рд╛ рдПрдХ рднрдВрдбрд╛рд░ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдХрд╛рд░реНрдп: рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛


рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ Node.js рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рддреБрд░рдВрдд рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЬреИрд╕реЗ рдХреБрдЫ рд▓рд┐рдЦ рджреЗрдЧрд╛ред рд╣рдо рдЗрд╕ рдХреЛрдб рд╡рд╛рд▓реА рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдо basic_copy.js ред

 const fs = require('fs'); let fileName = process.argv[2]; let destPath = process.argv[3]; fs.readFile(fileName, (err, data) => {   if (err) throw err;   fs.writeFile(destPath || 'output', data, (err) => {       if (err) throw err;   });     console.log('New file has been created!'); }); 

рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдмреИрдХрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ (рд╣рдо 4 рдЬреАрдмреА рд╕реЗ рдмрдбрд╝реА "рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ" рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ 7.4 GB рдЖрдХрд╛рд░ рдХреА рдПрдХ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ Documents рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдпрд╣рд╛рдБ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 $ node basic_copy.js cartoonMovie.mkv ~/Documents/bigMovie.mkv 

рдЙрдмрдВрдЯреВ рдореЗрдВ, рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 /home/shobarani/Workspace/basic_copy.js:7   if (err) throw err;            ^ RangeError: File size is greater than possible Buffer: 0x7fffffff bytes   at FSReqWrap.readFileAfterStat [as oncomplete] (fs.js:453:11) 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдлрд╝рд╛рдЗрд▓ рд░реАрдб рдСрдкрд░реЗрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рдХрд┐ Node.js рдХреЗрд╡рд▓ 2 рдЬреАрдмреА рдбреЗрдЯрд╛ рдХреЛ рдмрдлрд░ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░ рдХрд░реЗрдВ? рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╕рдордп рдЬреЛ рдЧрд╣рди рд░реВрдк рд╕реЗ I / O рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛, рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛, рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛), рд╕рд┐рд╕реНрдЯрдо рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рд╕реНрдореГрддрд┐ рд╕реЗ рдЬреБрдбрд╝реА рд╕реАрдорд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

Node.js рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдФрд░ рдмрдлрд░


рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЗрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдПрдХ рдмрдлрд░ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдбрд┐рд╕реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкрдврд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЕрд╡рд╕рд░ рд╣рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдмрдлрд╝рд░реНрд╕ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

тЦНBufery


Buffer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдХреЗ рдПрдХ рдмрдлрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 let buffer = new Buffer(10); // 10 -    console.log(buffer); //  <Buffer 00 00 00 00 00 00 00 00 00 00> 

8 рд╡реЗрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Node.js рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдмрдлрд╝рд░реНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:

 let buffer = new Buffer.alloc(10); console.log(buffer); //  <Buffer 00 00 00 00 00 00 00 00 00 00> 

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдбреЗрдЯрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣, рддреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдмрдлрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 let name = 'Node JS DEV'; let buffer = Buffer.from(name); console.log(buffer) //  <Buffer 4e 6f 64 65 20 4a 53 20 44 45 5> 

рдмрдлрд╝рд░ рдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЙрдирдореЗрдВ "рджреЗрдЦрдиреЗ" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ toJSON() рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рд╣реИ - рдпреЗ toString() рдФрд░ toJSON() рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред

рд╣рдо, рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕реНрд╡рдпрдВ рдмрдлрд╝рд░реНрд╕ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗред Node.js рд╕реНрдЯреНрд░реАрдо рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЗрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред

тЦН рдзрд╛рд░рд╛рдПрдБ


рдзрд╛рд░рд╛рдУрдВ, рдЕрдЧрд░ рд╣рдо рд╡рд┐рдЬреНрдЮрд╛рди рдХрдерд╛ рдХреА рднрд╛рд╖рд╛ рдХреА рдУрд░ рд░реБрдЦ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреЛрд░реНрдЯрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рджреБрдирд┐рдпрд╛ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреА рдзрд╛рд░рд╛рдПрдБ рд╣реИрдВ:

  • рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдзрд╛рд░рд╛ (рдбреЗрдЯрд╛ рдЗрд╕реЗ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
  • рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо (рдбреЗрдЯрд╛ рдЗрд╕реЗ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
  • рдбреБрдкреНрд▓реЗрдХреНрд╕ рд╕реНрдЯреНрд░реАрдо (рдпрд╣ рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИ)ред
  • рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдорд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо (рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреБрдкреНрд▓реЗрдХреНрд╕ рд╕реНрдЯреНрд░реАрдо рдЬреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВ рдпрд╛ рдЗрд╕рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ)ред

рд╣рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Node.js рдореЗрдВ рд╕реНрдЯреНрд░реАрдо API рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдХреНрд╖реНрдп, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ stream.pipe() рд╡рд┐рдзрд┐, рдбреЗрдЯрд╛ рдмрдлрд░рд┐рдВрдЧ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░реЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрд░реЛрддреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ, рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА рдХреЛ рдУрд╡рд░рдлреНрд▓реЛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред


рдзрд╛рд░рд╛рдПрдБ рдФрд░ рдмрдлрд╝рд░ (Node.js рдкреНрд░рд▓реЗрдЦрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд)

рдкрд┐рдЫрд▓реЗ рдЖрд░реЗрдЦ рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдзрд╛рд░рд╛рдПрдБ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ - рдкрдардиреАрдп рдзрд╛рд░рд╛рдПрдБ рдФрд░ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдзрд╛рд░рд╛рдПрдБред pipe() рд╡рд┐рдзрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдб рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рдпреЛрдЬрдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрдм рд╣рдо pipe() рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рд╕рдорд╛рдзрд╛рди 1. рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛


рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдКрдкрд░ рдмрд╛рдд рдХреА рдереАред рдпрд╣ рд╕рдорд╛рдзрд╛рди рджреЛ рдзрд╛рдЧреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

  • рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдЧрд▓рд╛ рдЯреБрдХрдбрд╝рд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
  • рд╣рдо рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
  • рд╣рдо рдХреЙрдкреА рдСрдкрд░реЗрд╢рди рдХреА рдкреНрд░рдЧрддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ streams_copy_basic.js ред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:

 /*         . : Naren Arya */ const stream = require('stream'); const fs = require('fs'); let fileName = process.argv[2]; let destPath = process.argv[3]; const readable = fs.createReadStream(fileName); const writeable = fs.createWriteStream(destPath || "output"); fs.stat(fileName, (err, stats) => {   this.fileSize = stats.size;   this.counter = 1;   this.fileArray = fileName.split('.');     try {       this.duplicate = destPath + "/" + this.fileArray[0] + '_Copy.' + this.fileArray[1];   } catch(e) {       console.exception('File name is invalid! please pass the proper one');   }     process.stdout.write(`File: ${this.duplicate} is being created:`);     readable.on('data', (chunk)=> {       let percentageCopied = ((chunk.length * this.counter) / this.fileSize) * 100;       process.stdout.clearLine();  //          process.stdout.cursorTo(0);       process.stdout.write(`${Math.round(percentageCopied)}%`);       writeable.write(chunk);       this.counter += 1;   });     readable.on('end', (e) => {       process.stdout.clearLine();  //          process.stdout.cursorTo(0);       process.stdout.write("Successfully finished the operation");       return;   });     readable.on('error', (e) => {       console.log("Some error occurred: ", e);   });     writeable.on('finish', () => {       console.log("Successfully created the file copy!");   });  }); 

рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдкрд╣рд▓реА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рд╣реИ, рджреВрд╕рд░реА рдЗрд╕рдХреА рднрд╡рд┐рд╖реНрдп рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХрд╛ рдирд╛рдо рд╣реИред рд╣рдо рджреЛ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреЗ рд╣реИрдВ - рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реАрдо рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реАрдо, рдкрд╣рд▓реЗ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рдбреЗрдЯрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рддрдВрддреНрд░ рднреА рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо рдпрд╣рд╛рдВ рдИрд╡реЗрдВрдЯ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  • data - data рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкрдврд╝рддреЗ рд╕рдордп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • end - рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рд░реАрдб рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • error - рдЕрдЧрд░ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ 7.4 рдЬреАрдмреА рдлрд╛рдЗрд▓ рдХреЙрдкреА рдХреА рдЬрд╛рддреА рд╣реИред

 $ time node streams_copy_basic.js cartoonMovie.mkv ~/Documents/4kdemo.mkv 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрдХрд░ рдЗрд╕рдХреА рдкрд╣рдЪрд╛рди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред


рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ node рдкреНрд░рдХреНрд░рд┐рдпрд╛, 88% рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, 4.6 рдЬреАрдмреА рдореЗрдореЛрд░реА рд▓реЗрддреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рд╕реНрдореГрддрд┐ рдХреЗ рдРрд╕реЗ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдХрд╛рдо рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Consumption рдЕрддреНрдпрдзрд┐рдХ рд╕реНрдореГрддрд┐ рдЦрдкрдд рдХреЗ рдХрд╛рд░рдг


рдкрд┐рдЫрд▓реЗ рдЪрд┐рддреНрд░рдг рд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ ( Disk Read рдФрд░ Disk Write рдХреЙрд▓рдо)ред рдЕрд░реНрдерд╛рддреН, рдпрд╣рд╛рдБ рдЖрдк рдирд┐рдореНрди рд╕рдВрдХреЗрддрдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 Disk Read: 53.4 MiB/s Disk Write: 14.8 MiB/s 

рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рддрдирд╛ рд░рд┐рд╕реАрд╡рд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЗ рдРрд╕реЗ рд╕рдВрдХреЗрддрдХ рджреЗрдЦрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо 3 рдорд┐рдирдЯ 16 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рд╛ред рдЗрд╕рдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рджреА рдЧрдИ рд╣реИ:

 17.16s user 25.06s system 21% cpu 3:16.61 total 

рд╕рдорд╛рдзрд╛рди 2. рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рдФрд░ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд╕рд╛рде


рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реЛ рдЬрд╛рдПред рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рд╡рд╛рдкрд╕ рджрдмрд╛рд╡ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, pipe() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд░реАрдб рд╕реНрдЯреНрд░реАрдо рдХреЛ рд░рд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ Node.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдЧрддрд┐ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдЧрд╛ред

рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ streams_copy_efficient.js рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:

 /*          pipe(). : Naren Arya */ const stream = require('stream'); const fs = require('fs'); let fileName = process.argv[2]; let destPath = process.argv[3]; const readable = fs.createReadStream(fileName); const writeable = fs.createWriteStream(destPath || "output"); fs.stat(fileName, (err, stats) => {   this.fileSize = stats.size;   this.counter = 1;   this.fileArray = fileName.split('.');     try {       this.duplicate = destPath + "/" + this.fileArray[0] + '_Copy.' + this.fileArray[1];   } catch(e) {       console.exception('File name is invalid! please pass the proper one');   }     process.stdout.write(`File: ${this.duplicate} is being created:`);     readable.on('data', (chunk) => {       let percentageCopied = ((chunk.length * this.counter) / this.fileSize) * 100;       process.stdout.clearLine();  //          process.stdout.cursorTo(0);       process.stdout.write(`${Math.round(percentageCopied)}%`);       this.counter += 1;   });   readable.on('error', (e) => {       console.log("Some error occurred: ", e);   });     writeable.on('finish', () => {       process.stdout.clearLine();  //          process.stdout.cursorTo(0);       process.stdout.write("Successfully created the file copy!");   });     readable.pipe(writeable); //  !  }); 

рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 readable.pipe(writeable); //  ! 

рдпрд╣рд╛рдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЗ рджрд┐рд▓ рдореЗрдВ pipe() рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдЕрдм рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдПрдВред

 $ time node streams_copy_efficient.js cartoonMovie.mkv ~/Documents/4kdemo.mkv 

рд╣рдо рдЙрд╕реА рд╡рд┐рд╢рд╛рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдкреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдФрд░ рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИред


рдкрд╛рдЗрдк () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЬрд╛рддреА рд╣реИ

рдЕрдм рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ node рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ 61.9 рдПрдордмреА рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдбрд┐рд╕реНрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 Disk Read: 35.5 MiB/s Disk Write: 35.5 MiB/s 

рдкреАрда рдХреЗ рджрдмрд╛рд╡ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЧрддрд┐ рдЕрдм рд╣рдореЗрд╢рд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреБрд░рд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 13 рд╕реЗрдХрдВрдб рддреЗрдЬ рдЪрд▓рддрд╛ рд╣реИред

 12.13s user 28.50s system 22% cpu 3:03.35 total 

pipe() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рд╕реНрдореГрддрд┐ рдЦрдкрдд рдХреЛ 98.68% рддрдХ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдбреЗрдЯрд╛ рд░реАрдб рд╕реНрдЯреНрд░реАрдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ 61.9 рдПрдордмреА рд╣реИред рд╣рдо рдЗрд╕ рдЖрдХрд╛рд░ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдХреА read() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:

 const readable = fs.createReadStream(fileName); readable.read(no_of_bytes_size); 

рдпрд╣рд╛рдВ рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕реНрд░реЛрдд рдХрд╛рдлреНрдХрд╛ рд╣реИ, рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред рдЙрд╕реА рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбрд┐рд╕реНрдХ рд╕реЗ рд░реАрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рдордХреНрдЦреА рдкрд░", рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХреБрдЪрд┐рдд рд░реВрдк рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд╡рд╛рдкрд╕ рд▓рд┐рдЦрдирд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо


рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдПрдХ рд▓рдХреНрд╖реНрдп рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдерд╛ рдХрд┐ Node.js рдкрд░ рдЦрд░рд╛рдм рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдордВрдЪ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╢рд╛рдирджрд╛рд░ API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдПрдкреАрдЖрдИ рдкрд░ рдХреБрдЫ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд╕рд╛рде, рдЖрдк рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк Node.js рдореЗрдВ рдмрдлрд╝рд░ рдФрд░ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/hi433408/


All Articles