MEAN

Dec. 8th, 2013 09:48 pm
ermouth: (ang)
[personal profile] ermouth

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) такая и есть.


  1. Key-value – умеет, но небыстро, до Redis или Couchbase как до звёзд.

  2. Map-reduce – умеет, но очень медленно, до CouchDB как до звёзд.

  3. Репликация – умеет, но криво и ненадёжно, с Couchbase не сравнить даже.

  4. Индексы – умеет, но медленнее SQL.

  5. Geospatial index как бы есть, но нечеловеческий.

  6. Fault-tolerance вроде ничего, но для решения, которое настолько плохо масштабируется – до Riak как до звёзд.

  7. 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 растёт бешенными темпами, оно всё модульное и легко настраивается.

Но это неуниверсальное решение для небольших проектов.

Date: 2013-12-10 08:48 am (UTC)
From: [identity profile] agentcooper.livejournal.com
спасибо за багрепорт, поправим. проверять не обязательно, есть ngNonBindable (http://docs.angularjs.org/api/ng.directive:ngNonBindable). да и позвать зловредный код через эту штуку не выйдет (предполагая, что нету чего-то вроде $scope.eval = eval )

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 21st, 2025 06:25 pm
Powered by Dreamwidth Studios