![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
MEAN – это Mongo DB + express.js + angular.js + node.js. Это такой новый LAMP – и он сыграет такую же роль в развитии небольших интерактивных многопользовательских проектов и особенно сервисов, как в своё время “сыграл” LAMP при взрывном росте количества небольших сайтов.
С одной стороны, это здорово. Я наблюдаю огромное количество проектов на этой связке. С другой стороны, уже вполне начало проявляться то, чем грешил LAMP – попытка натянуть простую, но неподходящую архитектуру на сложный проект.
Как это было в LAMP
Хороший пример LAMP – Битрикс, который умеет всё, но ничего не умеет хорошо и быстро. Когда Битрикс был маленький, он был быстрый (хотя и дырявый). А потом стала ограничивать платформа – потому что иногда нужна быстрая key-value БД, а у тебя под рукой только MySQL. Потому что для организации расширяемой бизнес-логики по-хорошему язык должен поддерживать функции как объекты первого класса – а php это заумел только с 5.3 (медленно и через жопу). Потому что апач – это приемлемо для “классического” около-REST веб-сервера, но совсем плохо для организации IM-обмена. Ну итд.
Ровно то же самое будет происходить с MEAN. Покомпонентно в нём два слабых звена – Angular и Mongo. Разбираю.
Mongo DB
Это прекрасная NoSQL БД, когда у проекта нет дизайна. Не от русского слова “дизайн”, а от английского “design”. Ну то-есть нужна какая-то БД. Когда заранее неизвестно, что точно от БД требуется, но хорошо бы, чтобы БД умела всё, мало ли что понадобится. MongoDB (как и MySQL) такая и есть.
- Key-value – умеет, но небыстро, до Redis или Couchbase как до звёзд.
- Map-reduce – умеет, но очень медленно, до CouchDB как до звёзд.
- Репликация – умеет, но криво и ненадёжно, с Couchbase не сравнить даже.
- Индексы – умеет, но медленнее SQL.
- Geospatial index как бы есть, но нечеловеческий.
- Fault-tolerance вроде ничего, но для решения, которое настолько плохо масштабируется – до Riak как до звёзд.
- Write lock настолько страшен, что блокирует целую таблицу даже для чтения – то-есть как MyISAM в MySQL, но без вкусности в виде полнотекстового поиска в качестве компенсации )). Для асинхронного javascript-мира блокировка кста вообще абсолютное зло.
Зато Монго очень проста для понимания человеку, пересаживающемуся с SQL. Проще всего Монго воспринимать как такую SQL-таблицу, в которой колонки заранее не приколочены. Всё остальное очень похоже на SQL.
Angular
Всё, что нужно знать про Angular – это то, что если вы писали на php например<div>Width = <?php echo (width/2.54); ?>см</div>
, с помощью Angular вы будете писать<div>Width = { {someObj.width/2.54;}}см</div>
.
Оно имеет все те же родовые травмы, что и php – фрагментарность, недекларативность и “размазанность” кода, который затруднительно разделять на независимые компоненты.
Зато оно позволяет очень быстро делать простые какие-то проекты с несложным интерактивом.
UPD. После написания поста в ЖЖ вскрылась уязвимость. Код Angular выше исполнялся и заменялся на null, пришлось вставить пробел между { и {. Таким образом мы имеем явную проблему с Angular – типа XSS. Пусть оно называется XSAS – cross site angular scripting. Чёто не особо улыбается проверять юзеринпуты на то, могут ли они быть Angular-кодом.
Итого
В любом случае MEAN – это отличная альтернатива LAMP. Уже вовсю появляются хостинги под него (Nodejitsu, Heroku), codebase под js растёт бешенными темпами, оно всё модульное и легко настраивается.
Но это неуниверсальное решение для небольших проектов.
no subject
Date: 2013-12-10 08:48 am (UTC)