SlideShare a Scribd company logo
Server-side Rendering with
JavaScript Frameworks
Single page application
VS
Загружается единожды, контент подгружается
по требованию
Страница каждый раз с нуля перезагружается
Client side rendering
Проблема №1 - пустая страница
Оптимизировали-оптимизировали, да не
выоптимизировали
Решение ?
Проблема №2 - SEO
Ответ - Server side rendering
Server что-там...
По старинке - PhantomJS
+ Любой фреймворк
- Медленно
- Сложно
- Дорого
Angular Universal
@angular/platform-browser -> @angular/platform-server
Server-Side Rendering npm run build:ssr && npm run serve:ssr
! В рантайме
! Использует ngExpressEngine чтобы на лету отрисовывать приложение по
запрошенной ссылке
Prerender npm run build:prerender && npm run serve:prerender
! Во время сборки
! Отрисовывает приложение и сохраняет html файлы в /dist 

1. npm install --save @angular/platform-server ts-loader @nguniversal/express-engine
2. Добавить серверное приложение в .Angular-cli.json, c
отдельной точкой входа main-server.ts и отдельным конфигом
...
Стартер https://github.com/angular/universal-starter
Инструкция https://angular.io/guide/universal
Установка Angular Universal
! Нет browser API window, document, localStorage, есть Document
○ import { isPlatformBrowser } from '@angular/common';
○ Не трогать element.nativeElement: ElementRef а Renderer2
! Избегать setTimeout()
! Http запросы кешировать через TransferStateModule
! Для быстрого Lazy Loading на сервере ModuleMapLoaderModule
! Новый запрос - новое приложение
Что учесть Angular Universal
! react-dom -> react-dom/server
! Синхронный renderToString()
! Быстрый, но опасный renderToStream()
! Синхронизация состояния между клиентом и
сервером с использованием Redux
https://github.com/zeit/next.js/
React SSR
React SSR
React 16 не нужно
компилировать для
улучшения
производительности



if (process.env.NODE_ENV !== "production"){

// что-то проверить и предупредить

}
NUXT - Universal Vue.js Applications
! Рендер nuxt build && nuxt start и пререндер nuxt generate
! Продвинутая генерация routes:() => Promise
! Поддержка renderToString() так и renderToStream()
! Встроенное кэширование на уровне компонентов

serverCacheKey: props => props.item.id + '::' + props.item.last_updated
! С 2.5+ можно использовать PHP V8Js или Oracle Nashorn

https://starter.nuxtjs.org/
Плюсы и минусы SSR
Плюсы:
1. Страница отображается
раньше
2. SEO и Social Sharing лучше
3. Работает в браузерах с
выключенным JS
Минусы:
1. Сложно
2. Дорого
3. Нагрузка на сервер
больше
Продолжение
https://youtu.be/nbTn1czE2L8

More Related Content

What's hot

2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игрGleb Polushkin
 
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordCamp Kyiv
 
"React application structure at project start", Maksym Shestopal
"React application structure at project start", Maksym Shestopal"React application structure at project start", Maksym Shestopal
"React application structure at project start", Maksym Shestopal
Fwdays
 
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir WebdriverТестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Alex Mikitenko
 
RIW 2015 / Русский e-commerce и мобильная аудитория
RIW 2015 / Русский e-commerce и мобильная аудиторияRIW 2015 / Русский e-commerce и мобильная аудитория
RIW 2015 / Русский e-commerce и мобильная аудитория
Artiom Tsympov
 
Remoto powered by Windows Azure
Remoto powered by Windows AzureRemoto powered by Windows Azure
Remoto powered by Windows AzureVitaly Baum
 
JAM stack - what it is and what's it for
JAM stack - what it is and what's it forJAM stack - what it is and what's it for
JAM stack - what it is and what's it for
Alex Stepchenkov
 
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
DevGAMM Conference
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
Олег Шерыхалин
 
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...EPAM Systems
 
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
DevGAMM Conference
 
