Изменения

ECMAScript и все-все-все

428 байтов добавлено, 19:35, 11 октября 2016
м
Нет описания правки
* Чакра Наделлы тоже очень похожа на V8
* Постоянная битва :) https://arewefastyet.com/
* {{red|Но язык - ещё не всё!}} Ещё есть:
*: В браузере — {{green|DOM}} (медленный в старых Firefox при формально быстром JS)
*: На сервере — {{green|ввод/вывод}}
*: 1M соединений переваривает даже успешнее — [https://blog.whatsapp.com/196/1-million-is-so-2011 на продакшне у WhatsApp]
*: и gc быстрый (кучи отдельные)
*: {{gray|но... но… erlang. свои минусы и [https://habrahabr.ru/post/183150/ начинает хотеться монад]}}
* [http://blog.virtan.com/2012/07/million-rps-battle.html Million RPS Battle]
* a == b (мягкое сравнение) и a === b (точное сравнение)
*: <tt><nowiki>"" == false, 0 == false, "1" == true, 1 == true, "5" == 5, null == undefined</nowiki></tt>
* regexp literals: <tt><nowiki>var re = /<html[^<>]*>/i;</nowiki></tt>
* break label, continue label
* Цикл по {{blue|ключам}}: <tt><nowiki>for (var i in obj) {}</nowiki></tt>* '''Цикл по {{green|значениям (ES6)'''}}: <tt><nowiki>for (var i </nowiki>{{blue|of }}<nowiki> obj) {}</nowiki></tt>
<source lang="javascript">
==== Нюансы с исключениями @@ ====
{{red|Нюанс 1: Promise'ы nodejs глотают исключения}}
Решение — [http://bluebirdjs.com Bluebird], он бросает '''Unhandled rejection error'''
</source>
{{gray|Оговорка: чёткой уверенности, что это лучше CommonJS, у меня нет. Но гибче, да.}}
=== Template strings @@ ===
* [http://jshint.com/ jshint] — проверка на ошибки и стиль
* yui-compressor, closure compiler — обфускаторы
* [http://rollupjs.org/ rollup] - система сборки для ES6 модулей (используется реже)
=== IDE, редакторы, отладка @@ ===
==== Пример @@ ====
<!-- --div></div>
&lt;div '''ng-controller="LoanCalculator"'''&gt;
&lt;div&gt;
* Перешли на TypeScript ''{{gray|и всех агитируют}}''
* Обновились в целом
* {{green|Больше "искаропки"«искаропки»}}
* {{red|Но зато тяжелее. Зачем-то тянет за собой RxJS…}}
* {{mag|JSX}}: на первый взгляд странно, на самом деле — круто и удобно!
* '''Строго однонаправленный''' поток данных
*: {{gray|(2-way binding - binding — как чуть сложнее, так проблема)}}
* {{green|Правильная компонентность}}
*: Убирает все сомнения в том, MV-что у нас — MVVM, MVC, M-V-VC, M-V-VC-VM…
* Обязательный метод ОДИН: {{blue|render()}}
* props и state {{gray|(внешнее XML-атрибуты и внутреннее состояние)}}* children (дочерние компоненты)
* getDefaultProps(), getInitialState()
* setState(). {{red|нет setProps() и setChildren()!}} {{gray|(получает при render родителя)}}
* componentWillMount(), componentDidMount(), componentWillUnmount()
* componentWillReceiveProps(p), shouldComponentUpdate(p, s)
* И к вызовам действий
* Действие = reducer: {{mag|(Состояние, Действие) &rarr; (НовоеСостояние)}}.
: {{gray|&rarr; Очень чёткое отделение контроллера}}
=== Как писать на React @@ ===
=== Прочее @@ ===
* Мобильное** React Native**: {{gray|Virtual DOM над нативными компонентами}}** NativeScript**: {{gray|XML}}** {{green|Уверен, появятся ещё}}
* https://html5gameengine.com/
* WebGL: SceneJS, OSG.JS, Blend4Web