Динамическая подгрузка и ВЫГРУЗКА скрипта...
Если писать веб приложение на JS то возникает необходимость подгрузки скриптов во время выполнения...да подгрузить вопросов нет...
this.script=$C('script','',head); this.script.type="text/javascript"; this.script.onreadystetechange=function() {if(this.readyState=='complete')this.onLoaded();}.bind(this); this.script.onload=function(){this.onLoaded();}.bind(this); this.script.src=this.Source; но вот высвободить его с памяти никак...удаляешь его DOM узел , src в '' и сам объект в null все ровно браузер его не освобождает...и даже святой бубен не помогает.. Тут то и проблема, если скриптов всего 10 подгружаемых (не одновременно конечно)...ну то пусть в памяти остаются, но если их скажем 100 разных держать в памяти сотню мб изврат..:stop: Есть пока идея подгружать сам код через ajax потом динамически создавать функцию =new Function(code) и выполнять в ней код подгружаемого модуля..по окончании работы вызывать специальный метод модуля для деинициализации чтоб по удалять все им созданные функции и потом подчищать внешние ссылки на него...ну на подобие модуля того ж делфи.. В принципе оно как то работает в черновой реализации...правда наверно где то утечка памяти есть ибо при 1000 циклов подгрузки - выгрузки модуля уходит мб с 30-40 озу... и очевиден минус - так как это не скрипт как таковой - не будет кеширования кода...хотя модули по 30 кб конечно стягивать заново не проблема..0,5 сек дела то ) Может есть какие то готовые реализации принципа погрузки-выгрузки кода? Не изобретаю ли я велосипед часом?:-? |
Так а почему бы просто не удалять ссылки на объекты, созданные подгруженным скриптом ? И что у вас за приложение на 100 файлов?
|
digitalbrain, ну как бы браузер не моментально освобождает ресурсы и еще вы уверены что у вас не осталось ссылок на объект ?
|
Цитата:
насчет сборщика мусора - это я знаю...конечно когда постоит страница без дела некоторое время, то память возвращается потихоньку, но все ровно мб 10 утекают наверно..сложно понять что утекло, а что просто держит браузер до лучших времен.. вот жеш не могут нормальную отладочную софтину сделать чтоб в лоб писало что в памяти есть и куда она распределена... |
Цитата:
Странно что разработчики сделали динамическое добавление скриптов , а вот про очистку без бубна не подумали.. П.С ну приложение это весь сайт гг страниц то много все с разными функциями..можно и по старинке бы, но тут спортивный интерес :) |
digitalbrain, вы не можете заставить браузеры принудительно вызывать сборщик мусора( можно только в ие) , а пока он не отработает то память не очиститься.
|
а насчет загрузки кода ajax , то обьекты удаляются тем же сборщиком мусора, так что эффект будет тот же.
|
У меня аналогичная проблема в веб-приложении. Пока что я пришел к выводу, что с этим придется смириться :( Но хуже всего в IE. Память постепенно накапливается и когда доходит до 300 МБ (почему именно 300 - не знаю) - браузер практически сваливается! он как бы продолжает работать, но при этом не отображает ни одной картинки! (почему это вылезает именно на картинках - тоже не знаю).
Чисто из практики (для IE) могу посоветовать, что если есть возможность заменить массивы [] на объекты {}, то лучше используйте объекты |
Часовой пояс GMT +3, время: 16:30. |