Javascript-форум (https://javascript.ru/forum/)
-   Сборка проекта, утилиты (https://javascript.ru/forum/server-tools/)
-   -   Оптимизация WorkFlow! (https://javascript.ru/forum/server-tools/47785-optimizaciya-workflow.html)

melky 07.06.2014 10:02

Оптимизация WorkFlow!
 
Джуниор хочет стать миддлом :)
Я раньше не писал на ноде.. да и особо за backend не брался, но месяц назад всё изменилось - решил сделать очередной сайт не на Wordpress, и даже не на Yii, а на Express (то есть, "не на PHP, а на JS")
короче. после еще двух проектов я понял, что нужно оптимизировать WorkFlow. И меня уже две недели не отпускает эта затея.
Абстрактное понятие "оптимизация" в этом контексте раскрывается как "за одинаковые усилия иметь больше результата".
Ещё короче. Конечная цель - меньше рутины, больше дела
ещё короче - личные заметки)

melky 07.06.2014 10:02

Сам план WorkFlow
 
  1. Scaffold

    Yeoman
    Языки:
  2. BE + FE!


    FrontEnd

    BackEnd
  3. Сборка (FrontEnd)

    Webpack - упаковщик модулей. Сумашедшая вещь:
    1. Встроенный LiveReload, Watcher, Hot update - это LiveReload с обновлением конкретно обновленного модуля, а не всего приложения.
    2. Возможность встраивания живого скрипта в любую страницу (webpack-dev-server в режиме inline)
    3. Сборка в оперативной памяти в режиме разработки и инкрементальная сборка.
    4. Опциональный условный инлайн картинок в стилях
    5. Использование модулей огромного количества типов (AMD, ES6, CJS, UMD)
    6. Абстрагирование от языков и файловой структуры - нет файлов, всё является модулем
    7. Режим сборки для продакшена - сжатие, дописывание путей
  4. Тестирование

    Сравнение
    Chai в режиме should

    FrontEnd

    BackEnd
    Mocha
  5. Размещение

melky 07.06.2014 10:03

ещё резерв. мб ограничения по символам не хватит

nerv_ 07.06.2014 13:15

melky, а база? Из описанного выше, я вижу только статику и
Цитата:

Сообщение от melky
ORM - Mongoose

---

Цитата:

Сообщение от melky
короче. после еще двух проектов я понял, что нужно оптимизировать WorkFlow.

у нас просто есть заготовка проекта, которая форкается + sql dump file, который импортится :)

melky 09.06.2014 10:56

Цитата:

Сообщение от nerv_ (Сообщение 315465)
melky, а база? Из описанного выше, я вижу только статику и

за базу взят express... отличная свобода, но слишком много приходится дописывать руками.

хз, express слишком низкоуровневый, чтобы на нём что-то быстро разрабатывать

можно, впринципе, напилить для него структуризации, генераторов .. но получится в итоге ещё один фреймворк.. а ещё один - нинужон :agree:

так что хз ... ещё приглядываюсь)


Цитата:

Сообщение от nerv_ (Сообщение 315465)
у нас просто есть заготовка проекта, которая форкается + sql dump file, который импортится :)

тоже вот хочу такую заготовку сделать, но динамическую - чтобы её состав решался в зависимости от отвеченных вопросов в Yeoman

Safort 21.03.2015 21:52

melky,
много времени прошло, наверняка многое из списка поменялось. Может, обновишь?)

Gozar 22.03.2015 11:41

Цитата:

Сообщение от melky
express слишком низкоуровневый, чтобы на нём что-то быстро разрабатывать

Может быть давняя привычка, но проблемы в этом не вижу, скорее наоборот. Можно и без express, но тогда по сути придется сделать почти идентичную обёртку над базовым функционалом. Чем быстрее разрабатывать, тем медленнее сервер обычно.

Я бы добавил Snakeskin.ss шаблонизатор, очень помогает жить, а не выживать.

Из базы я выбрал OrientDB. На данный момент красавица :) Посмотрим что будет дальше. Драйвер oriento для node вполне себе отвечает уровню. Не идеально, но думаю ещё обрастёт сахаром.

Safort 22.03.2015 15:15

Gozar,
Цитата:

Может быть давняя привычка, но проблемы в этом не вижу, скорее наоборот. Можно и без express, но тогда по сути придется сделать почти идентичную обёртку над базовым функционалом.
А koa пробовал? По мне как значительно удобнее, чем express.

Gozar 22.03.2015 16:27

Цитата:

Сообщение от Safort
удобнее

С этого места поподробнее. Плюсы, минусы?

Для меня важны скорость и удобство. Express удобный базовый паттерн роутера.

Safort 22.03.2015 18:01

Gozar,
плюсы: похож на express(перейти довольно легко), но имеет более лаконичный API. Поддерживает некоторые плюхи из ES6.
минусы: стабильность(на данный момент 0.18.1 версия). Требует Ноду от 0.11 или io.js.

Koa создал автор Express и, разумеется, должен был учесть прошлые ошибки)

Safort 22.03.2015 18:03

Сравнение https://www.airpair.com/node.js/post...press-koa-hapi

В Koa, как и в новых версиях Express, нету родного роутинга, нужно устанавливать дополнительные модули.

melky 22.03.2015 18:29

Цитата:

Сообщение от Safort (Сообщение 362416)
melky,
много времени прошло, наверняка многое из списка поменялось. Может, обновишь?)

