2010-11-16 40 views
0

我需要知道我的想法是否是一個好主意。每次從文件讀取或加載到數組Node.js

林彙集了一個web服務器,流html文件js文件css文件,類型的靜態web服務器。

由於它一直是靜態的,我在想,我只需要真正讀取文件,然後在開始時將它加載到數組中,以便在客戶端請求時減少文件讀取。

像這樣的代碼已經

var tttt = [] 


var server = http.createServer(); 
server.on("request",function(request, response){ 
    var etret = '/home/bob/node-show/big-file.js'; 

    var setHeader = function(file){ 

     return { 
      'Content-Type': MIME.mime(file), 
      'Transfer-Encoding':'chunked', 
      'Connection': 'keep-alive' 
     }; 

    } 
    if (!tttt[path.basename(etret)]) { 
     tttt[path.basename(etret)] = [] 

     var test = fs.createReadStream(etret) 
     test.setEncoding('ascii') 
     test.on('data', function(data){ 
      console.log(data) 
      tttt[path.basename(etret)].push(data) 
     }); 
     test.on('close', function(data){ 
      console.log('sadsad') 
      response.writeHead(200, setHeader(etret)) 
      console.log(tttt[path.basename(etret)].length) 
      for (var i = 0; i < tttt[path.basename(etret)].length; i++) { 
       response.write(tttt[path.basename(etret)][i]) 
      }; 
      var erw = 0 
      for (var f = 0; f < tttt[path.basename(etret)].length; f++) { 
       erw = (erw + tttt[path.basename(etret)][f].length) 
      } 
      console.log(erw) 
      response.end() 
     }); 
    }else{ 
     response.writeHead(200, setHeader(etret)) 
     console.log(tttt[path.basename(etret)].length) 
     for (var i = 0; i < tttt[path.basename(etret)].length; i++) { 
      response.write(tttt[path.basename(etret)][i]) 
     }; 
     var erw = 0 
     for (var f = 0; f < tttt[path.basename(etret)].length; f++) { 
      erw = (erw + tttt[path.basename(etret)][f].length) 
     } 
     console.log(erw) 
     response.end() 
     console.dir(server.connections) 
    } 
    //return _fontEnd(request, response); 
}).listen(8000, function(){ 
    console.log('HTTP server up'); 
}); 

大file.js大約500KB的空間可能是個好主意,也許50個文件加載到內存中保存從硬盤驅動器讀取?

回答

0

緩存(靜態文件的)通常是Apache中的常見做法,並且基於node.js的Connect也支持緩存。您可以在this文章中看到磁盤和RAM之間的I/O成本。