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

OdessaFrontend
OdessaFrontendOdessaFrontend
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
1 of 18

Recommended

Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr... by
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Ontico
1.1K views68 slides
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥ by
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest
1.6K views89 slides
JavaScript + Webdriver = ♥ by
JavaScript + Webdriver = ♥ JavaScript + Webdriver = ♥
JavaScript + Webdriver = ♥ SQALab
1.3K views87 slides
Reliable DOM testing with browser-monkey by
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyMoscowJS
250 views25 slides
WebAssembly by
WebAssemblyWebAssembly
WebAssemblySergey Rubanov
1.6K views56 slides
Pres1 by
Pres1Pres1
Pres1Ruslan Mahin
155 views11 slides

More Related Content

What's hot

2.5D игры и особенности разработки многопользовательских игр by
2.5D игры и особенности разработки многопользовательских игр2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игрGleb Polushkin
1.5K views33 slides
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к... by
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...WordCamp Kyiv
428 views35 slides
"React application structure at project start", Maksym Shestopal by
"React application structure at project start", Maksym Shestopal"React application structure at project start", Maksym Shestopal
"React application structure at project start", Maksym ShestopalFwdays
247 views26 slides
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver by
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir WebdriverТестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir WebdriverAlex Mikitenko
752 views30 slides
RIW 2015 / Русский e-commerce и мобильная аудитория by
RIW 2015 / Русский e-commerce и мобильная аудиторияRIW 2015 / Русский e-commerce и мобильная аудитория
RIW 2015 / Русский e-commerce и мобильная аудиторияArtiom Tsympov
1.9K views55 slides
Remoto powered by Windows Azure by
Remoto powered by Windows AzureRemoto powered by Windows Azure
Remoto powered by Windows AzureVitaly Baum
398 views34 slides

What's hot(20)

2.5D игры и особенности разработки многопользовательских игр by Gleb Polushkin
2.5D игры и особенности разработки многопользовательских игр2.5D игры и особенности разработки многопользовательских игр
2.5D игры и особенности разработки многопользовательских игр
Gleb Polushkin1.5K views
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к... by WordCamp Kyiv
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordPress Kitchen 2014 - Дмитрий Курикша: WP для клиента. Прячем лишнее под к...
WordCamp Kyiv428 views
"React application structure at project start", Maksym Shestopal by Fwdays
"React application structure at project start", Maksym Shestopal"React application structure at project start", Maksym Shestopal
"React application structure at project start", Maksym Shestopal
Fwdays247 views
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver by Alex Mikitenko
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir WebdriverТестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Alex Mikitenko752 views
RIW 2015 / Русский e-commerce и мобильная аудитория by Artiom Tsympov
RIW 2015 / Русский e-commerce и мобильная аудиторияRIW 2015 / Русский e-commerce и мобильная аудитория
RIW 2015 / Русский e-commerce и мобильная аудитория
Artiom Tsympov1.9K views
Remoto powered by Windows Azure by Vitaly Baum
Remoto powered by Windows AzureRemoto powered by Windows Azure
Remoto powered by Windows Azure
Vitaly Baum398 views
JAM stack - what it is and what's it for by Alex Stepchenkov
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 Stepchenkov381 views
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и... by DevGAMM Conference
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Heyworks: Cравнительный анализ решений для клиент-серверного взаимодействия и...
Andrew Stepanov, Epam Systems "Zend Framework Projects Optimization by Andrew... by EPAM Systems
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 Systems505 views
Unity: WebGL и IL2CPP — будущее скриптинга в Unity» by DevGAMM Conference
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
DevGAMM Conference2.6K views
Презентация сайта для агенства недвижимости "Авангард Сити" by Artem Laptev
Презентация сайта для агенства недвижимости "Авангард Сити"Презентация сайта для агенства недвижимости "Авангард Сити"
Презентация сайта для агенства недвижимости "Авангард Сити"
Artem Laptev855 views
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл... by AdvantShop
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
Тема " Скрипты продаж в интернет-магазинах" в рамках конкурса "Бизнес на милл...
AdvantShop196 views
Руководство по созданию сайтов by Anton Polevich
Руководство по созданию сайтовРуководство по созданию сайтов
Руководство по созданию сайтов
Anton Polevich311 views
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-... by Pavel Dovbush
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Pavel Dovbush999 views
Кинза 2015, Адаптация для мобильных устройства (eski.mobi) by Artiom Tsympov
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
Кинза 2015, Адаптация для мобильных устройства (eski.mobi)
Artiom Tsympov1.3K views
IBC Russia 2014 (выступление eski.mobi) by Artiom Tsympov
IBC Russia 2014 (выступление eski.mobi)IBC Russia 2014 (выступление eski.mobi)
IBC Russia 2014 (выступление eski.mobi)
Artiom Tsympov1.5K views
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10 by OdessaFrontend
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
Оптимизация скорости сайта без использования AMP | Odessa Frontend Meetup #10
OdessaFrontend208 views
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин by Fwdays
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
Fwdays1.7K views

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

Изоморфные React-приложения производительность и масштабирование / Денис Изма... by
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Ontico
1.8K views111 slides
Ускорение фронтенда ponominalu.ru by
Ускорение фронтенда ponominalu.ruУскорение фронтенда ponominalu.ru
Ускорение фронтенда ponominalu.ruДенис Сергеевич Басковский
199 views14 slides
Изоморфные React-приложения: производительность и масштабирование by
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабированиеDenis Izmaylov
1.1K views111 slides
Изоморфные react-приложения by
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложенияDenis Izmaylov
3.6K views115 slides
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js) by
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
350 views16 slides
Кросс-платформенная мобильная разработка by
Кросс-платформенная мобильная разработкаКросс-платформенная мобильная разработка
Кросс-платформенная мобильная разработкаArtur Drobinskiy
1.8K views53 slides

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