да, несколько штук поменялось

Цитата:

Сообщение от Gozar (Сообщение 362471)
Чем быстрее разрабатывать, тем медленнее сервер обычно.

:blink:

Цитата:

Сообщение от Safort (Сообщение 362540)
минусы: стабильность(на данный момент 0.18.1 версия). Требует Ноду от 0.11 или io.js.

babel :)

Цитата:

Сообщение от Safort (Сообщение 362540)
Koa создал автор Express и, разумеется, должен был учесть прошлые ошибки)

если считать уродливый middleware за ошибку - то да
в koa реализация мидлверов уже поприятней

а вообще, видел шумиху вокруг hapi - так что интересно попробовать его

Safort 22.03.2015 18:38

Цитата:

Сообщение от melky (Сообщение 362551)
babel :)

У меня не получилось его завести(

Цитата:

а вообще, видел шумиху вокруг hapi - так что интересно попробовать его
А я вот не видел, но синтаксис кажется более громоздким.

melky 22.03.2015 19:00

Оформлю следующий этап "эволюции кодовой обезьяны" отдельным сообщением, дабы можно было углядеть [де]градацию.
  1. Scaffold

    Yeoman
    Языки:
    • Приложение: JavaScript, ECMAScript 6
    • Разметка: JSX (React)
    • Стили: Stylus
  2. Общие штуки
    Всё в куче. Связанное с программированием и не очень.
    • Стили - BEM от Nicolas Gallagher
    • Разметка (компоненты React): модуль + фасад
    • Общий рабочий процесс - TDD. хз насчёт статей. использую интеграционные тесты для определения задач, которые нужно имплементировать. Хоть и не похоже на TDD в чистом виде, подход "тест-имплементация-рефакторинг" остался.
    • Контроль, задачи - Bitbucket issues (с полным набором - компонентами, вехами, важностями, версиями и д.р.)
    • Git Flow - для организации коммитов и вообще всего, что происходит в репозитории
    • Toggl - замерить время на проекты \ задачи
    • Схемы - mindmup. На телефоне - SimpleMind Free mind mapping. Недооценённая штука
    • Управление временем. Как-то заболела спина и глаза. Попользовался Pomodoro. сейчас использую режим 45\15 как более привычный
  3. BE + FE!


    FrontEnd

    BackEnd
    • FW - Express
    • ORM - Sequelize
    • База - PostgreSQL
  4. Сборка

    Webpack - упаковщик модулей.

    Через webpack делается 2 сборки - клиентская (для браузера) и серверная (для серверной отрисовки)
  5. Тестирование

    Сравнение
    Chai в режиме should, chai-as-promised, sinon, sinon-chai, rewire

    FrontEnd
    • Mocha. Если нужно в браузере - mocha-loader для webpack. На практике, для React хватило и jsdom; результат - скорость выполнения тестов довольно неплохая

    BackEnd
    тоже Mocha
  6. Окружение

    Во всех 3х окружениях (разработка, тесты и боевой сервер) приложение крутится в Docker.

    Приложение поделено на микросервисы, каждый запускается в своем контейнере.

    Для манипулирования контейнерами использую docker-compose (в прошлом, fig).

    Окружения отличаются только переменными окружения (которые передаются из машины напрямую в контейнер).

    Кластеризацию и горизонтальное масштабирование пока не посчастливилось попробовать, но проблем возникнуть не должно (спс, Docker)

    Для разработки из под Linux использую сразу Docker, из под Windows - Vagrant Ubuntu с установленным внутри docker.

  7. Размещение
    • Исходников Bitbucket
    • Приложения OpenShift. Но из-за Docker может разместиться везде, хоть у меня на телефоне или роутере

melky 22.03.2015 19:06

Цитата:

Сообщение от Safort (Сообщение 362554)
У меня не получилось его завести(

вроде easy - require('babel/register')

для решения проблемы относительными путями модулей я добавляю папку проекта к каталогам поиска модулей:

в файле задания переменных окружения ( %APP%/.env )
Код:

# ....
export NODE_PATH=.

Цитата:

Сообщение от Safort (Сообщение 362554)
А я вот не видел, но синтаксис кажется более громоздким.

подход "конфигурация превыше всего". вроде мало кода, но вот не потечёт ли абстракция - не уверен

Safort 22.03.2015 20:14

melky,
Цитата:

Приложение: JavaScript, ECMAScript 6
Эмм... :)


Цитата:

вроде easy - require('babel/register')

для решения проблемы относительными путями модулей я добавляю папку проекта к каталогам поиска модулей:

в файле задания переменных окружения ( %APP%/.env )
А я просто переключаюсь на 0.12 или io.js.

Gozar 22.03.2015 20:29

Использую MySQL Workbench - для проектирования базы OrientDB :) и указания связей.

Erolast 23.03.2015 08:13

Цитата:

У меня не получилось его завести(
А ты точно инструкцию читал? https://babeljs.io/docs/using-babel/

Safort 25.03.2015 23:58

Цитата:

Сообщение от Erolast (Сообщение 362612)
А ты точно инструкцию читал? https://babeljs.io/docs/using-babel/

Неа:(

Erolast 28.03.2015 15:11

Цитата:

вроде easy - require('babel/register')
Еще проще - поставить бабель глобально и херачить babel-node вместо node.
Код:

npm install -g babel
babel-node ./index.js



Часовой пояс GMT +3, время: 08:43.