06.12.2013, 16:41
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Я не про это, думай дальше
|
|
06.12.2013, 16:46
|
Профессор
|
|
Регистрация: 18.11.2013
Сообщений: 275
|
|
Ну говори тогда уже, я не знаю что там еще...... Нету там ошибок, это только скорее всего тебе кажется что это ошибка так как ты не знаешь ui. Щас ты скажешь что-то а я те дам обьяснение и ты поерепенишься немного, поищешь лазейки как обойти мое обьяснение а потом замолчишь или обзовешь меня, так все делают....
Последний раз редактировалось Maxmaxmaximus3, 06.12.2013 в 16:52.
|
|
06.12.2013, 16:51
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Ну ок. У тебя не предусмотрено асинхронное АПИ, т.е. в твоём примере идёт голый вызов setInterval и в случае если виджет будет удалён, то он не сможет быть удалён сборщиком мусора + скорее всего посыпятся баги.
Все асинхронные вызовы вроде setInterval, setTimeout, AJAX, различные внешние события обязаны быть обработаны деструктором виджета.
|
|
06.12.2013, 16:52
|
Профессор
|
|
Регистрация: 18.11.2013
Сообщений: 275
|
|
kobezzza, ты шутишь? я для примера это сделал, для всякого подобного будут сервисы запилины, я просто для примера показал, я думал это очеивдно) а так да, за наводку спасибо но я знаю уже.
Я не знаю что еще, замыканий в контроллерах нет, так они идеологией запрещены. Контроллеры должны быть независимые. При тестировании контроллер будет кукарекать так как с таким синтаксисом не сможет работать без фреймворка? тоже обойдем. Добавим встроенное средство тестирования, или что-то другое. Что еще то? Это все что было? Я просто для примера интервал сделал, чтобы эмитировать что от сервера что-то приходит.
в принципе можно вообще запретить доступ из контроллеров к глобальному window. стоит это делать? чтобы доступ был только к тому что локально и к тому что в сервисах подключено.
|
|
06.12.2013, 16:53
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от Maxmaxmaximus3
|
kobezzza, ты шутишь? я для примера это сделал, для всякого подобного будут сервисы запилины, я просто для примера показал, я думал это очеивдно) а так да, за наводку спасибо но я знаю уже.
|
Фреймворк обязан реализовывать АПИ очередей асинхронных вызовов. Если ты этого не понимаешь, то это плохо Т.к. всякий раз когда тебе приходится руками прописывать очищение памяти - это возможная потенциальная ошибка.
|
|
06.12.2013, 16:55
|
Профессор
|
|
Регистрация: 18.11.2013
Сообщений: 275
|
|
Сообщение от kobezzza
|
Все асинхронные вызовы вроде setInterval, setTimeout, AJAX, различные внешние события обязаны быть обработаны деструктором виджета.
|
ну ладно ладно не буду ерепенится.. ты прав я не думал об этом, я думал заняться этим только в последнюю очередь когда буду утечки устранять. спасибо. правда
Сообщение от kobezzza
|
Фреймворк обязан реализовывать АПИ очередей асинхронных вызовов.
|
немного не понял, можешь обьяснить?
|
|
06.12.2013, 17:00
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от Maxmaxmaximus3
|
немного не понял, можешь обьяснить?
|
У меня например все виджеты наследуются от класса Defer, который реализует АПИ: this.setTimeout, this.setInterval, this.setImmediate, this.ajax, this.proxy, this.setQueue и т.д. т.е. используя это АПИ вместо голых вызовов мы полностью устраняем проблему возможных утечек памяти и багов, т.к. сами виджеты знают об этих обработчиках и отменяют их выполнение и чистят память автоматически в деструкторе.
Представь ситуацию: у тя есть блок, он дёргает аяксом данные, запрос бежит, а в этот момент юзер к примеру переходит на другую страницу (а у нас сингл пейдж апликейшн), т.е. блок был удалён, но его запрос никто не отменил и более того, когда сервер ответит он будет вызывать обработчики внутри мёртвого блока. Тоже самое со всеми остальными асинхронными вызовами и событиями, вроде image.onload.
Последний раз редактировалось kobezzza, 06.12.2013 в 17:05.
|
|
06.12.2013, 17:05
|
Профессор
|
|
Регистрация: 18.11.2013
Сообщений: 275
|
|
kobezzza, точно, а сервисы у меня синглтоны, как и в ангуляре, то есть они ни чо не знают о виджетах и прочем. Лан спасибо лучше начать сразу об этом думать, чем потом. Я думал что используя сервисы я смогу как-то управлять этим,но сервисы то ни чо не знают о том кто будет их использовать, и о том что эти использовальщики могут исчезать и появляться.
|
|
06.12.2013, 19:02
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от kobezzza
|
Представь ситуацию: у тя есть блок, он дёргает аяксом данные, запрос бежит, а в этот момент юзер к примеру переходит на другую страницу (а у нас сингл пейдж апликейшн), т.е. блок был удалён, но его запрос никто не отменил и более того, когда сервер ответит он будет вызывать обработчики внутри мёртвого блока.
|
я по событию "смена_маршрута" очищял
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
06.12.2013, 19:07
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от nerv_
|
я по событию "смена_маршрута" очищял
|
Ещё раз: везде где есть ручная очистка памяти всегда будут баги на этой почве Сборщики мусора ведь не спроста придумали. Поэтому нужно автоматизировать этот момент до того состояния, чтобы даже не думать об этом. К тому же если мы развиваем концепцию "виджетов", то любой виджет должен иметь возможность быть удалённым в любой момент времени и при этом ничего не должен сломать, иначе нет смысла вообще во всех этих виджетах.
Последний раз редактировалось kobezzza, 06.12.2013 в 19:12.
|
|
|
|