Я имею дело с данными большого объема.Я хочу создать отчет в формате PDF, который содержит данные за 1 год.Я использую HTML-PDF, чтобы сделать это.Проблема в том, что создание PDF занимает около 20 минут.Могу ли я уменьшить его?
Я не хочу, чтобы мой пользователь ждал 20 минут.
Примечание. Я хочу создать PDF только на стороне сервера и отправить его пользователю по почте..
Я пытался найти некоторые решения, но не нашел ничего.Но я заметил, что когда я скачиваю какой-то файл из Google, рабочий процесс очень плавный.
Я хочу знать, как мне сделать мой рабочий процесс плавным
app.post('/api', (req, res) => {
var json = req.body;
var sqlGet = 'SELECT StationId,TimeStamp,data->>"$.temperature" as temperature,data->"$.humidity" as humidity,data->"$.so2" as so2,data->"$.no2" as no2,data->"$.co" as co,data->"$.o3" as o3,data->"$.co2" as co2,data->"$.pm10" as pm10,data->"$.noise" as noise,data->"$.rain" as rain,data->"$.wdir" as wdir,data->"$.wspeed" as wspeed,data->"$.press" as press FROM TwentyStationFiveYearData WHERE StationId = ' + json.stationid + ' AND TimeStamp >= ' + json.start + ' AND TimeStamp <= ' + json.end;
console.log('' + sqlGet);
connection.query(sqlGet, function(err, result) {
if (err) {
console.log('error' + err);
} else {
var htmlCode = generateTable(result, 15);
//var output = fs.createWriteStream('reports/' + json.start + '-' + json.end + '.pdf');
pdf.create(htmlCode, {
orientation: 'landscape',
type: 'pdf',
timeout: '1800000'
}).toStream(function(err, stream) {
if (err) {
console.log('stream did not work ' + err);
} else {
stream.pipe(fs.createWriteStream('output.pdf'));
console.log('pdf generated');
res.send("report will be mailed");
}
});
}
});
});
function generateTable(jsonData, columns) {
var tab = '';
var headers = ['StationId', 'TimeStamp', 'temperature', 'humidity', 'so2', 'no2', 'co', 'o3', 'co2', 'pm10', 'noise', 'rain', 'wdir', 'wspeed', 'press'];
tab += '<tr>';
for (var c = 0; c < columns; c++) {
tab += '<th>';
tab += headers[c];
tab += '</th>';
}
tab += '<tr>';
jsonData.forEach(obj => {
tab += '<tr>';
for (var c = 0; c < columns; c++) {
tab += '<td>';
tab += obj[headers[c]];
tab += '</td>';
}
tab += '</tr>';
});
tab = '<table border = "1">' + tab + '</table>';
return html(tab);
}
function html(table) {
var htmlCode = '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>Title</title></head><body>' + table + '</body></html>';
return htmlCode;
}
Я хочучтобы сделать мой рабочий процесс более плавным и сократить время, затрачиваемое на создание отчета в формате PDF