Node.js 鎬ц兘浼樺寲鎶€宸?/title> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/github.min.css">\n <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/languages/javascript.min.js"></script> <style> /* 鍩虹鏍峰紡鍙橀噺瀹氫箟 */ :root { --primary-color: #4361ee; --secondary-color: #3a0ca3; --accent-color: #f72585; --text-color: #333333; --background-color: #ffffff; --card-background: #f8f9fa; --border-color: #e9ecef; --code-background: #f6f8fa; --shadow: 0 2px 8px rgba(0, 0, 0, 0.08); --radius: 8px; --transition: all 0.2s ease; } * { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; } body { font-family: 'Noto Sans SC', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(--background-color); color: var(--text-color); line-height: 1.6; font-size: 16px; } /* 涓诲鍣?*/ .container { max-width: 800px; margin: 0 auto; padding: 2rem 1.5rem; } /* 鏍囬鏍峰紡 */ h1 { color: var(--primary-color); font-size: 2rem; font-weight: 700; margin-bottom: 1.5rem; text-align: center; padding-bottom: 1rem; border-bottom: 2px solid var(--border-color); } h2 { color: var(--secondary-color); font-size: 1.5rem; font-weight: 600; margin: 2rem 0 1rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--border-color); } h3 { color: var(--text-color); font-size: 1.2rem; font-weight: 500; margin: 1.5rem 0 0.8rem; } /* 娈佃惤鍜屾枃鏈?*/ p { margin: 1rem 0; text-align: justify; } /* 鍒楄〃鏍峰紡 */ ul, ol { margin: 1rem 0; padding-left: 2rem; } li { margin: 0.5rem 0; } /* 浠g爜鏍峰紡 */ pre { background-color: var(--code-background); border-radius: var(--radius); padding: 1rem; overflow-x: auto; margin: 1.5rem 0; box-shadow: var(--shadow); } code { font-family: 'Consolas', 'Monaco', 'Courier New', monospace; font-size: 0.9rem; color: var(--secondary-color); } pre code { color: var(--text-color); } /* 鍗$墖鏍峰紡 */ .card { background-color: var(--card-background); border-radius: var(--radius); padding: 1.5rem; margin: 1.5rem 0; box-shadow: var(--shadow); transition: var(--transition); } .card:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12); transform: translateY(-2px); } /* 鎻愮ず妗嗘牱寮?*/ .tip { background-color: rgba(67, 97, 238, 0.1); border-left: 4px solid var(--primary-color); padding: 1rem; margin: 1.5rem 0; border-radius: 0 var(--radius) var(--radius) 0; } /* 浠g爜楂樹寒 */ .hljs { background: var(--code-background) !important; } /* 鍝嶅簲寮忚璁?*/ @media (max-width: 768px) { .container { padding: 1.5rem 1rem; } h1 { font-size: 1.8rem; } h2 { font-size: 1.3rem; } h3 { font-size: 1.1rem; } } /* 澶撮儴瀵艰埅 */ header { background-color: var(--background-color); border-bottom: 1px solid var(--border-color); padding: 1rem 0; margin-bottom: 2rem; box-shadow: var(--shadow); } .header-container { max-width: 800px; margin: 0 auto; padding: 0 1.5rem; display: flex; justify-content: space-between; align-items: center; } .header-title { font-size: 1.2rem; font-weight: 700; color: var(--primary-color); } .back-link { color: var(--text-color); text-decoration: none; font-size: 0.9rem; transition: var(--transition); padding: 0.5rem 1rem; border-radius: var(--radius); border: 1px solid var(--border-color); } .back-link:hover { background-color: var(--primary-color); color: white; border-color: var(--primary-color); } /* 鍝嶅簲寮忓ご閮ㄨ璁?*/ @media (max-width: 768px) { .header-container { padding: 0 1rem; } .header-title { font-size: 1.1rem; } .back-link { padding: 0.4rem 0.8rem; font-size: 0.85rem; } } </style> </head> <body> <!-- 澶撮儴瀵艰埅 --> <header> <div class="header-container"> <div class="header-title">Node.js鏁欑▼</div> <a href="../article.html" class="back-link">杩斿洖鏂囩珷鍒楄〃</a> </div> </header> <div class="container"> <h1>Node.js 鎬ц兘浼樺寲鎶€宸?/h1> <p>Node.js 浣滀负涓€绉嶅熀浜?Chrome V8 寮曟搸鐨?JavaScript 杩愯鏃讹紝鍥犲叾闈為樆濉?I/O 鍜屼簨浠堕┍鍔ㄧ殑鐗规€э紝琚箍娉涘簲鐢ㄤ簬鏋勫缓楂樻€ц兘鐨勭綉缁滃簲鐢ㄣ€傛湰鏂囧皢浠嬬粛涓€浜涘疄鐢ㄧ殑 Node.js 鎬ц兘浼樺寲鎶€宸э紝甯姪寮€鍙戣€呮瀯寤烘洿楂樻晥鐨勫簲鐢ㄣ€?/p> <h2>1. 浣跨敤鏈€鏂扮増鏈殑 Node.js</h2> <p>Node.js 鍥㈤槦涓嶆柇浼樺寲 V8 寮曟搸鍜屾牳蹇冩ā鍧楋紝姣忎釜鏂扮増鏈兘浼氬甫鏉ユ€ц兘鏀硅繘銆傚洜姝わ紝浣跨敤鏈€鏂扮増鏈殑 Node.js 鏄彁楂樻€ц兘鐨勬渶绠€鍗曟柟娉曘€?/p> <pre><code class="bash"># 瀹夎鏈€鏂扮増鏈殑 Node.js nvm install node nvm use node</code></pre> <h2>2. 浼樺寲妯″潡鍔犺浇</h2> <h3>2.1 浣跨敤 ES 妯″潡</h3> <p>ES 妯″潡锛圗SM锛夋瘮 CommonJS 妯″潡鍔犺浇鏇村揩锛岀壒鍒槸鍦ㄥぇ鍨嬪簲鐢ㄤ腑銆?/p> <pre><code class="javascript">// package.json 涓坊鍔? { "type": "module" } // 鐒跺悗浣跨敤 ES 妯″潡璇硶 import fs from 'fs'; import path from 'path';</code></pre> <h3>2.2 鍑忓皯 require/import 璋冪敤</h3> <p>妯″潡鍔犺浇鏄湁鎴愭湰鐨勶紝搴旈伩鍏嶅湪寰幆鎴栭绻佽皟鐢ㄧ殑鍑芥暟涓娇鐢?require/import銆?/p> <pre><code class="javascript">// 涓嶅ソ鐨勫仛娉? function processData(data) { const fs = require('fs'); // 姣忔璋冪敤閮戒細鍔犺浇妯″潡 // 澶勭悊鏁版嵁 } // 濂界殑鍋氭硶 const fs = require('fs'); // 鍙姞杞戒竴娆? function processData(data) { // 澶勭悊鏁版嵁 }</code></pre> <h2>3. 浼樺寲寮傛鎿嶄綔</h2> <h3>3.1 浣跨敤 Promise.all 骞惰澶勭悊</h3> <p>瀵逛簬鐙珛鐨勫紓姝ユ搷浣滐紝浣跨敤 Promise.all 鍙互骞惰鎵ц锛屾彁楂樻晥鐜囥€?/p> <pre><code class="javascript">// 涓茶鎵ц锛堟參锛? async function processTasks() { const result1 = await task1(); const result2 = await task2(); const result3 = await task3(); return [result1, result2, result3]; } // 骞惰鎵ц锛堝揩锛? async function processTasks() { const [result1, result2, result3] = await Promise.all([ task1(), task2(), task3() ]); return [result1, result2, result3]; }</code></pre> <h3>3.2 浣跨敤 async/await 鏇夸唬鍥炶皟</h3> <p>async/await 浠g爜鏇寸畝娲侊紝閿欒澶勭悊鏇存柟渚匡紝鏈夊姪浜庨伩鍏嶅洖璋冨湴鐙便€?/p> <h2>4. 鍐呭瓨浼樺寲</h2> <h3>4.1 閬垮厤鍐呭瓨娉勬紡</h3> <p>甯歌鐨勫唴瀛樻硠婕忓師鍥犲寘鎷細</p> <ul> <li>鏈竻鐞嗙殑瀹氭椂鍣?/li> <li>鏈噴鏀剧殑浜嬩欢鐩戝惉鍣?/li> <li>澶у璞℃湭鍙婃椂閲婃斁</li> <li>闂寘寮曠敤</li> </ul> <pre><code class="javascript">// 閬垮厤鍐呭瓨娉勬紡鐨勪緥瀛? function setupTimer() { const data = Array(1000000).fill('test'); // 涓嶅ソ鐨勫仛娉曪細瀹氭椂鍣ㄦ寔鏈?data 寮曠敤 setInterval(() => { console.log(data.length); }, 1000); } // 濂界殑鍋氭硶锛氬強鏃舵竻鐞嗗畾鏃跺櫒 function setupTimer() { const data = Array(1000000).fill('test'); const interval = setInterval(() => { console.log(data.length); }, 1000); // 褰撲笉鍐嶉渶瑕佹椂娓呯悊 setTimeout(() => { clearInterval(interval); }, 5000); }</code></pre> <h3>4.2 浣跨敤娴侊紙Streams锛夊鐞嗗ぇ鏂囦欢</h3> <p>娴佸彲浠ラ€愬潡澶勭悊鏁版嵁锛岄伩鍏嶄竴娆℃€у姞杞芥暣涓枃浠跺埌鍐呭瓨銆?/p> <pre><code class="javascript">// 涓嶅ソ鐨勫仛娉曪細涓€娆℃€у姞杞藉ぇ鏂囦欢 const fs = require('fs'); const data = fs.readFileSync('large-file.txt', 'utf8'); console.log(data.length); // 濂界殑鍋氭硶锛氫娇鐢ㄦ祦澶勭悊 const fs = require('fs'); const stream = fs.createReadStream('large-file.txt', 'utf8'); let totalLength = 0; stream.on('data', (chunk) => { totalLength += chunk.length; }); stream.on('end', () => { console.log(totalLength); });</code></pre> <h2>5. 鏁版嵁搴撲紭鍖?/h2> <h3>5.1 浣跨敤杩炴帴姹?/h3> <p>鏁版嵁搴撹繛鎺ユ槸鏄傝吹鐨勮祫婧愶紝浣跨敤杩炴帴姹犲彲浠ュ噺灏戣繛鎺ュ缓绔嬬殑寮€閿€銆?/p> <pre><code class="javascript">const mysql = require('mysql2/promise'); // 鍒涘缓杩炴帴姹? const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'test', waitForConnections: true, connectionLimit: 10, queueLimit: 0 }); // 浣跨敤杩炴帴姹? async function queryDatabase() { const [rows] = await pool.execute('SELECT * FROM users'); return rows; }</code></pre> <h3>5.2 浼樺寲鏌ヨ</h3> <p>浣跨敤绱㈠紩銆侀伩鍏?SELECT *銆佷娇鐢?LIMIT 绛夊彲浠ユ彁楂樻煡璇㈡€ц兘銆?/p> <h2>6. 缂撳瓨绛栫暐</h2> <h3>6.1 浣跨敤鍐呭瓨缂撳瓨</h3> <p>瀵逛簬棰戠箒璁块棶鐨勬暟鎹紝鍙互浣跨敤鍐呭瓨缂撳瓨鍑忓皯閲嶅璁$畻鎴栨暟鎹簱鏌ヨ銆?/p> <pre><code class="javascript">const NodeCache = require('node-cache'); const cache = new NodeCache({ stdTTL: 60 }); // 60绉掕繃鏈? async function getUserData(userId) { // 鍏堜粠缂撳瓨鑾峰彇 const cachedData = cache.get(`user:${userId}`); if (cachedData) { return cachedData; } // 缂撳瓨鏈懡涓紝浠庢暟鎹簱鑾峰彇 const userData = await db.getUser(userId); // 瀛樺叆缂撳瓨 cache.set(`user:${userId}`, userData); return userData; }</code></pre> <h3>6.2 浣跨敤 Redis 浣滀负鍒嗗竷寮忕紦瀛?/h3> <p>瀵逛簬鍒嗗竷寮忕郴缁燂紝Redis 鏄竴涓緢濂界殑缂撳瓨瑙e喅鏂规銆?/p> <h2>7. 浠g爜浼樺寲</h2> <h3>7.1 閬垮厤鍚屾鎿嶄綔</h3> <p>鍦?Node.js 涓紝鍚屾鎿嶄綔浼氶樆濉炰簨浠跺惊鐜紝搴斿敖閲忎娇鐢ㄥ紓姝ユ搷浣溿€?/p> <pre><code class="javascript">// 涓嶅ソ鐨勫仛娉曪細鍚屾璇诲彇鏂囦欢 const fs = require('fs'); function handleRequest(req, res) { const data = fs.readFileSync('data.json', 'utf8'); // 闃诲浜嬩欢寰幆 res.send(data); } // 濂界殑鍋氭硶锛氬紓姝ヨ鍙栨枃浠? const fs = require('fs').promises; async function handleRequest(req, res) { const data = await fs.readFile('data.json', 'utf8'); // 闈為樆濉? res.send(data); }</code></pre> <h3>7.2 浣跨敤閫傚綋鐨勬暟鎹粨鏋?/h3> <p>閫夋嫨鍚堥€傜殑鏁版嵁缁撴瀯鍙互鎻愰珮鎿嶄綔鏁堢巼銆?/p> <pre><code class="javascript">// 涓嶅ソ鐨勫仛娉曪細浣跨敤鏁扮粍鏌ユ壘鍏冪礌锛圤(n)锛? const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]; function findUserById(id) { return users.find(user => user.id === id); } // 濂界殑鍋氭硶锛氫娇鐢ㄥ璞℃煡鎵惧厓绱狅紙O(1)锛? const users = { 1: { id: 1, name: 'Alice' }, 2: { id: 2, name: 'Bob' } }; function findUserById(id) { return users[id]; }</code></pre> <h2>8. 鐩戞帶鍜屽垎鏋?/h2> <h3>8.1 浣跨敤鎬ц兘鍒嗘瀽宸ュ叿</h3> <p>Node.js 鍐呯疆浜嗘€ц兘鍒嗘瀽宸ュ叿锛屽彲浠ュ府鍔╂壘鍑烘€ц兘鐡堕銆?/p> <pre><code class="bash"># 浣跨敤 --prof 閫夐」杩愯搴旂敤 node --prof app.js # 鍒嗘瀽鐢熸垚鐨勬棩蹇楁枃浠? node --prof-process isolate-0x...-v8.log > profile.txt</code></pre> <h3>8.2 浣跨敤鐩戞帶宸ュ叿</h3> <p>浣跨敤 PM2銆丯ew Relic銆丏atadog 绛夊伐鍏风洃鎺у簲鐢ㄦ€ц兘銆?/p> <div class="tip"> <strong>鎻愮ず锛?/strong> 鎬ц兘浼樺寲鏄竴涓寔缁殑杩囩▼锛屽簲璇ユ牴鎹疄闄呭簲鐢ㄥ満鏅拰鎬ц兘娴嬭瘯缁撴灉鏉ヨ皟鏁翠紭鍖栫瓥鐣ャ€? </div> <div class="card"> <h3>鎬荤粨</h3> <p>閫氳繃浠ヤ笂浼樺寲鎶€宸э紝鍙互鏄捐憲鎻愰珮 Node.js 搴旂敤鐨勬€ц兘銆傚叧閿槸瑕佺悊瑙?Node.js 鐨勫伐浣滃師鐞嗭紝璇嗗埆鎬ц兘鐡堕锛屽苟閲囧彇鐩稿簲鐨勪紭鍖栨帾鏂姐€傚悓鏃讹紝瑕佹敞鎰忎唬鐮佺殑鍙淮鎶ゆ€э紝閬垮厤杩囧害浼樺寲瀵艰嚧浠g爜闅句互鐞嗚В鍜岀淮鎶ゃ€?/p> </div> </div> <script> // 鍒濆鍖栦唬鐮侀珮浜? document.addEventListener('DOMContentLoaded', (event) => { document.querySelectorAll('pre code').forEach((block) => { hljs.highlightBlock(block); }); }); </script> <footer> <div class="footer-content"> <p>© 2026 骞冲钩鐨勫皬鐮寸珯 鐗堟潈鎵€鏈?/p> <div class="footer-links"> <span>鐢?<a href="https://ppkjgzs.top" class="footer-link" target="_blank">骞冲钩鐨勫皬鐮寸珯</a> 鍒朵綔</span> <span class="divider">|</span> <span>浣跨敤 <span class="tech">HTML5</span>, <span class="tech">CSS3</span> 鍜?<span class="tech">Font Awesome</span> 鏋勫缓</span> <span class="divider">|</span> <a href="https://beian.miit.gov.cn/" target="_blank" class="footer-link">娴橧CP澶?025194709鍙?2</a> <span class="divider">|</span> <a href="https://beian.mps.gov.cn/#/query/webSearch?code=13020202000680" rel="noreferrer" target="_blank" class="footer-link">鍐€鍏綉瀹夊13020202000680鍙?/a> </div> </div> </footer> <style> /* 椤佃剼鏍峰紡 */ footer { background-color: #ffffff; color: var(--text-color); padding: 2rem 1rem; text-align: center; margin-top: 3rem; font-size: 0.9rem; border-top: 1px solid var(--border-color); } .footer-content { max-width: 800px; margin: 0 auto; text-align: center; } .footer-content p { text-align: center; margin-bottom: 1rem; } .footer-links { margin-top: 1rem; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 1rem; font-size: 0.85rem; text-align: center; } .footer-links span { text-align: center; } .footer-link { color: var(--primary-color); text-decoration: none; } .footer-link:hover { text-decoration: underline; } .divider { color: var(--border-color); } .tech { color: var(--primary-color); font-weight: 500; } /* 椤佃剼鍝嶅簲寮忎紭鍖?*/ @media (max-width: 768px) { footer { padding: 1.5rem 1rem; font-size: 0.85rem; } .footer-links { gap: 0.8rem; font-size: 0.8rem; } } </style> </body> </html>