Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Смишных картинок тред (https://javascript.ru/forum/offtopic/35821-smishnykh-kartinok-tred.html)

kobezzza 06.12.2013 16:41

Я не про это, думай дальше :)

Maxmaxmaximus3 06.12.2013 16:46

Ну говори тогда уже, я не знаю что там еще...... Нету там ошибок, это только скорее всего тебе кажется что это ошибка так как ты не знаешь ui. Щас ты скажешь что-то а я те дам обьяснение и ты поерепенишься немного, поищешь лазейки как обойти мое обьяснение а потом замолчишь или обзовешь меня, так все делают....

kobezzza 06.12.2013 16:51

Ну ок. У тебя не предусмотрено асинхронное АПИ, т.е. в твоём примере идёт голый вызов setInterval и в случае если виджет будет удалён, то он не сможет быть удалён сборщиком мусора + скорее всего посыпятся баги.
Все асинхронные вызовы вроде setInterval, setTimeout, AJAX, различные внешние события обязаны быть обработаны деструктором виджета.

Maxmaxmaximus3 06.12.2013 16:52

kobezzza, ты шутишь? я для примера это сделал, для всякого подобного будут сервисы запилины, я просто для примера показал, я думал это очеивдно) а так да, за наводку спасибо но я знаю уже.


Я не знаю что еще, замыканий в контроллерах нет, так они идеологией запрещены. Контроллеры должны быть независимые. При тестировании контроллер будет кукарекать так как с таким синтаксисом не сможет работать без фреймворка? тоже обойдем. Добавим встроенное средство тестирования, или что-то другое. Что еще то? Это все что было? Я просто для примера интервал сделал, чтобы эмитировать что от сервера что-то приходит.

в принципе можно вообще запретить доступ из контроллеров к глобальному window. стоит это делать? чтобы доступ был только к тому что локально и к тому что в сервисах подключено.

kobezzza 06.12.2013 16:53

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 285003)
kobezzza, ты шутишь? я для примера это сделал, для всякого подобного будут сервисы запилины, я просто для примера показал, я думал это очеивдно) а так да, за наводку спасибо но я знаю уже.

Фреймворк обязан реализовывать АПИ очередей асинхронных вызовов. Если ты этого не понимаешь, то это плохо:) Т.к. всякий раз когда тебе приходится руками прописывать очищение памяти - это возможная потенциальная ошибка.

Maxmaxmaximus3 06.12.2013 16:55

Цитата:

Сообщение от kobezzza
Все асинхронные вызовы вроде setInterval, setTimeout, AJAX, различные внешние события обязаны быть обработаны деструктором виджета.

ну ладно ладно не буду ерепенится.. ты прав я не думал об этом, я думал заняться этим только в последнюю очередь когда буду утечки устранять. спасибо. правда

Цитата:

Сообщение от kobezzza
Фреймворк обязан реализовывать АПИ очередей асинхронных вызовов.

немного не понял, можешь обьяснить?

kobezzza 06.12.2013 17:00

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 285008)
немного не понял, можешь обьяснить?

У меня например все виджеты наследуются от класса Defer, который реализует АПИ: this.setTimeout, this.setInterval, this.setImmediate, this.ajax, this.proxy, this.setQueue и т.д. т.е. используя это АПИ вместо голых вызовов мы полностью устраняем проблему возможных утечек памяти и багов, т.к. сами виджеты знают об этих обработчиках и отменяют их выполнение и чистят память автоматически в деструкторе.

Представь ситуацию: у тя есть блок, он дёргает аяксом данные, запрос бежит, а в этот момент юзер к примеру переходит на другую страницу (а у нас сингл пейдж апликейшн), т.е. блок был удалён, но его запрос никто не отменил и более того, когда сервер ответит он будет вызывать обработчики внутри мёртвого блока. Тоже самое со всеми остальными асинхронными вызовами и событиями, вроде image.onload.

Maxmaxmaximus3 06.12.2013 17:05

kobezzza, точно, а сервисы у меня синглтоны, как и в ангуляре, то есть они ни чо не знают о виджетах и прочем. Лан спасибо лучше начать сразу об этом думать, чем потом. Я думал что используя сервисы я смогу как-то управлять этим,но сервисы то ни чо не знают о том кто будет их использовать, и о том что эти использовальщики могут исчезать и появляться.

nerv_ 06.12.2013 19:02

Цитата:

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

я по событию "смена_маршрута" очищял

kobezzza 06.12.2013 19:07

Цитата:

Сообщение от nerv_ (Сообщение 285025)
я по событию "смена_маршрута" очищял

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


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