Yamato DaiwaFrontend (2.0.0-beta.0)

Интеграция с @yamato-daiwa/es-extensions (YDEE)

После включения файла Functionality.pug (находится в корневой директории npm-пакета @yamato-daiwa/frontend) становятся доступна вся функциональность библиотеки «@yamato-daiwa/es-extensions» (сокращённо: «YDEE») версии 1.7 кроме той, которая прекращает своё существование после транспайлинга TypeScript в JavaScript (интерфейсы, псевдонимы типов и т.д.).

Основной случай, когда такая функциональность востребована — простейший мокинг данных на стадии вёрстки (статического превью). Вот как, например, можно быстро написать разметку 16 карточек товаров с пускай и бессмысленными, но данными:

Здесь были использованы функции getRandomString, getRandomObjectPropertyValue и getRandomInteger из YDEE, при этом константа DummyImagesURIs типа «ассоциативный массив» является частью YDF. В результате, для каждой карточки будет сгенерирован HTML-код, подобный приведённому ниже (значение аттрибута src у тэга img частично опущено, чтобы не занимать место):

Однако, даже если Вы не планируете такое использование YDEE, она всё равно необходима для нормальной работы функциональности YDF, связанной с разметкой, например для валидации параметров Pug-примесей:

Ответы на часто задаваемые вопросы и критику

Критика

То есть в Pug-коде содержится почти весь код библиотеки YDEE? Это не перебор?

Ответ
Любая функциональность добавляется в YD-библиотеки только после того, как в ней появляется практическая необходимость. В отношении интеграции с YDEE практическая необходимость была и есть — примеры прямого и опосредованного использования были приведены выше. Если в какой-то функциональности необходимость со временем исчезает, то мы её заменяем на новую или в редких случаях удаляем (хотя YDF — библиотека, опубликованная относительно недавно, она и её прототипы проходили альфа-тестирование несколько лет). Однако потребность в интеграции с YDEE устойчивая, а потому её удаление не планируется.
Вопрос

Не снизит ли наличие YDEE-кода скорость преобразования Pug-кода в HTML при использовании с MVC-фреймворками на серверной стороне?

Ответ

Снизит, и значительно (где-то на 2-3 секунды, но для формирования ответа сервером это считается неприемлемым).

Интеграция с YDEE предназначена в основном для стадии вёрстки (статического превью ), однако при условии, что преобразование из Pug в HTML осуществляется заранее до публикации каждой версии сайта или приложения , интеграцию с YDEE можно использовать и на других этапах разработки.

Вероятно, Вы задаёте этот вопрос потому, что хотите знать, что делать в случаях, когда функциональность YDEE нужна и на стадии создания интерактивного сайта или приложения с рендерингом на серверной стороне и использованием паттерна MVC, например для того, чтобы работала валидация параметров Pug-примесей (в частности примесей GUI компонентов ) или чтобы по-прежнему можно было пользоваться шаблонами страниц , но без потерь в производительности. По этому вопросу было подготовлено отдельное руководство , но если кратко, то необходимо организовать двухэтапное преобразование исходного Pug-кода в выходной HTML-код. На первом этапе формируются промежуточные файлы-шаблоны, каждый из которых неизменен вне зависимости от динамических данных (таких данные из базы данных). При этом, эти файлы-шаблоны формируются только один раз перед публикацией (деплоем) каждой версии сайта или приложения. На втором этапе подставляются динамические данные в промежуточный шаблон, в результате чего формируется окончательный HTML-код.