Утечка памяти в OfflineAudioContext
.
Запускаем Task Manager. Смотрим на объем ОЗУ, занимаемый вкладкой. Видим, что он растет. После того, как вкладка займет больше 4ГБ, она сломается.
Как избежать утечки памяти?
Пример на jsfiddle.
var audioCtx = new(window.AudioContext || window.webkitAudioContext)();
// define variables
var play = document.querySelector('.play');
var stop = document.querySelector('.stop');
var progress = document.querySelector('#progress');
var buffer = document.querySelector('.buffer');
var myBuffer = null;
var rendering = false;
// use XHR to load an audio track, and
// decodeAudioData to decode it and stick it in a buffer.
// Then we put the buffer into the source
function getData() {
request = new XMLHttpRequest();
request.open('GET', 'https://s3-ap-northeast-1.amazonaws.com/storage.cowrite.decodeapps.io/Materials/Media/Audio/5a0aca5f35965-20171114-105007.mp3', true);
request.responseType = 'arraybuffer';
request.onload = function() {
progress.innerText = 'loaded';
var audioData = request.response;
audioCtx.decodeAudioData(audioData, function(buffer) {
myBuffer = buffer;
createBuffer();
}).catch(function(err) {
console.log('Rendering failed: ' + err);
// Note: The promise should reject when startRendering is called a second time on an OfflineAudioContext
});
}
request.send();
}
buffer.setAttribute('disabled', 'disabled');
progress.innerText = 'loading...';
var cntRenfered = 0;
function createBuffer() {
var offlineCtx = new OfflineAudioContext(2, myBuffer.length, myBuffer.sampleRate);
var source = offlineCtx.createBufferSource();
source.buffer = myBuffer;
source.connect(offlineCtx.destination);
source.start();
//source.loop = true;
offlineCtx.oncomplete = function(e) {
progress.innerText = 'completed';
buffer.removeAttribute('disabled');
source.disconnect(offlineCtx.destination);
cntRenfered++;
buffer.innerText = 'reCreateBuffer ' + cntRenfered;
}
offlineCtx.startRendering();
}
buffer.onclick = function() {
progress.innerText = 'rendering...';
buffer.setAttribute('disabled', 'disabled');
createBuffer();
}
getData();
<div id="progress">
loading
</div>
<button class="buffer">
reCreateBuffer
</button>
Нужно создать поле для ввода текста которое будет автоматически увеличиваться вместе с набранным текстом (по высоте)Использовать textarea нельзя,...
Пытаюсь через dispatchEvent послать событие так, чтобы React его обработал, но по какой-то причине обработчик onChange в реакте не вызывается, хотя все...
Как изменить js код так, чтобы по истечении 59 секунд счетчик не замирал на 0 секунде, а начинал заново?