Особливості створення Web-орієнтованих систем з допомогою MEAN стек

Люба х...ня

Анотація. В статті розглянуті особливості створення веб-аплікацій за допомогою сучасних веб-технологій, аспекти вибору інструментів для досягнення мети та переваги MEAN.

Постановка проблеми. Великі продукти вимагають ретельний підбір технологій та інструментів для розробки. В багажі сучасних веб-технологій їх більш ніж достатньо для будь-якого рішення. Якщо десять років тому сайт можна було вважати чимось єдиним та цілим, то сьогодні це чітко поділені частини, кожна з яких вимагає ряд технологій та спеціалізованих працівників.

Аналіз останніх досліджень і публікацій.  Протягом усього часу стрімкого розвитку веб-технологій було випущено велику кількість книг та публікацій, зокрема праці Маріо Кашіаро, Арі Лернер та Саймон Холмс.

Постановка завдання. Основним завданням, яке поставлене при написанні статті, є аналіз веб-технологій та переваги використання MEAN для створення веб-аплікацій.

Виклад основного матеріалу. Популярність та зручність всесвітньої павутини спровокувала рушійний поштовх для розвитку Web-Технологій. Створюються нові інструменти для розробки, мови програмування, фреймворки, що дозволяють розробляти дивовижні речі, які можна використовувати через вікно браузера. Всі провідні розробники програмного забезпечення стараються розробити Web версії своїх продуктів для бізнесу, комунікації та розваг суспільства.

По мірі розвитку Інтернету бізнес-компанії почали прискіпливіше ставитися до того, як вони представлені суспільству. Для цього потрібно було приділяти більше уваги клієнтській частині веб-аплікації. Доводилось витрачати багато часу для написання каскадних таблиць стилів та клієнтського JavaScript, щоб зробити сайт цікавішим та складнішим. Ці події дали поштовх для розподілення розробки на частини. Саме тоді стали розділяти розробників прикладної та клієнтської частини.

В той час, як розробники прикладної частини акцентують свою увагу на закулісній магії, розробники клієнтської частини роблять все для приємної взаємодії користувача з сайтом.

Великий вплив на розвиток веб-технологій внесла поява різноманітних фреймворків та бібліотек. Це супроводжує тенденцію перенесення логіки аплікації з серверної частини в клієнтську. Можна розглядати це, як програмування прикладної частини в клієнтській. Найбільшу популярність серед фреймворків, які використовують цей підхід, стали – Angular, Backbone та Ember.

Однією з причини популярності такого підходу є зниження навантаження серверної частини, шляхом перенесення логіки на клієнтську. Зменшуються витрати на серверне забезпечення, так як обчислювальні роботи переносяться на сторонку клієнтського браузера.

Ці фактори вплинули на колосальний прорив у розвитку та популярності клієнтських технологій, невід’ємним інструментом яких стає JavaScript.

JavaScript, наразі, є однією з найпопулярніших мов програмування в інтернеті. Але спочатку багато професійних програмістів скептично ставилися до мови, цільова аудиторія якої складалася з програмістів-любителів. Поява AJAX змінила ситуацію та повернула увагу професійної спільноти до мови, а подальші модифікації мови за стандартами ES2015 та ES2017 внесли багато корисних можливостей, яких не вистачало для ефективного програмування. В результаті, були розроблені та покращені багато практик використання JavaScript (зокрема, тестування та налагодження), створені бібліотеки та фреймворки, поширилося використання JavaScript поза браузером.

MEAN - це абревіатура яка з складається з MongoDB, ExpressJs, Angular і NodeJs. Це набір комплексного програмного забезпечення, який використовують для веб розробки.

Плюсом MEAN є те, що він використовує в зв’язці ряд найкращих в своїй ніші веб-технологій. Та основну роль відіграє використання спільної мови програмування JavaScript. Звичайно, що кожна з відокремлених частин аплікації вимагає досконалих знавців своєї справи, але цей стек дає велику перевагу людям, які прагнуть впливати на всю розробку та зекономити час для вивчення інших мов програмування. Розглянемо кожну з цих технологій детальніше.