Изоморфные React-приложения производительность и масштабирование / Денис Изма... by Ontico
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Ontico1.8K views
Изоморфные React-приложения: производительность и масштабирование by Denis Izmaylov
Изоморфные React-приложения: производительность и масштабированиеИзоморфные React-приложения: производительность и масштабирование
Изоморфные React-приложения: производительность и масштабирование
Denis Izmaylov1.1K views
Изоморфные react-приложения by Denis Izmaylov
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложения
Denis Izmaylov3.6K views
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js) by 7bits
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits350 views
Кросс-платформенная мобильная разработка by Artur Drobinskiy
Кросс-платформенная мобильная разработкаКросс-платформенная мобильная разработка
Кросс-платформенная мобильная разработка
Artur Drobinskiy1.8K views
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk by DrupalCamp Kyiv
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy PetrukAngular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
Angular into drupal integration - Eugene Mickhnitskyy & Dmitriy Petruk
DrupalCamp Kyiv212 views
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2 by Oleg Poludnenko
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Oleg Poludnenko4K views
"Web Vitals monitoring & optimizations", Erik Himiranov by Fwdays
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
Fwdays219 views
Разработка web-приложений с repoze.bfg by Andrey Popp
Разработка web-приложений с repoze.bfgРазработка web-приложений с repoze.bfg
Разработка web-приложений с repoze.bfg
Andrey Popp740 views
Dump-IT Загрузка и инициализация JavaScript by Mikhail Davydov
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
Mikhail Davydov730 views
Вебинар по БЭМ: сборка и оптимизация проекта by Yandex
Вебинар по БЭМ: сборка и оптимизация проектаВебинар по БЭМ: сборка и оптимизация проекта
Вебинар по БЭМ: сборка и оптимизация проекта
Yandex10K views
NPM и модульная архитектура приложения by Denis Latushkin
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
Denis Latushkin269 views
Современный фронтенд за 30 минут. by Vladimir Malyk
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
Vladimir Malyk2.6K views
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят by HappyDev-lite
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
2017-03-26 02 Егор Непомнящих. Что такое web front end, и с чем его едят
HappyDev-lite165 views
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow... by MoscowJS
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
MoscowJS532 views

More from OdessaFrontend

Викторина | Odessa Frontend Meetup #19 by
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19OdessaFrontend
139 views20 slides
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee... by
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...OdessaFrontend
151 views34 slides
Великолепный Gatsby.js | Odessa Frontend Meetup #19 by
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19OdessaFrontend
122 views50 slides
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr... by
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
214 views73 slides
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18 by
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18OdessaFrontend
82 views19 slides
Викторина | Odessa Frontend Meetup #17 by
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17OdessaFrontend
150 views23 slides

More from OdessaFrontend(20)

Викторина | Odessa Frontend Meetup #19 by OdessaFrontend
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19
OdessaFrontend139 views
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee... by OdessaFrontend
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
OdessaFrontend151 views
Великолепный Gatsby.js | Odessa Frontend Meetup #19 by OdessaFrontend
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19
OdessaFrontend122 views
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr... by OdessaFrontend
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
OdessaFrontend214 views
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18 by OdessaFrontend
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
OdessaFrontend82 views
Викторина | Odessa Frontend Meetup #17 by OdessaFrontend
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17
OdessaFrontend150 views
Антихрупкий TypeScript | Odessa Frontend Meetup #17 by OdessaFrontend
Антихрупкий TypeScript | Odessa Frontend Meetup #17Антихрупкий TypeScript | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17
OdessaFrontend107 views
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17 by OdessaFrontend
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend84 views
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17 by OdessaFrontend
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OdessaFrontend253 views
Объекты в ECMAScript | Odessa Frontend Meetup #16 by OdessaFrontend
Объекты в ECMAScript | Odessa Frontend Meetup #16Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16
OdessaFrontend169 views
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16 by OdessaFrontend
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
OdessaFrontend159 views
Cлайдер на CSS | Odessa Frontend Meetup #16 by OdessaFrontend
Cлайдер на CSS | Odessa Frontend Meetup #16Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16
OdessaFrontend148 views
Современный станок верстальщика by OdessaFrontend
Современный станок верстальщикаСовременный станок верстальщика
Современный станок верстальщика
OdessaFrontend188 views
Викторина | Odessa Frontend Meetup #15 by OdessaFrontend
Викторина | Odessa Frontend Meetup #15Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15
OdessaFrontend87 views
DRY’им Vuex | Odessa Frontend Meetup #15 by OdessaFrontend
DRY’им Vuex | Odessa Frontend Meetup #15DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15
OdessaFrontend64 views
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15 by OdessaFrontend
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
OdessaFrontend109 views
Пощупать 3д в браузере | Odessa Frontend Meetup #15 by OdessaFrontend
Пощупать 3д в браузере | Odessa Frontend Meetup #15Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15
OdessaFrontend126 views
Викторина | Odessa Frontend Meetup #14 by OdessaFrontend
Викторина | Odessa Frontend Meetup #14Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14
OdessaFrontend83 views
Викторина | Odessa Frontend Meetup #13 by OdessaFrontend
Викторина | Odessa Frontend Meetup #13Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13
OdessaFrontend147 views
Структуры данных в JavaScript | Odessa Frontend Meetup #13 by OdessaFrontend
Структуры данных в JavaScript | Odessa Frontend Meetup #13Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13
OdessaFrontend1.6K views

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. Нагрузка на сервер больше