Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Выгрузка "динамических" скриптов из памяти браузера (https://javascript.ru/forum/dom-window/76067-vygruzka-dinamicheskikh-skriptov-iz-pamyati-brauzera.html)

freebsdd 30.11.2018 20:20

Выгрузка "динамических" скриптов из памяти браузера
 
Добрый день!

Сайт динамический (много разделов), т.е. работает без перезагрузки страницы, при входе в раздел динамически подгружаются скрипты типа:

<script id="js_section1" src="/files/section1.js" type="text/javascript"></script>

При переходе в другой раздел - эти скрипты удаляются по их ID (id="js_section1") и подгружаются новые.

Работает, всё нормально фукнции в скрипте отрабатывают нормально, только есть делема, если в скрипте есть событие на документ:

$(document).on('click'.....

То браузер оставляет его в памяти, даже если из раздела вышли и скрипт удалён со страницы, и зашли туда вновь и скрипт снова подгружен, то событие дублируется и срабатывает уже дважды (т.е. "тыкнул" мышкой, а браузер воспринимает уже не 1, а N кликов).

Как можно "выгрузить" из памяти это событие или какие можно придумать другие решения?

Aetae 30.11.2018 20:30

Удаление тега скрипт не несёт никакого смысла. Тег скрипт ответственен только за загрузку файла, если файл загружен и отработал - никакие манипуляции с ним ни на что не влияют.
Таким образов всё, что наделал первый скрипт, надо вычищать вручную (on снимать off итд). Скрипт должен изначально предусматривать необходимые методы как для инициаоизации так и для разрушения.

freebsdd 30.11.2018 20:37

Цитата:

Сообщение от Aetae (Сообщение 499598)
Удаление тега скрипт не несёт никакого смысла. Тег скрипт ответственен только за загрузку файла, если файл загружен и отработал - никакие манипуляции с ним ни на что не влияют.
Таким образов всё, что наделал первый скрипт, надо вычищать вручную (on снимать off итд). Скрипт должен изначально предусматривать необходимые методы как для инициаоизации так и для разрушения.

Т.е. нужно придумать другое решение, как например, если подгрузился раз и больше не выгружать, а все "$( document ).ready...", просто ещё раз подгружать вместе с телом страницы, правильно я понял?

И ещё вопрос, если не удалять тег скрипта, со временем работы, и если пройтись по всем разделам загрузятся все. Большую нагрузку на браузер несут подгруженные скрипты?

Aetae 30.11.2018 20:46

На процессор несут нагрузку только те скрипт, которые что-то делают, на память только те данные на которые есть хотя бы одна ссылка.
Если при "переходе меж страницами" вы качественно всё подчищаете - то нагрузки нет вообще никакой. Если же где-то в левых переменных висят куски старых данных, а на клик по странице срабатывает сто обработчиков делающих одно и то же - тогда да, тоска и печаль.

freebsdd 30.11.2018 21:46

Цитата:

Сообщение от Aetae (Сообщение 499600)
На процессор несут нагрузку только те скрипт, которые что-то делают, на память только те данные на которые есть хотя бы одна ссылка.
Если при "переходе меж страницами" вы качественно всё подчищаете - то нагрузки нет вообще никакой. Если же где-то в левых переменных висят куски старых данных, а на клик по странице срабатывает сто обработчиков делающих одно и то же - тогда да, тоска и печаль.

Хорошо, переделаю - пусть все скрипты подгружаются и остаются, а с переменными буду аккуратнее, спасибо Вам большое!


Часовой пояс GMT +3, время: 16:33.