緩存
緩存是前后端數(shù)據(jù)交互很重要的一部分簸淀,利用緩存可以節(jié)約網(wǎng)絡(luò)帶寬晒喷,節(jié)省花銷,具體的實現(xiàn)步驟如下:
const http = require("http");
const url = require("url");
const fs = require("fs");
let server = http.createServer((req,res)=>{
let {pathname} = url.parse(req.url);
//讀取文件的信息
fs.stat(`www${pathname}`,(err,stat)=>{
if(err){
res.writeHeader(404);
res.write("Not Found");
res.end();
}else{
//判斷客戶端的請求頭里面是否有if-modified-since
if(req.headers["if-modified-since"]){
//獲取客戶端和服務(wù)端文件的修改時間
let cDate = new Date(req.headers["if-modified-since"]);
let sDate = new Date(stat.mtimeMs);
let time_client = Math.floor(cDate.getTime()/1000);
let time_server = Math.floor(sDate.getTime()/1000);
if(time_client < time_server){
sendToClient();
}else{
res.writeHeader(304);
res.write("Not Modified");
res.end();
}
}else{
sendToClient();
}
function sendToClient(){
let rs = fs.createReadStream(`www${pathname}`);
let mDate = new Date(stat.mtimeMs);
res.setHeader("last-modified",mDate.toUTCString());
rs.pipe(res);
rs.on("error",(err)=>{
res.writeHeader(404);
res.write("Not Found");
res.end();
})
}
}
})
})
server.listen(8080);
進程
nodejs默認是單進程映皆、單線程運行的挤聘,但是可以通過官方提供的cluster(集群)模塊可以實現(xiàn)多進程機制,可以最大化利用cpu的資源捅彻,具體的實現(xiàn)如下:
// cluster的中文意思是集群组去,目的的最大程度的發(fā)揮服務(wù)器的cpu性能,多個進程運行相同的代碼
const cluster = require("cluster");
let os = require("os");
const http = require("http");
const fs = require("fs");
const url = require("url");
const process = require("process");
//只有主進程才可以去派生其他的進程
//主進程:守護進程 --- 用于派生子進程
//子進程: 工作進程 --- 用于執(zhí)行代碼
if(cluster.isMaster){
let numCpus = os.cpus().length;
for(let i =0;i<numCpus;i++){
cluster.fork();
}
}else{
let server = http.createServer((req,res)=>{
console.log(process.pid);
let {pathname} = url.parse(req.url);
let rs = fs.createReadStream(`www${pathname}`);
rs.pipe(res);
rs.on("error",(err)=>{
res.writeHeader(404);
res.write("Not Found");
res.end();
})
})
server.listen(8080);
}