Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 27.09.2013, 00:38
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
Ответ от создателя ангуляра
Да там хрен уйдеш от грязной проверки.

Авторам ангуляра можно было поиграться с сеттерами defineProperty. Но Watcher непосредственно из сеттера defineProperty дергать не вариант. Так как в случае присваивания свойств в цикле, сеттеры дернут watcher столько раз сколько будет итераций в цикле. К слову set() в extJs аналогично будет генерить события для каждого вызова set. Сейчас благодаря отсутствию сеттеров можно вытворять со скопом все что угодно, а потом опубликовать изменения одним махом при помощи digest.

Второй вариант использования сеттеров defineProperty заключается в регистрирации сеттерами в каком нибудь массиве изменившихся свойств. Затем в момент вызова digest можно бы было публиковать только рекомендованные сеттерами свойства. Однако похоже что быстрее просто сравнить новое значение свойства со старым значением, чем тратить время на работу геттеров/сеттеров. Только представьте сколько времени сожрут геттеры/сеттеры вызываемые при использовании скопа внутри цикла.

На мой взгляд сравнение нового значения со старым это самый оптимальный подход.

а вот watchСollection это медленная штука.
Изменение большого массива который еще и наблюдается целиком это пиздец, ангуляр каждый элемент в массиве при публикации проверит чтобы найти измения.
из исходников
// copy the items to oldValue and look for changes.
            for (var i = 0; i < newLength; i++) {
              if (oldValue[i] !== newValue[i]) {
                changeDetected++;
                oldValue[i] = newValue[i];
              }
            }

1й) не прятный момент это перебор массива но без него ни как. Если мы наблюдаем весь массив целиком то нам важно любое изменение.
2й) неприятный момент это то что watchcollection всегда имеет копию наблюдаемого массива oldValue со старыми значениями, что было с чем сравнивать. Тобиш расходуется память в двойном размере.

Ище одна жопа в том что цикл нельзя прервать при первом обнаруженном изменении так как нужно скопировать все значения в oldvalue. Получается в любом случае массив придется перебрать целиком.

к слову обьекты наблюдаемые целиком он тоже перебирает.

За исключение watchcollection все реализовано потрясно, что касается watchcollection то не уверен что можно придумать что то лучше.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 27.09.2013 в 02:48.
Ответить с цитированием
  #12 (permalink)  
Старый 30.09.2013, 08:57
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Полностью на Ангуляре не стал бы делать интернет-магазин. По-крайней мере еще пол года - год, пока не запилят генерацию html на сервере и с SEO чуть понятней не станет.

Но отдельно на страничках, особенно в админке, ему самое место.
Ответить с цитированием
  #13 (permalink)  
Старый 02.10.2013, 23:20
Интересующийся
Отправить личное сообщение для Fronnt Посмотреть профиль Найти все сообщения от Fronnt
 
Регистрация: 24.09.2013
Сообщений: 24

Как относитесь к этой статье? https://moot.it/blog/technology/fram...avascript.html Человек не понял где стоит использовать Angular-подобные, а где нет? Или это и правда мода с сомнительной ценностью для большинства приложений?
Ответить с цитированием
  #14 (permalink)  
Старый 02.10.2013, 23:38
Аватар для Madzi
Аспирант
Отправить личное сообщение для Madzi Посмотреть профиль Найти все сообщения от Madzi
 
Регистрация: 15.06.2013
Сообщений: 38

Умные люди начинают пользоваться фреймворками когда перестают устраивать стандартные средства.

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

Потом jQuery становиться мало, потому что код превращается в пухлый ком, в котором очень сложно разобраться. На помощь приходят AMD, require.js и подобные фреймворки, которые помогают структурировать код. Разбить его на отдельные логические (и функциональные) модули.

Потом человек привыкает к фреймворку и то, что раньше делалось простым js начинает делаться с помощью "любимого" фреймворка.
Об этом и статья. Что всегда нужно смотреть, где необходим фреймворк (типа Angular), где достаточно библиотеки (типа jQuery), а где можно писать на чистом js.

Однако вся эта демагогия хорошо работает до поры до времени. Если есть команда, если команда работает с конкретным фремворком, то лучше его использовать во всех проектах, чем в каждом проекте иметь свой фреймворк, свою структуру и т.п. Так как всё это влияет на стиль кода (соответственно и на качество).
Ответить с цитированием
  #15 (permalink)  
