ФорумПрограммированиеJavaScriptAngularJS → Кто пользовался Angular Light? Выбираю между ним, React.js, Mithril

Кто пользовался Angular Light? Выбираю между ним, React.js, Mithril

27%
Абырвалг, Ivan., artoodetoo
36%
adw0rd, AlexB, zzox, Sinkler
27%
Trej Gun, Br00k, kostyl
0%
9%
vasa_c
0%
0%

Пожалуйста, авторизуйтесь, чтобы проголосовать!
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 февраля 2015 г. 14:56, спустя 18 минут 9 секунд

    Вся прелесть ангуляра в низком пороге, можно уволить опытных js-разрабов и взять верстальщиков, которые хотят быть фронтендщиками, но не особо хотят разбираться в js. Ну и отдать им всю работу опытного js-девелопера, профит. При этом желательно чтобы приложение не особо было богатым всякими фичами, иначе тормоза будут обеспечены и тут уже не спасти приложение с помощью ангуляра и новоиспеченных фронтендщиков

    Но вообще ангуляр ускоряют, во первых там где не надо двустороннего биндинга, то надо его явно отключать, в 1.3 это возможно. Во-вторых читаем статьи Optimizing AngularJS: 1200ms to 35ms - Scalyr Blog [blog.scalyr.com] и AngularJS и ReactJS или как сделать ваше приложение быстрее [habrahabr.ru] или пробуем angular-light (по сути нокаут, который прикидывается ангуляром)

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 22 февраля 2015 г. 15:12, спустя 15 минут 43 секунды

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

    в альфа-клике вроде ещё тоже есть ссылка на первую, хотя вторая версия вполне отлично работает уже не знаю сколько)

  • andrey.lastochkin.96

    Сообщения: 10 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2015 г. 13:57, спустя 22 часа 44 минуты 38 секунд

    Друзья, имею большой опыт серверной и веб-разработки. Поработав с разными решениями в фронт-енд, пламенно советую приглядеться к Mithril. На мой взгляд это идеальный фреймворк. Во-первых он очень простой, во-вторых оставляет за разработчиком полную свободу. В-третьих очень быстрый. В-четвертых дает большую возможность писать тест-ориентированно.

    У меня был годовой опыт knockout, полтора года angular. Потом думал перейти на react, но посмотрел и поизучал другие фреймворки и остановился на mithril. После того, как я (несколько месяцев назад) перешел на mithril, я понял наконец, что задышал полной грудью. Переписал ангуляровский проект на mithril, код сократился в несколько раз и стал намного понятнее, система начала летать.

    Насчет html'а, для mithril есть альтернатива - MSX. Но я ее не использую. Нужно просто привыкнуть один раз к существующему синтаксису и понять, насколько это круто, просто и расширяемо. Кроме того, писать много верстки - признак плохой продуманности интерфейса. Должен быть набор вьюх-шаблонов-деректив. И везде их использовать. Дублировать HTML-структуру и размазывать ее по всему проекту - есть признак плохого подхода. Чем HTML-кода меньше, тем лучше.

    Если будут какие-то вопросы по mithril, или вообще о тех тезисах, которые я озвучил, задавайте, готов на них ответить.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 февраля 2015 г. 15:57, спустя 2 часа 5 секунд

    @andrey.lastochkin.96, привет, я вот только что побыстрому пытался добавить митрил в бенчмарк Plunker [plnkr.co]

    В итоге он проигрывает Angular Light в силу того, что последний использует Object/Array.observe, который точно работает под Chrome и скорее всего работает на FireFox последних версий. Для остальных браузеров по прежнему юзается dirty-checking, но в ECMA7 уже будет Object.observe, так что это только вопрос времени. Вообщем Object.observe это будущее, которое уже наступает и можно его юзать всем фреймворкам.

    В том бенчмарке я смог только сделать "filling", и не очень понял как сделать односторонний биндинг в митриле, про двусторонний там написано, но мне надо односторонний. В общем я не силен в митриле, помоги пожалуйста доделать бенчмарк, чтобы уже до конца понять мне брать Mithril или Angular Light?

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 февраля 2015 г. 16:06, спустя 9 минут 6 секунд

    Почитал на MDN, в общем Chrome с 36-ой версии поддерживает Object.observe, Opera с 23-ей. Включая мобильные версии браузеров

    Спустя 41 сек.

    Так что Firefox, Safari, IE пока не поддерживают

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • andrey.lastochkin.96

    Сообщения: 10 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2015 г. 17:39, спустя 1 час 32 минуты 46 секунд

    Привет. Двустороннего биндинга в mithril не существует. Есть только обработчики события, в которых ты можешь делать, что угодно (в т.ч. и обновлять модель).

    Бенчмарк поправил, он здесь: http://plnkr.co/edit/Y4Xo7vuuWBuQaiO6O3tg?p=preview Смотри Mithril2.

    По цифрам вроде как Mithril уступает. Но если в хроме запустить полный профайл (вкладка Timeline). То если взять общую цифру (Scripting+Rendering+Painting) разницы либо нет, либо у mithril'а меньше (не знаю, может мне показалось). Будь добр, кинь свои результаты.

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 февраля 2015 г. 17:49, спустя 10 минут 31 секунду

    Привет. Двустороннего биндинга в mithril не существует. Есть только
    обработчики события, в которых ты можешь делать, что угодно (в т.ч. и
    обновлять модель).

    @andrey.lastochkin.96, я про это говорил Mithril [lhorie.github.io]

    Спустя 20 сек.

    ну да, это не совсем двусторонний биндинг

    Спустя 214 сек.

    Вот что у меня получилось на Plunker [plnkr.co] (прогонял несколько раз)

    Framework filling update
    jQuery 973 7640
    Knockout.js 2884 377
    Angular.js 4353 712
    Mithril2 789 426
    Basis.js 412 39
    Basis.js template 141 37
    Angular Light (inline) 872 38
    Angular Light 638 38

    Если не учитывать Basis, то Angular Light и Mithril лучшие кандидаты на filling, но вот с обновлением не все так хорошо у последнего

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • andrey.lastochkin.96

    Сообщения: 10 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2015 г. 18:03, спустя 13 минут 30 секунд

    А в каком браузере?

    У меня в хроме вот:

    Framework # filling update
    jQuery Start 192 1953
    Knockout.js Start 481 59
    Angular.js Start 989 206
    Mithril2 Start 125 75
    Basis.js Start 53 8
    Basis.js template Start 30 5
    Angular Light (inline) Start 136 12
    Angular Light Start 105 8

    И учти, что здесь берется в расчет только scripting, без рендеринга.

    Кстати, есть еще одна вещь, которой не хватает в angular. Возможность рендеринга на сервере.
    Помимо основной потребности, еще может потребоваться для рендеринга отчетов, печатных форм (рассылающихся с сервера), можно использовать phantomjs, но будет медленно.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 февраля 2015 г. 18:08, спустя 5 минут 33 секунды

    Ссори, Chrome 40.0.2214.111 (64-bit) под Xubuntu 14.04, Intel i3-2350M 2.30GHz

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 февраля 2015 г. 18:20, спустя 11 минут 40 секунд

    @andrey.lastochkin.96, случайно не надо добавить m.startComputation / m.endComputation в колбек который вызывается после redraw?

    Спустя 35 сек.

    Я кстати поменял на m.redraw(true), а то у меня иногда слишком маленькие значения были в update

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • andrey.lastochkin.96

    Сообщения: 10 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2015 г. 18:23, спустя 2 минуты 56 секунд

    m.redraw(true) полностью пересоздает весь DOM. m.redraw(false) - накатывает только изменения из virtual dom

    startComputation/end просто запрещает автоматический redraw, когда значение счетчика больше 0.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 23 февраля 2015 г. 18:34, спустя 10 минут 52 секунды

    @andrey.lastochkin.96, так у нас все поменялось в virtual dom, и по сути данные отличаются на 100%, т.е. надо делать полную замену. Но у меня при update скачет цифра, то в районе 400, то просто 4. Это как-то странно.

    Boolean forceSync (optional)
    
    If set to true, forces the redraw to be synchronous. By default, event handlers schedule redraws to be done asynchronously in order to allow simultaneous events to run before redrawing (for example, the keypress and input are often used together for inputs). Defaults to false
    

    Как я понял он не откладывает рендеринг при forceSync=true, а начинает рендерить сразу.

    Спустя 57 сек.

    А по поводу поведения (накатывать полностью или только измененное) это к m.redraw.strategy

    Спустя 36 сек.

    Но я сужу только по доке, т.е. в теории, у тебя должен быть обширный практический опыт

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • andrey.lastochkin.96

    Сообщения: 10 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2015 г. 18:38, спустя 4 минуты 33 секунды

    Ага, тут речь идет об обработчике события. Чем хорош mithril, можно взять и посмотреть небольшой исходник. Обширного опыта у меня пока еще нет, конечно, но это знаю.


    m.redraw = function(force) {
    //lastRedrawId is a positive number if a second redraw is requested before the next animation frame
    //lastRedrawID is null if it's the first redraw and not an event handler
    if (lastRedrawId && force !== true) {
    //when setTimeout: only reschedule redraw if time between now and previous redraw is bigger than a frame, otherwise keep currently scheduled timeout
    //when rAF: always reschedule redraw
    if (new Date - lastRedrawCallTime > FRAME_BUDGET || $requestAnimationFrame === window.requestAnimationFrame) {
    if (lastRedrawId > 0) $cancelAnimationFrame(lastRedrawId);
    lastRedrawId = $requestAnimationFrame(redraw, FRAME_BUDGET)
    }
    }
    else {
    redraw();
    lastRedrawId = $requestAnimationFrame(function() {lastRedrawId = null}, FRAME_BUDGET)
    }
    };
  • andrey.lastochkin.96

    Сообщения: 10 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2015 г. 18:43, спустя 5 минут 3 секунды

    Да, кстати, force тут ни на что не влияет. Т.е. всегда одинаково работает.

    Меня вот это cпутало, но это другая функция совсем var forceRedraw = m.redraw.strategy() === "all";
  • andrey.lastochkin.96

    Сообщения: 10 Репутация: N Группа: Адекваты

    Spritz 23 февраля 2015 г. 18:49, спустя 5 минут 42 секунды

    Хотя, гоню. Если setTimeout, и update уместится в тот же animation frame, то запустит ассинхронно. Так что (true) правильно

Пожалуйста, авторизуйтесь, чтобы написать комментарий!