Презентация сайта для агенства недвижимости "Авангард Сити"
Презентация сайта для агенства недвижимости "Авангард Сити"Презентация сайта для агенства недвижимости "Авангард Сити"
Презентация сайта для агенства недвижимости "Авангард Сити"
Artem Laptev
 
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
AdvantShop
 
Руководство по созданию сайтов
Руководство по созданию сайтовРуководство по созданию сайтов
Руководство по созданию сайтовAnton Polevich
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Pavel Dovbush
 
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
Artiom Tsympov
 
IBC Russia 2014 (выступление eski.mobi)
IBC Russia 2014 (выступление eski.mobi)IBC Russia 2014 (выступление eski.mobi)
IBC Russia 2014 (выступление eski.mobi)
Artiom Tsympov
 
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
OdessaFrontend
 
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
Fwdays
 
Php micro frameworks
Php micro frameworksPhp micro frameworks
Php micro frameworks
Sumy PHP User Grpoup
 

What's hot (20)

2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр
 
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
 
"React application structure at project start", Maksym Shestopal
"React application structure at project start", Maksym Shestopal"React application structure at project start", Maksym Shestopal
"React application structure at project start", Maksym Shestopal
 
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir WebdriverТестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
 
RIW 2015 / Русский e-commerce и мобильная аудитория
RIW 2015 / Русский e-commerce и мобильная аудиторияRIW 2015 / Русский e-commerce и мобильная аудитория
RIW 2015 / Русский e-commerce и мобильная аудитория
 
Remoto powered by Windows Azure
Remoto powered by Windows AzureRemoto powered by Windows Azure
Remoto powered by Windows Azure
 
JAM stack - what it is and what's it for
JAM stack - what it is and what's it forJAM stack - what it is and what's it for
JAM stack - what it is and what's it for
 
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew...
 
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
 
Презентация сайта для агенства недвижимости "Авангард Сити"
Презентация сайта для агенства недвижимости "Авангард Сити"Презентация сайта для агенства недвижимости "Авангард Сити"
Презентация сайта для агенства недвижимости "Авангард Сити"
 
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
 
Руководство по созданию сайтов
Руководство по созданию сайтовРуководство по созданию сайтов
Руководство по созданию сайтов
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
 
IBC Russia 2014 (выступление eski.mobi)
IBC Russia 2014 (выступление eski.mobi)IBC Russia 2014 (выступление eski.mobi)
IBC Russia 2014 (выступление eski.mobi)
 
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
 
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
 
Php micro frameworks
Php micro frameworksPhp micro frameworks
Php micro frameworks
 

Similar to Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6

Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Ontico
 
Ускорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ruУскорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ru
Денис Сергеевич Басковский
 
Изоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабирование
Denis Izmaylov
 
Изоморфные react-приложения
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложения
Denis Izmaylov
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
Кросс-платформенная мобильная разработка
Кросс-платформенная мобильная разработкаКросс-платформенная мобильная разработка
Кросс-платформенная мобильная разработка
Artur Drobinskiy
 
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy PetrukAngular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
DrupalCamp Kyiv
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Oleg Poludnenko
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
Fwdays
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
Разработка web-приложений с repoze.bfg
Разработка web-приложений с repoze.bfgРазработка web-приложений с repoze.bfg
Разработка web-приложений с repoze.bfgAndrey Popp
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
Mikhail Davydov
 
Вебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проектаВебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проекта
Yandex
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
Vladimir Malyk
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
Gleb Pospelov
 
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
HappyDev-lite
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
MoscowJS
 

Similar to Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6 (20)

Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
 
Ускорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ruУскорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ru
 
Изоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабирование
 
Изоморфные react-приложения
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложения
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Кросс-платформенная мобильная разработка
Кросс-платформенная мобильная разработкаКросс-платформенная мобильная разработка
Кросс-платформенная мобильная разработка
 
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy PetrukAngular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 
Panfilov
PanfilovPanfilov
Panfilov
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Разработка web-приложений с repoze.bfg
Разработка web-приложений с repoze.bfgРазработка web-приложений с repoze.bfg
Разработка web-приложений с repoze.bfg
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
 
Вебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проектаВебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проекта
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
 
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
 

More from OdessaFrontend

Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19
OdessaFrontend
 
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
OdessaFrontend
 
Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19
OdessaFrontend
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
OdessaFrontend
 
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
OdessaFrontend
 
Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17
OdessaFrontend
 
Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17
OdessaFrontend
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend
 
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OdessaFrontend
 
Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16
OdessaFrontend
 
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
OdessaFrontend
 
Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16
OdessaFrontend
 
Современный станок верстальщика
Современный станок верстальщикаСовременный станок верстальщика
Современный станок верстальщика
OdessaFrontend
 
Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15
OdessaFrontend
 
DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15
OdessaFrontend
 
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
OdessaFrontend
 
Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15
OdessaFrontend
 
Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14
OdessaFrontend
 
Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13
OdessaFrontend
 
Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13
OdessaFrontend
 

More from OdessaFrontend (20)

Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19
 
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
 
Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
 
Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17
 
Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
 
Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16
 
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
 
Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16
 
Современный станок верстальщика
Современный станок верстальщикаСовременный станок верстальщика
Современный станок верстальщика
 
Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15
 
DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15
 
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
 
Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15
 
Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14
 
Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13
 
Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13
 

Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6

  • 2. Single page application VS Загружается единожды, контент подгружается по требованию Страница каждый раз с нуля перезагружается
  • 4. Проблема №1 - пустая страница
  • 8. Ответ - Server side rendering
  • 10. По старинке - PhantomJS + Любой фреймворк - Медленно - Сложно - Дорого
  • 11. Angular Universal @angular/platform-browser -> @angular/platform-server Server-Side Rendering npm run build:ssr && npm run serve:ssr ! В рантайме ! Использует ngExpressEngine чтобы на лету отрисовывать приложение по запрошенной ссылке Prerender npm run build:prerender && npm run serve:prerender ! Во время сборки ! Отрисовывает приложение и сохраняет html файлы в /dist 

  • 12. 1. npm install --save @angular/platform-server ts-loader @nguniversal/express-engine 2. Добавить серверное приложение в .Angular-cli.json, c отдельной точкой входа main-server.ts и отдельным конфигом ... Стартер https://github.com/angular/universal-starter Инструкция https://angular.io/guide/universal Установка Angular Universal
  • 13. ! Нет browser API window, document, localStorage, есть Document ○ import { isPlatformBrowser } from '@angular/common'; ○ Не трогать element.nativeElement: ElementRef а Renderer2 ! Избегать setTimeout() ! Http запросы кешировать через TransferStateModule ! Для быстрого Lazy Loading на сервере ModuleMapLoaderModule ! Новый запрос - новое приложение Что учесть Angular Universal
  • 14. ! react-dom -> react-dom/server ! Синхронный renderToString() ! Быстрый, но опасный renderToStream() ! Синхронизация состояния между клиентом и сервером с использованием Redux https://github.com/zeit/next.js/ React SSR
  • 15. React SSR React 16 не нужно компилировать для улучшения производительности
 
 if (process.env.NODE_ENV !== "production"){
 // что-то проверить и предупредить
 }
  • 16. NUXT - Universal Vue.js Applications ! Рендер nuxt build && nuxt start и пререндер nuxt generate ! Продвинутая генерация routes:() => Promise ! Поддержка renderToString() так и renderToStream() ! Встроенное кэширование на уровне компонентов
 serverCacheKey: props => props.item.id + '::' + props.item.last_updated ! С 2.5+ можно использовать PHP V8Js или Oracle Nashorn
 https://starter.nuxtjs.org/
  • 17. Плюсы и минусы SSR Плюсы: 1. Страница отображается раньше 2. SEO и Social Sharing лучше 3. Работает в браузерах с выключенным JS Минусы: 1. Сложно 2. Дорого 3. Нагрузка на сервер больше