#javascript #jquery
#javascript #jquery
Вопрос:
В моем проекте мне нужно увидеть данные датчиков в окне textarea и через некоторое время сохранить эти данные в текстовом файле. Я использую этот код :
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>title</title>
<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
<script type="text/javascript">
var updateInterval = 50;
var updateChart = function(count) {
count = count || 1;
Val1 = Math.floor((Math.random() * 100) 1);
Val2 = Math.floor((Math.random() * 100) 1);
Val3 = Math.floor((Math.random() * 100) 1);
$(document).ready(function() {
var $textarea = $('textarea');
$textarea.scrollTop($textarea[0].scrollHeight);
});
var d = new Date();
$("#output").append(document.createTextNode(d.getHours() ":" d.getMinutes() ":" d.getSeconds() " - , " Val1 ", " Val2 ", " Val3 "n"));
}
setInterval(function() {
updateChart()
}, updateInterval);
function download(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' encodeURIComponent(text));
pom.setAttribute('download', filename);
pom.style.display = 'none';
document.body.appendChild(pom);
pom.click();
document.body.removeChild(pom);
}
</script>
</head>
<body>
<form onsubmit="download(this['name'].value, this['text'].value)">
Filename: <input type="text" name="name" value=" .txt">
<textarea id='output' cols="40" rows="10" name="text" style="border:solid 2px blue;">
Time ,Val1, Val2, Val3
</textarea>
<input type="submit" value="SAVE">
</form>
</body>
</html>`
Проблема в том, что скорость выполнения моего кода все медленнее и медленнее, если время
между запуском и сохранением файла проходит больше времени!
Если я использую 20 выборок в секунду, такое замедление неприемлемо.
Возможно ли получить более быстрый код, который намного меньше зависит от времени (размер текстового файла)?
Комментарии:
1. Вы действительно не хотите добавлять обработчик document
ready
при каждом вызовеupdateChart
2. На самом деле вам нужно всего лишь завершить
setInterval
вызов, т.Е.jQuery(function($) { setInterval(updateChart, updateInterval) })
3. @Phil, да, это помогает, но замедление сохраняется (выполнение в два раза медленнее) для файла скромного размера 200 Кб (или около 20 минут записи данных датчика). Тем не менее, я не понимаю корня проблемы и как найти более эффективный код, чтобы получить возможность записывать данные в течение 1 часа и с минимальным замедлением.