0

「assets」というディレクトリに、ブラウザのメイン レイアウトのさまざまな img タグで必要なファイルが 10 個ほどあります。

個別の小さな画像ファイルを取得するために、10 の個別の要求が送信されます。(最終的には、これを最適化して、すべての画像を 1 つにまとめた単一の画像シートを読み込む 1 つの要求を送信するだけにします)

ただし、すべてをロードできない場合があるため、ブラウザはタイムアウトするまで回転/ロードアイコンを表示するか、ロードしますが、順序/一致が間違っている (img タグが間違った画像を表示する) か、ロードされません。画像、ページを更新するたびに異なる動作

//first request gzips and loads the main layout, subsequent requests loads images

require('fs').readFile('assets/'+params.file, function(err, data) {
  if(err) throw err;
  if(params.file == 'layout.html') {
  require('zlib').gzip(data, function(err, buffer) {
    if(err) throw err;
    output(buffer, params);        
   });
  } else output(data, params);
});


function output(data, params){ 
  switch(params.file.substring(params.file.length-3)) {
    case 'tml': params.headers = {'Content-Encoding': 'gzip'};break;
    case 'ico': params.headers = {'Content-Type': 'image/x-icon'};break;
    case 'ttf': params.headers = {'Content-Type': 'application/x-font-ttf' }; break;
    case 'otf': params.headers = {'Content-Type':'font/opentype'};break;
    case 'png': params.headers = {'Content-Type':'image/png'};break;
    case 'gif': params.headers = {'Content-Type':'image/gif'};break;
    case 'peg':
    case 'jpg': params.headers = {'Content-Type':'image/jpeg'};break;
    default: params.headers = {};
  }
  params.headers['Set-Cookie'] =  '';       
  params.responseOutput(data, params);
}

これは厄介な「閉鎖」の問題に少し似ているように感じますが、ここには forloops がなく、ブラウザーからの各画像要求が別の画像要求に干渉するべきではありません (..それでもそうです)。

4

1 に答える 1

1

一部のリクエストが間違ったファイルを提供することがあるという事実は、クロージャの問題があることを示唆しています。最も可能性が高いのは、またはコールバックが実行paramsされる前に変更されることです。そのスコープは何ですか?また、それをどのように構築しますか?readfilegzipparams

于 2012-10-11T18:01:23.530 に答える