Старый 03.10.2013, 18:10
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Прочитал https://moot.it/blog/technology/fram...avascript.html
Цитата:
Люди не должны беспокоиться о внутренних механизмах, таких как watch$, $apply или $digest. Я хочу только магию!
Watch и так автоматом вызывает digest, тоже касается и функций прописанных в ngclick. Использовают Apply как правило вне подобных методов. Полностью магию можно реализовать только геттерами и сеттерами, за которые придется дорого платить производительностью (я писал выше об этом).

Цитата:
Довольно сложную логику лучше выражать старым добрым JavaScript.
Простое решение выглядит простым только если оно существует само по себе. Чем взаимодействие этих простых решений сложнее между собой, тем сложнее проект в совокупности. То есть в какой то момент взаимодействие компонентов между собой оказывается сложнее самих компонентов. И вот чтобы решить проблему взаимодействия нам как раз нужны фреймворки вроде Backbone или Angular или Ember и т.п. В фреймворках есть готовые решения позволяющие связать компоненты приложения воедино. А в нативном JS вы с голой жопой перед этой проблемой. Любое красивое решение на JS которое вы изобретете для связывания окажется похожим на один из существующих фреймворков.

Ситуация такова что в большом приложении либо вы используете готовый фреймворк, либо пишете его сами

Цитата:
Контролы на jQuery
Насчет контролеров на jQuery я согласен, это неплохой инструмент но не панацея. В Ajax приложениях управление такими контролами превращается в проблему. Тобишь приложению нужно запускать разные контролы в зависимости от загруженного при помощи ajax контента. Это можно решить либо через инициализацию контролов каким то подобием роутера, либо декларативной инициализацией контролов в самом подгруженном контенте. Но в последнем случае есть неудобство со связыванием контрола с внешними данными. К примеру в ангуляре эту проблему решает вложенность scope;

Также соглашусь с тем что архитектура не должна диктоваться модой, и что возможно иногда стоит сочетать несколько подходов.

Приятные впечатления
https://github.com/melanke/Watch.JS

Ну и от этих неплохие
http://rivetsjs.com/
http://witch.io/
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 03.10.2013 в 21:11.
Ответить с цитированием
  #16 (permalink)  
Старый 03.10.2013, 19:18
Интересующийся
Отправить личное сообщение для Fronnt Посмотреть профиль Найти все сообщения от Fronnt
 
Регистрация: 24.09.2013
Сообщений: 24

Спасибо за аргументированные ответы.
Кстати, выкроил время и решил глянуть что и с чем едят эти инструменты - сказать что я был ошеломлен - ничего не сказать. Для себя сделал вывод что я знатный велосипедист и временами трачу кучу времени на написание новых великов для разработки одностраничного приложения. Когда я начал писать, думал что не так сложно, но сейчас просто топлюсь в усложнении логики. Фреймворк дает мне мощные инструменты прямо из коробки + документация. Если следующий схожий проект я и буду писать своими силами, так точно при помощи Angular/Ember/Backbone. Пускай тот же Angular и содержит 15000(?) строк и не держит IE6, но мне мои нервы и время дороже. Нахрен перфекционизм с pure js для таких проектов Меня уже прокрастинация начинает потихоньку жрать.
Ответить с цитированием
  #17 (permalink)  
Старый 03.10.2013, 19:20
Аватар для Madzi
Аспирант
Отправить личное сообщение для Madzi Посмотреть профиль Найти все сообщения от Madzi
 
Регистрация: 15.06.2013
Сообщений: 38

Мне кажется тут забыли ещё упомянуть YUI наравне с Angular/Ember/Backbone.
Ответить с цитированием
  #18 (permalink)  
Старый 09.10.2013, 00:51
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Riim
прилы (вроде не сложные) на angular заметно "притормаживают" даже на desktop-е. На мобилках, наверное, вообще все жестко вешаться будет.
какие пути решения проблемы / оптимизации производительности предложите? Кроме того, что не использовать ангуляр

сюда переехало Angular: Performance optimization / Оптимизация производительности
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 09.10.2013 в 01:03.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
HTA-приложение для радио Pianorama Magneto Ваши сайты и скрипты 42 22.01.2012 08:34
Новая система управления сайтом Scripto CMS deepslam Ваши сайты и скрипты 38 31.01.2011 14:55
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31