Я хочу, чтобы файл gzip хранил его в памяти, и всякий раз, когда запрос поступает от клиента, я хочу вывести данные gzipped. Однако я получаю сообщение об ошибке 330 в моем браузере (я использую самую последнюю версию хром)Ошибка 330, когда Gzipping ответ от сервера nodejs
Код ниже выглядит прямо ко мне, есть ли что-то еще, что мне не хватает?
var http = require('http');
var url = require('url');
var fs = require('fs');
var zlib = require('zlib');
var gzippedData = '';
//read file into memory
fs.readFile('layout.html', function(err, data){
if(err) throw err;
zlib.gzip(data, function(err, buffer) {
if (err) throw err;
gzippedData = buffer.toString('binary');
});
});
var server = http.createServer(function(req, res){
var path = url.parse(req.url).pathname;
switch (path){
case '/':
res.writeHead(200, {'content-encoding': 'gzip'});
res.write(gzippedData);
res.end();
break;
default:
res.writeHead(404);
res.write('404');
res.end();
}});
server.listen(8080);
Это работает !! приветственный помощник! Действительно ли дешевле хранить ссылку на буфер, чем хранить данные в памяти: Если вы указали ссылку на буфер, это означало бы, что все миллионы запросов (например) на сервер, данные из файла Я думал, что было бы дешевле, если данные уже хранятся в памяти, так что вы делаете это вымывание ... – chris
Повторите пример примера с 1 миллионом, если я держал ссылку на буфер будет означать, что все 1 миллион запросов потребуют также gzip миллион раз? конечно, это должно быть дороже, чем, читая один раз, gzippping и удерживая его в памяти за все 1 миллион запросов ?. – chris
Думаю, вы меня неправильно поняли. Файл будет загружен один раз независимо. Единственное отличие состоит в том, что если вы дадите 'gzippedData = buffer', вы просто сохраните единственную ссылку на этот буфер. Если вы 'gzippedData = buffer.toString ('binary')', вам нужно выделить эту память для строки javascript, а _then_ вам нужно закодировать это как 'binary' для каждого запроса. Я призываю вас не смириться с этим, но вместо этого сделайте бенчмарк. Вы можете записывать 'process.memoryUsage()' между запросами (или даже в свой собственный обработчик запросов). Пойдите 'ab' на это! –