Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.12.2012, 16:57
Интересующийся
Отправить личное сообщение для digitalbrain Посмотреть профиль Найти все сообщения от digitalbrain
 
Регистрация: 28.07.2010
Сообщений: 21

Динамическая подгрузка и ВЫГРУЗКА скрипта...
Если писать веб приложение на 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 разных держать в памяти сотню мб изврат..

Есть пока идея подгружать сам код через ajax потом динамически создавать функцию =new Function(code) и выполнять в ней код подгружаемого модуля..по окончании работы вызывать специальный метод модуля для деинициализации чтоб по удалять все им созданные функции и потом подчищать внешние ссылки на него...ну на подобие модуля того ж делфи..
В принципе оно как то работает в черновой реализации...правда наверно где то утечка памяти есть ибо при 1000 циклов подгрузки - выгрузки модуля уходит мб с 30-40 озу...
и очевиден минус - так как это не скрипт как таковой - не будет кеширования кода...хотя модули по 30 кб конечно стягивать заново не проблема..0,5 сек дела то )
Может есть какие то готовые реализации принципа погрузки-выгрузки кода? Не изобретаю ли я велосипед часом?
Ответить с цитированием
  #2 (permalink)  
Старый 08.12.2012, 17:57
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Так а почему бы просто не удалять ссылки на объекты, созданные подгруженным скриптом ? И что у вас за приложение на 100 файлов?
Ответить с цитированием
  #3 (permalink)  
Старый 08.12.2012, 18:22
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

digitalbrain, ну как бы браузер не моментально освобождает ресурсы и еще вы уверены что у вас не осталось ссылок на объект ?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 08.12.2012, 22:26
Интересующийся
Отправить личное сообщение для digitalbrain Посмотреть профиль Найти все сообщения от digitalbrain
 
Регистрация: 28.07.2010
Сообщений: 21

Сообщение от cyber Посмотреть сообщение
digitalbrain, ну как бы браузер не моментально освобождает ресурсы и еще вы уверены что у вас не осталось ссылок на объект ?
Ну.. в принципе не должно оставаться...я рекурсивно все в null и delete делаю потом..лучше лишний раз пройтись..вообщем рву все связи с излишком..
насчет сборщика мусора - это я знаю...конечно когда постоит страница без дела некоторое время, то память возвращается потихоньку, но все ровно мб 10 утекают наверно..сложно понять что утекло, а что просто держит браузер до лучших времен..
вот жеш не могут нормальную отладочную софтину сделать чтоб в лоб писало что в памяти есть и куда она распределена...
Ответить с цитированием
  #5 (permalink)  
Старый 08.12.2012, 22:35
Интересующийся
Отправить личное сообщение для digitalbrain Посмотреть профиль Найти все сообщения от digitalbrain
 
Регистрация: 28.07.2010
Сообщений: 21

Сообщение от danik.js Посмотреть сообщение
Так а почему бы просто не удалять ссылки на объекты, созданные подгруженным скриптом ? И что у вас за приложение на 100 файлов?
Да думал так в лоб сделать...Но смутило что может на каждый такой скрипт расходуется еще какая то память браузера кроме явной, и даже если все созданные объекты обнулить то "скрипт" как системный объект браузера останется в памяти...ну просто файрбаг его все ровно показывает и фик знает то ли он его просто сохранил для меня или он действительно еще в памяти висит.. тут надо решить что больше зло ...хотя так было бы куда легче чем с аджаксом..
Странно что разработчики сделали динамическое добавление скриптов , а вот про очистку без бубна не подумали..
П.С ну приложение это весь сайт гг страниц то много все с разными функциями..можно и по старинке бы, но тут спортивный интерес
Ответить с цитированием
  #6 (permalink)  
Старый 08.12.2012, 22:44
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

digitalbrain, вы не можете заставить браузеры принудительно вызывать сборщик мусора( можно только в ие) , а пока он не отработает то память не очиститься.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #7 (permalink)  
Старый 08.12.2012, 22:48
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

а насчет загрузки кода ajax , то обьекты удаляются тем же сборщиком мусора, так что эффект будет тот же.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #8 (permalink)  
Старый 10.12.2012, 14:17
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

У меня аналогичная проблема в веб-приложении. Пока что я пришел к выводу, что с этим придется смириться Но хуже всего в IE. Память постепенно накапливается и когда доходит до 300 МБ (почему именно 300 - не знаю) - браузер практически сваливается! он как бы продолжает работать, но при этом не отображает ни одной картинки! (почему это вылезает именно на картинках - тоже не знаю).
Чисто из практики (для IE) могу посоветовать, что если есть возможность заменить массивы [] на объекты {}, то лучше используйте объекты
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Асинхронная подгрузка скрипта с немедленным выполнением его кода bukvaG Общие вопросы Javascript 4 11.06.2012 17:55
динамическая подгрузка скрипта jetli13 Общие вопросы Javascript 1 13.07.2010 16:15
Динамическая подгрузка скрипта format1981 Общие вопросы Javascript 7 23.10.2009 12:40
динамическая подгрузка страницы tp0378 Events/DOM/Window 1 14.09.2009 15:37
Динамическая подгрузка JScript Yustas Общие вопросы Javascript 0 04.05.2009 16:31