Node.js призначений для відокремленого виконання високопродуктивних мережних застосунків на мові JavaScript. Функції платформи не обмежені створенням серверних скриптів для веб, платформа може використовуватися і для створення звичайних клієнтських і серверних мережевих програм. Для забезпечення виконання JavaScript-коду використовується розроблений компанією Google рушій V8.

Для забезпечення обробки великої кількості паралельних запитів у Node.js використовується асинхронна модель запуску коду, заснована на обробці подій в неблокуючому режимі та визначенні обробників зворотніх викликів (callback). Як способи мультиплексування з'єднань підтримується epoll, kqueue, /dev/poll і select. Для мультиплексування з'єднань використовується бібліотека libuv, для створення пулу потоків (thread pool) задіяна бібліотека libeio, для виконання DNS-запитів у неблокуючому режимі інтегрований c-ares. Всі системні виклики, що спричиняють блокування, виконуються всередині пула потоків і потім, як і обробники сигналів, передають результат своєї роботи назад через неіменовані канали (pipe). За своєю суттю Node.js схожий на фреймворки Perl AnyEvent, Ruby Event Machine і Python Twisted, але цикл обробки подій (event loop) у Node.js прихований від розробника і нагадує обробку подій у веб-застосунку, що працює в браузері. При написанні програм для Node.js необхідно враховувати специфіку подієво-орієнтованого програмування, наприклад, замість виконання.

Express.js, або просто Express — програмний каркас розробки веб-застосунків для Node.js, реалізований як вільне і відкрите програмне забезпечення під ліцензією MIT. Він спроектований для створення веб-застосунків і API. Де-факто є стандартним каркасом для Node.js. Автор фреймворка, TJ Holowaychuk, описує його як створений на основі написаного на мові Ruby каркаса Sinatra, маючи на увазі, що він мінімалістичний, але має велику кількість плаґінів, що підключаються. Express є бекендом для програмного стека MEAN, разом з базою даних MongoDB і каркасом AngularJS для фронтенду.

MongoDB — документо-орієнтована система керування базами даних (СКБД) з відкритим сирцевим кодом, яка не потребує опису схеми таблиць. MongoDB займає нішу між швидкими і масштабованими системами, що оперують даними у форматі ключ/значення, і реляційними СКБД, функціональними і зручними у формуванні запитів. Код MongoDB написаний на мові C++ і поширюється в рамках ліцензії AGPLv3. MongoDB підтримує зберігання документів в JSON-подібному форматі, має досить гнучку мову для формування запитів, може створювати індекси для різних збережених атрибутів, ефективно забезпечує зберігання великих бінарних об'єктів, підтримує журналювання операцій зі зміни і додавання даних в БД, може працювати відповідно до парадигми Map/Reduce, підтримує реплікацію і побудову відмовостійких конфігурацій. У MongoDB є вбудовані засоби із забезпечення шардінгу (розподіл набору даних по серверах на основі певного ключа), комбінуючи який реплікацією даних можна побудувати горизонтально масштабований кластер зберігання, в якому відсутня єдина точка відмови (збій будь-якого вузла не позначається на роботі БД), підтримується автоматичне відновлення після збою і перенесення навантаження з вузла, який вийшов з ладу. Розширення кластера або перетворення одного сервера на кластер проводиться без зупинки роботи БД простим додаванням нових машин.

Angular — JavaScript-фреймворк з відкритим програмним кодом, який розробляє Google. Призначений для розробки односторінкових додатків, що складаються з одної HTML сторінки з CSS і JavaScript. Його мета — розширення браузерних застосунків на основі шаблону Модель-вид-контролер (MVC), а також спрощення їх тестування та розробки. Фреймворк працює зі сторінкою HTML, що містить додаткові атрибути і пов'язує області вводу або виводу сторінки з моделлю, яка є звичайними змінними JavaScript. Значення цих змінних задаються вручну або отримуються зі статичних або динамічних JSON-даних.

Обравши правильні технології для розробки, ми маємо гарантію того, що наша аплікаціє буде розроблена правильним шляхом. Інструменти MEAN дуже добре працюють в зв’язці та ідеально підходять для досягнення мети. Підсумовуючи можна сказати, що MEAN може підійти не для всіх рішень, через свої особливості, наприклад через документно-орієнтовану СУБД, але для конкретних завдань виправдовує довіру.


 

Розкажіть нам про свій проект!