SORU
4 Ocak 2011, Salı


Fs artıları ve eksileri nelerdir.vs fs createReadStream.node.js içinde readFile?

Node.js ile ben ciddiye alıyorum ve bir dosya okuma ve tel aşağı göndermek için iki yol keşfettim, var olduğunu kurdum ve writeHead ile doğru MİME türünü gönderdi sonra:

// read the entire file into memory and then spit it out

fs.readFile(filename, function(err, data){
  if (err) throw err;
  response.write(data, 'utf8');
  response.end();
});

// read and pass the file as a stream of chunks

fs.createReadStream(filename, {
  'flags': 'r',
  'encoding': 'binary',
  'mode': 0666,
  'bufferSize': 4 * 1024
}).addListener( "data", function(chunk) {
  response.write(chunk, 'binary');
}).addListener( "close",function() {
  response.end();
});

Ben bu fs varsayarak ben doğru.createReadStream eğer söz konusu dosya büyük bir şey olsaydı, daha iyi bir kullanıcı deneyimi sağlayabilir, bir video gibi mi? Blok-ish daha az olabilir; bu doğru mu sanki? Diğer artıları, eksileri, uyarılar, ya da Bilmem Gereken ayrıntılar var mı?

CEVAP
4 Ocak 2011, Salı


Eğer sadece kanca için gidiyoruz eğer daha iyi bir yaklaşım, "data" "(yaz)" ve "" için "() sonuna": kapatın

// 0.3.x style
fs.createReadStream(filename, {
  'bufferSize': 4 * 1024
}).pipe(response)

// 0.2.x style
sys.pump(fs.createReadStream(filename, {
  'bufferSize': 4 * 1024
}), response)

read.pipe(write) sys.pump(read, write) yaklaşım aynı zamanda akış kontrolü ekleme yararı vardır. Eğer veri akışı gibi hızlı bir şekilde kabul edemez yazma, okuma veri akışı bellek tamponlu alma miktarını en aza indirecek şekilde geri çekil, söyleyeceğim.

flags:"r" mode:0666 bir FileReadStream olduğu gerçeğini ima vardır. binary enconding eğer bir kodlama belirtilmemişse ıtiraz değil, sadece ham veri arabellekleri ile çalışacağız.

Ayrıca, dosya daha slicker hizmet edecek bazı diğer güzellikler ekleyebilirsiniz:

  1. req.headers.range kokusunu ve eğer /bytes=([0-9] )-([0-9] )/ gibi bir dize eşleşip eşleşmediğini görmek. Eğer öyleyse, sadece bu konumu baştan sona akışı. (Eksik sayı 0 anlamına gelir ya da "son".)
  2. Stat dan inode ve saatine() karma ETag Başlığı arayın. Eğer bir istek "ıf-none-match başlığı olan, 304 Not Modified Bir geri gönder." başlığı ile eşleşen alırsanız
  3. Stat nesne üzerinde mtime tarihe karşı if-modified-since Başlığı kontrol edin. Eğer 304 tarihinden bu yana sağlanan değiştirilmiş değildi.

Eğer varsa da, genel olarak, İçerik-Uzunluk Başlığı gönder. (Dosya statting sensin, bu senin hakkın.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008
  • talkandroid

    talkandroid

    27 Mayıs 2010
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007