Как очистить файл three.js (или WebGL) при обновлении страницы

У нас есть довольно обширное приложение three.js, использующее довольно много материалов, сцен, буферов рендеринга и т. Д. Мы могли обновлять / перезапускать его только пару раз, и оно не получалось по одной из нескольких проблем; все это привело к исчерпанию ресурсов WebGL.

Я добавил процедуру очистки в window.onbeforeunload, которая вызывает методы dispose () для объектов, которые ее поддерживают; материалы, рендербуферы и геометрии. Я не уверен, что уловил все ресурсы; но, похоже, этого было достаточно, так как я мог обновляться каждые пять секунд в течение получаса.

Вот вопросы: [1] Как лучше всего запустить такую ​​очистку? window.onbeforeunload кажется довольно эффективным, но, может быть, есть причина выбрать какую-то альтернативу?

[2] Как лучше всего выполнить такую ​​очистку? Было бы хорошо иметь утилиту для рендерера, очищающую все ресурсы WebGL. (Меня не беспокоят объекты javascript, поскольку браузер, похоже, вполне способен их очистить.)

Я видел здесь связанные вопросы; например, об очистке сцен, но меня интересует полная очистка. Я полагаю, что любой ответ на нижнем уровне WebGL также подойдет для этой глобальной очистки; что могло бы быть не только для каких-то ресурсов three.js, поскольку он не смог бы проработать объем этих небольших чисток.


person Stephen Todd    schedule 31.07.2013    source источник


Ответы (2)


Обычно, когда веб-страница выгружается, она не несет ответственности за выполнение какой-либо очистки; его ресурсы просто отбрасываются сразу. В противном случае неряшливые или вредоносные страницы часто вызывают проблемы. WebGL ничем не отличается.

Вы должны рассматривать поведение, которое вы видите, как ошибку браузера, найти простую тестовую страницу, которая демонстрирует проблему, и сообщить о ней поставщикам браузеров. Это решит проблему для всех и снизит затраты на обслуживание в долгосрочной перспективе.

person Kevin Reid    schedule 31.07.2013
comment
Хорошее замечание, спасибо. Я протестирую его в другом браузере (проблема была в Chrome) и попытаюсь создать простую страницу, иллюстрирующую ошибку, желательно без использования three.js, чтобы сделать ее как можно более простой. - person Stephen Todd; 01.08.2013
comment
coding.smashingmagazine.com/2012/11/05 / - person Hobbes; 02.08.2013

Это известная проблема в версии chrome 28, которая была исправлена ​​в следующем выпуске. Вы можете скачать бета-версию и убедиться в этом сами.

person Hobbes    schedule 01.08.2013
comment
Спасибо. Я установил Chrome 30 параллельно, и, как вы сказали, все работает нормально. Благодаря заголовку stackoverflow.com/questions/3785991/ для параллельной установки. И oldapps.com/index.php/google_chrome.php для более поздней версии. (который он называет dev) скрыт под заголовком "Старая версия Google Chrome" - person Stephen Todd; 02.08.2013
comment
Напугало меня. Я думал, что сделал какую-то серьезную ошибку. Я был очень рад узнать, что это не моя вина =] - person Hobbes; 02.08.2013