При рендеринге что используется
Процессором (CPU) или видеокартой (GPU): чем рендерить?
Рендеринг трехмерных сцен — это основополагающая современных визуальных эффектов (VFX), графического дизайна, промышленного дизайна и анимации. Когда вы работаете в одной из этих отраслей, самым важным инструментом в вашем арсенале является ваша рабочая станция. Центральный процессор (CPU) является сердцем вашей рабочей станции и выполняет множество задач, таких как работа в приложениях, загрузка драйверов и т. д. Графические процессоры (GPU), представляющие собой специализированные типы микропроцессоров, которые работают параллельно с CPU, в последнее время переживают значительный рост использования, поскольку начинают расти объемы вычислений необходимые для одной задачи. Эти задачи, интенсивно использующие процессор, могут включать:
Чтобы не усложнять эту статью или ее цель, мы будем ссылаться исключительно на сравнение возможностей CPU и GPU, используемых для обработки изображений или, в данном случае, рендеринга изображений. Надеюсь, прочитав это, вы получите лучшее и более полное представление о том, какие варианты для рендеринга могут предложить вам и вашей студии эти технологии. Поможет вам принять более обоснованное решение о том, что лучше всего подходит для ваших проектов.
Первый и наиболее очевидный фактор, который необходимо рассмотреть — это скорость. В то время как CPU имеет ограниченное количество процессорных ядер (в среднем около 24), которые делают его эффективным при последовательных вычислениях и выполнении процессов в порядке очереди, GPU состоят из меньших ядер в большем количестве, чем у среднего компьютерного процессора, это позволяет им выполнять несколько задач одновременно.
Современные графические процессоры уже расширили свои возможности вывода с момента их первого появления. В то время как центральные процессоры обычно могут последовательно обрабатывать отдельные конкретные задачи, графические процессоры предлагают превосходную пропускную способность памяти, вычислительную мощность и скорость до 100 раз быстрее для решения нескольких задач, требующих нескольких параллельных вычислений и больших кешей данных.
Часы рендеринга могут превратится в минуты и упростят процесс создания изображений при использовании GPU. Если скорость является основным приоритетом в вашем рабочем процессе, предпочтительным решением будет рендеринг на основе графического процессора (GPU).
CPU vs GPU — Качество и точность графики
Рендеринг — это трудоемкий процесс, но с качеством нельзя торопиться. Хотя для завершения рендеринга изображения могут потребоваться часы (возможно, даже дни), традиционный рендеринг на базе процессора с большей вероятностью обеспечит более высокое качество изображения и более четкое, меньше шума.
У графического процессора (GPU) намного больше ядер, чем у CPU, но в целом каждое ядро работает медленнее, чем ядро процессора. Когда несколько процессоров CPU связаны между собой и используются например, в среде рендеринга, как на ферме. Они потенциально могут дать более изысканный конечный результат, чем рендеринг на основе графического процессора. В фильмах это обычный стандарт для создания высококачественных кадров и изображений, поскольку для рендеринга нет жестких ограничений во времени.
С другой стороны, с ростом доступной виртуальной реальности игры также становятся все более захватывающими, а при максимальных настройках приходит высококачественный рендеринг изображений и обработка в реальном времени, которые могут проверить вашу рабочую станцию на прочность. Проще говоря, современные игры и VFX теперь могут быть слишком нагружающими базовый CPU.
Если вы готовы не торопиться и не ограничены сроками для получения максимально лучшего изображения, тогда рендеринг на базе CPU может быть тем, что вы ищете.
CPU vs GPU — Стоимость
По мере того, как оборудование становится более эффективным, его цена также становится важным фактором.
В дополнение к скорости, мощность одного графического процессора может быть эквивалентна как минимум пятидесяти процессорам. Это означает, что мощность одной рабочей станции может выполнять задачи нескольких рабочих станций на базе CPU вместе взятых, что дает 3d визуализаторам и студиям свободу создавать, проектировать и разрабатывать изображения с высоким разрешением. Кроме того, GPU предлагают значительное снижение затрат на оборудование и устраняют необходимость в нескольких ПК или серверах для выполнения работы профессионального качества. Теперь можно выполнять все за минуты, имея одну небольшую станцию с видеокартами.
Без необходимости в дорогостоящих фермах рендеринга CPU, 3d художники могут позволить себе и полагаться на свои собственные компактные рабочие станции с графическими процессорами и получить работу студийного качества за невысокую цену.
CPU vs GPU — Визуализация в реальном времени
При определенных рабочих процессах, в частности, VFX, графическом дизайне и анимации, требуется много времени для настройки сцены и управления освещением, что обычно происходит в окне (вьюпорте) просмотра программного обеспечения. GPU может управлять производительностью вьюпорта в программном обеспечении вашей студии, позволяя в реальном времени просматривать и манипулировать вашими 3d моделями, источниками света и проекциями в трех измерениях. Некоторое программное обеспечение для рендеринга, предназначенное только для графического процессора, может даже позволить вам полностью работать в окне просмотра с включенным Real Time рендерингом, увеличивая результат и минимизируя возможные ошибки, которые могут возникнуть при рендеринге в другой программе.
Совершенно очевидно, что преимущества работы и рендеринга на машинах с GPU по сравнению с традиционными рабочими станциями на базе CPU могут замедлить производство или ограничить бюджет проекта из-за потенциально необходимых обновлений.
Делаем выбор между рендерингом на CPU и GPU
Имейте в виду, что графические процессоры не предназначены для полной замены рабочих станций с процессорами и рабочего процесса. Может показаться, что преимущества рендеринга на основе CPU бледнеют по сравнению с преимуществами рендеринга на основе GPU, но в конечном итоге это зависит от того, что нужно вам или вашей студии. Эти процессоры живут и работают в синергетической гармонии. Графический процессор предназначен не для замены, а для ускорения и оптимизации существующих практик и рабочих процессов, максимального увеличения производительности и компенсации ресурсоёмких вычислений в приложениях, которые без них могли бы вывести из строя систему.
Даже с самыми быстрыми и мощными графическими процессорами в вашем распоряжении процессор по-прежнему тянет свою долю веса. Неопытному пользователю просто покажется, что ваши приложения работают намного быстрее и плавнее. Использование этих инструментов в тандеме сделает гораздо больше для вашей работы и презентаций, а также значительно увеличит способность вашей машины быстро воплощать ваши творения в жизнь. Удачного рендеринга!
Рендеринг — что это такое и какие программы есть для рендеринга
XXI век — время технологий и совершенства. На смену всему приходят компьютеры, возможности которых все больше и больше увеличиваются. Смотреть фильмы, играть, общаться и даже работать можно по компьютеру. Одним из перспективных занятий с применением такой техники на сегодняшний день является моделирование и монтаж роликов.
В этой статье изучим, что такое рендеринг, зачем он нужен и какие программы необходимо использовать, чтобы заниматься таким родом деятельности. Также узнаем все профессии, с которыми тесно связано это понятие.
Понятие рендеринга
Рендеринг — это процесс получения изображения из модели или ее элементов путем пропуска этой самой модели через определенные свойства компьютерной программы.
Если говорить простым языком, этот термин означает преображение объекта в его новый, задуманный разработчиком вид. Своего рода визуализация идеи. Рендеринг — это неоднородное понятие, так как фактически преобразовать модель можно в разный вид. Например, из модели можно получить просто изображение или сделать видеоролик. Также можно внедрить вашу модель в игру или просто создать 3D-объект.
Кто занимается рендерингом?
Что такое рендеринг в понятии специалиста? Кто им занимается? Процессом рендеринга занимаются самые разные люди, потому как такого рода визуализация и имитация помогает довести планируемую модель до совершенства.
Конечно же, в первую очередь рендерингом занимаются дизайнеры. Рекламу на баннерах, фотографии объектов, которые невозможно сфотографировать так четко и структурно, схемы, 3D-графики, планы и многое другое можно получить только путем обрабатывания моделей в специальных программах. Этим и занимается большинство дизайнеров.
Видемонтажеры занимаются рендерингом видеороликов, потому как фактическая склейка или показ в ролике не отснятых объектов влечет за собой рендеринг. Это своеобразная разработка кадров. Ведь этот процесс требует иногда придать объектам нужную форму или движение. Неужели вы думаете, что в рекламе по телевизору кетчуп из упаковки действительно течет так филигранно?
Высококвалифицированные специалисты и монтажеры занимаются 3D-рендеринг визуализацией для кинофильмов. Крупным кинокомпаниям сегодня не обойтись без компьютерной графики. Рендеринг — это процесс, помогающий спроектировать все не отснятые элементы на экран или, возможно, впечатлить зрителей спецэффектами.
Видеомонтажеров, работающих с моделями, также называют моушен-дизайнерами. Разработчики игр также имеют прямое отношение к рендерингу и моделингу, так как для создания компьютерной игры требуется целый мир, визуализированный рендерингом. Все игры на компьютерах и приставках написаны на коде, а визуальные элементы созданы при помощи моделинга.
Программы для рендеринга
Существует огромное множество программ для обработки и визуализации объектов. В этом списке будут представлены самые часто используемые и качественные программы для рендеринга. Это позволит начинающим дизайнерам определиться с вектором развития своих способностей и с выбором оптимального приложения для себя.
Cinema 4D
Самая известная и новая программа для работы с моделями на сегодняшний день — Cinema 4D. Работа в ней проста относительно других программ, ресурсы «Синемы» также не требуют очень больших просчетов со стороны компьютера. Это важно для нормальной работы системы. Когда вы ставите модель на рендеринг, занятость процессоров очень влияет на качество и способность вашего компьютера сделать все быстрее и надежнее.
К примеру, старая система может визуализировать модель за несколько часов, когда в новой системе на этот процесс потребуется не больше десяти минут. А программа с правильной архитектурой позволяет еще больше ускорить процесс и получить готовый продукт максимально качественным.
Sony Vegas
Программа с известным на весь мир именем от одноименной компании представляет собой удобный интерфейс для работы с видео. Рендеринг видео — не самый простой процесс, поэтому для него необходим софт, позволяющий удобно располагать кадры относительно друг друга, добавлять эффекты и внедрять 3D-элементы, расставлять свет и преобразовывать готовую картинку. Практически все профессионалы, имеющие дело с видеороликами, работают в Sony Vegas.
Также существует конкурирующий аналог этой программы — Adobe After Effects, но работать в нем тяжелее. И если вы никогда ранее не имели опыта с видеомонтажем, то советуем продукт от Sony. Огромное множество кинолент пропущены через архитектуру этой программы и являются эталонными в медиасфере.
Заключение
Сегодня вы узнали что это такое — рендеринг, а также основные программы как для начинающих, так и для настоящих профессионалов.
В заключение стоит сказать, что профессия дизайнера в этой сфере очень востребована на сегодняшний день в больших городах России, таких как Москва и Санкт-Петербург. Государственные университеты уже образовали несколько кафедр, развивающихся в этом направлении, потому как специалисты такого типа сегодня необходимы во многих сферах развития общества.
Недавно мы писали о том, как поставить символ галочки и запятую сверху используя клавиатуру.
Что такое 3D рендеринг
Рендеринг — это наше окно в виртуальный мир 3D. Узнайте о 3D рендеринге больше, откройте для себя различные техники и методы рендеринга 3d объектов.
Виртуальная фотография
«Привет мир 3D рендеринга»
Рендеринг впервые появился в 1960 году, когда Уильям Феттер создал изображение пилота, чтобы имитировать пространство, необходимое в кабине. Затем, в 1963 году, Иван Сазерленд создал Sketchpad, первую программу 3D-моделирования, в то время он работал в MIT. За свою новаторскую работу он известен как «Отец компьютерной графики».
В 1975 году исследователь Мартин Ньюэлл создал «Чайник Юты», трехмерную тестовую модель, которая стала стандартным тестовым рендером. Этот чайник, также называемый Newell Teapot, стал настолько культовым, что считается эквивалентом «Hello World» в мире 3d.
Как устроен 3d рендеринг
По сути, 3D рендеринг похож на фотографию. Например, программа рендеринга эффективно направляет камеру на объект для создания фотографии. Таким образом, цифровое освещение очень важно для создания детального и реалистичного рендера.
Со временем был разработан ряд различных методов рендеринга. Тем не менее, цель каждого рендера состоит в том, чтобы сделать изображение, основанное на том, как свет попадает на объекты, как в реальной жизни.
Техника рендеринга № 1: Растеризация
Видео игры представляют собой общий случай использования для растеризации.
Один из самых ранних методов рендеринга, растеризация, работает рассматривая модель как сетку многоугольников. Эти полигоны имеют вершины, в которые встроена такая информация, как положение, текстура и цвет. Эти вершины затем проецируются на плоскость, перпендикулярную к перспективе (то есть камеру).
С вершинами, действующими как границы, оставшиеся пиксели заполнены правильными цветами. Представьте себе, что сначала нужно нарисовать контур для каждого цвета, который вы рисуете — это и есть рендеринг с помощью растеризации.
Техника рендеринга №2: Лучевое литье
Классическая демонстрация лучевого литья.
Несмотря на свою полезность, растеризация сталкивается с проблемами при наличии перекрывающихся объектов: если поверхности перекрываются, последняя нарисованная часть будет отражена при рендеринге, что приведет к отображению неправильного объекта. Чтобы решить эту проблему, была разработана концепция Z-буфера для растеризации. Она включает в себя датчик глубины, чтобы указать, какая поверхность находится под или над, в конкретной точке зрения.
Это стало ненужным, однако, когда было разработана отливка лучей. В отличие от растеризации, потенциальная проблема перекрывающихся поверхностей не возникает при лучевом литье.
Приведение лучей, как следует из названия, направляет лучи на модель с точки зрения камеры. Лучи выводятся в каждый пиксель на плоскости изображения. Поверхность, на которую она попадает первой, будет показана при рендеринге и любое другое пересечение после первой поверхности не будет отрисовано.
Техника рендеринга № 3: Трассировка лучей
Несмотря на преимущества, которые дает отливка лучей, в методике по-прежнему отсутствовала способность правильно моделировать тени, отражения и преломления. Таким образом, в помощь был разработка метод трассировки лучей.
Трассировка лучей работает аналогично лучевому литью, за исключением того, что она лучше отображает свет. По сути, первичные лучи с точки зрения камеры направляются на модели для получения вторичных лучей. После попадания на модель будут испускаться теневые лучи, отраженные лучи или преломляющие лучи, в зависимости от свойств поверхности.
Тень генерируется на другой поверхности, если путь луча тени к источнику света затруднен этой поверхностью. Если поверхность является отражающей, результирующий отраженный луч будет излучаться под углом и освещать любую другую поверхность, на которую он попадает и будет дополнительно излучать другой набор лучей. По этой причине этот метод также известен как рекурсивная трассировка лучей. Для прозрачной поверхности преломляющий луч испускается, когда на поверхность попадает вторичный луч.
Техника рендеринга № 4: Уравнение рендеринга
Дальнейшее развитие рендеринга в конечном итоге привело к уравнению рендеринга, которое пытается смоделировать, как свет должен излучатся с максимальной реалистичностью. С помощью этой техники считают, что свет испускается всем телами, а не только одним источником света. Это уравнение пытается рассмотреть все источники света в рендере, по сравнению с трассировкой лучей, которая использует только прямое освещение. Алгоритм, созданный с использованием этого уравнения, известен как глобальное или косвенное освещение.
Аппаратные средства для 3D рендеринга
Качество рендеринга улучшается, но процесс все еще медленный — поэтому крупные компании вкладывают значительные средства в рендер фермы. В то же время отдельные дизайнеры и художники должны использовать современное оборудование.
Программное обеспечение рендеринга использует GPU (графический ), CPU (центральный ) или оба вида процессоров для создания рендеров. Кроме того, приложения для рендеринга являются ресурсоёмкими программами. Для более быстрого рендеринга часто требуются дополнительные обновления. Скорость процессора, интеграция и совместимость видеокарт, совместимость с драйверами и оперативной памятью — вот некоторые из аспектов, обеспечивающих быстрый высококачественный рендеринг.
К слову о программном обеспечении для рендеринга, посмотрите этот огромный список инструментов и приложений для 3d рендеринга доступных сегодня.
Программное обеспечение для 3d рендеринга
Как бы грустно это не звучало, идеального рендера не бывает. Это потому, что постоянно находятся в равновесии несколько переменных, в том числе фотореализм, качество, скорость, размер данных и разрешение.
Несмотря на сложность, можно работать с этими основными факторами для достижения фотореалистичных визуализаций. Во-первых, модель должна быть скорректирована в правильной пропорции. Модель, масштабированная в реальной жизни, очень помогает. Размеры объектов не обязательно должны быть точными, так как детали могут подвергаться корректировке, если они отображаются на визуализации.
Материалы объектов должны быть как подходящими, так и высокодетализированными для достижения максимально реалистичных результатов. Случайные элементы в текстурах, также помогают рендерам выглядеть более реалистично.
Интенсивность освещения, температура и расположение — это, конечно, огромный фактор. Правильное количество и расположение света облегчит детали, чтобы быть достаточно видимым. Также обратите внимание, что цветовая температура, если она не установлена правильно, может испортить ваш рендер.
Наконец, постобработка — это последние штрихи к вашему рендеру. Простые ретуши вашего необработанного рендера могут превратить ваши рендеры в захватывающее фотореалистичное изображение.
Типы программного обеспечения для 3D-рендеринга
При поиске программного обеспечения для 3D-рендеринга вы встретите два повторяющихся термина, которые редко объясняются: biased ( «настраиваемый ») и unbiased ( «ненастраиваемый ») рендер. Вот что имеется в виду:
biased рендер (читается баяст) — это рендерер, где нужно НАСТРАИВАТЬ много параметров и он ПРЕДВЗЯТЫЙ, т.е. основанный не на «правде », а на каких-то своих личных допущениях.
biased программное обеспечение для 3D-рендеринга, в свою очередь, разработано для повышения эффективности. При расчете путей световых лучей они стратегически обманывают, чтобы сократить время рендеринга. В частности, это означает, что они интерполируют между кадрами или применяют размытие. Требуется определенный опыт, чтобы точно настроить предвзятого рендера для получения убедительного результата. Но в крупномасштабных проектах по анимации или спецэффектам, стоит потратить лишнюю расстоие с точки зрения экономии денег и времени.
По другую сторону unbiased рендер (читается анбаяст)- то есть рендерер, который НЕНАСТРАИВАЕМЫЙ (не нужно настраивать — нажал одну кнопку и сиди жди, пока картинка станет красивой) и он НЕПРЕДВЗЯТЫЙ. Непредвзятость выражается в том, что анбаяст рендерер старается максимально правдиво описать поведение света. Т.е. он использует формулы просчёта, которые на сегодняшний день максимально (на сколько могут) точно описывают физические законы, происходящие в природе (как свет падает, как отражается, как преломляется, как поглощается и т.д.).
unbiased рендер пытается рассчитать физически точные изображения. Это означает, что он отслеживают путь светового луча математически правильно, без каких-либо сокращений. Этот метод может привести к увеличению времени рендеринга. Поэтому анбаяст рендеринг редко используется для анимационных фильмов. Вместо этого его можно найти в графическом дизайне и архитектурной визуализации, поскольку время рендеринга не сильно влияет на график проекта.
Популярные применения 3d рендеринга
3D-рендеринг широко используется в области архитектуры
3D рендеринг изменил рабочие процессы во многих отраслях. В архитектуре и технике традиционные планы, карты и модели теперь дополняются реалистичными презентациями. Прототипирование с использованием рендеринга является менее затратным, а также сильно экономит время, т.к. можно сразу увидеть конечный результат, учесть все нюансы и внести соответствующие коррективы.
В современной киноиндустрии новые фильмы теперь сильно зависят от 3d рендеринга, а точнее уже не создаются без применения этого замечательного инструмента. Студии 3D-анимации работают над созданием анимационных фильмов высокой четкости. Для создания идеального снимка, физическим эффектам кино и реквизиту помогают видеоэффекты высокой четкости и компьютерные изображения. Нет предела, для создания сцена, все ограничено только фантазией человеческого мозга.
В маркетинге рендеры используются для изображения фотореалистичных изображений продуктов. Будучи экономически эффективными, маркетинговые отрасли используют рендеринг, чтобы сделать рекламные акции максимально реалистичными и увлекательными для потребителя.
Улучшение игр с помощью фотореалистичного рендеринга и высокой четкости имеет большое значение для отрасли. Каждый год разработчики игр продолжают стремиться к тому, чтобы сделать детали более реалистичными и захватывающими для геймеров.
Развитие 3D-рендеринга никогда не остановится, все будет ограничено только фантазией конкретного разработчика или группы разработчиков.
Рендеринг в веб
о переводе
Наше понимание в этой области основано на нашей работе с Chrome, и контактировании с большими сайтами в течение последних нескольких лет. В общем, мы хотим вдохновить разработчиков рассмотреть использование серверного рендеринга или статического рендеринга с полноценной регидратацией.
Чтобы лучше понимать архитектуры, из которых мы выбираем, когда принимаем решение, нам необходимо иметь четкое понимание каждого подхода и последовательную терминологию, которую мы будем использовать, когда говорим о них. Различия между этими подходами помогают проиллюстрировать компромиссы при рендеринге в вебе через призму производительности.
Терминология
Рендеринг
Rehydration (регидратация): «загрузка» JavaScript отображениий на клиенте таким образом, чтобы они повторно использовали отрендеренное на сервере DOM-дерево и данные HTML-а
Prerendering (пре-рендеринг): выполнение клиентского приложения во время сборки для захвата его начального состояния в виде статического HTML.
Performance
Server Rendering (Серверный рендеринг)
Серверный рендеринг генерирует полный HTML страницы на сервере в ответ на навигацию. Это позволяет избежать дополнительных проходов для получения данных и шаблонов на клиенте, так как это выполняется до того, как браузер получает ответ..
Серверный рендеринг обычно даёт быстрый First Paint (FP) и First Contentful Paint (FCP). Выполнение логики страницы и её рендеринг на сервере позволяют избежать отправки большого количества JavaScript клиенту, что помогает достичь быстрого Time to Interactive (TTI). Это имеет смысл потому, что при серверном рендеринге вы на самом деле просто посылаете текст и ссылки в браузер пользователя. Такой подход может хорошо работать для широкого спектра устройств и сетевых условий и открывает интересные возможности для оптимизации браузера, например можно выполнять разбор потоковых (streaming) документов.
При серверном рендеринге пользователи вряд ли будут вынуждены ждать, пока CPU-зависимый JavaScript будет выполнен, прежде чем они смогут использовать ваш сайт. Даже когда стороннего JS не избежать, использование серверного рендеринга для уменьшения собственных JS costs (JS затрат) может дать вам больше «budget» (бюжета) для остального. Однако, есть один основной недостаток такого подхода: генерация страниц на сервере занимает время, что часто может привести к замедлению Time to First Byte (TTFB).
Достаточно ли серверного рендеринга для вашего приложения, во многом зависит от того, какое приложение вы строите. Существует давняя дискуссия о правильности применения серверного рендеринга вместо клиентского рендеринга, но важно помнить, что вы можете использовать серверный рендеринг для одних страниц, а для других нет. Некоторые сайты с успехом переняли гибридный рендеринг. Netflix делает серверный рендеринг своих относительно статических страниц, в то время как делает prefetching JS для страниц с тяжелым взаимодействием, давая этим более тяжелым отрендеренным на клиенте страницам больше шансов на быструю загрузку.
Многие современные фреймворки, библиотеки и архитектуры позволяют отрисовывать одно и то же приложение как на клиенте, так и на сервере. Эти инструменты могут быть использованы для Server Rendering, однако важно отметить, что архитектуры, где рендеринг происходит как на сервере, так и на клиенте, являются собственным классом решений с очень различными характеристиками производительности и компромисами. React пользователи могут использовать для серверного рендеринга renderToString() или решения, построенные на нем, такие как Next.js. Пользователи Vue могут ознакомиться с руководством по серверному рендерингу Vue или познакомиться с Nuxt. В Angular есть Universal. Однако большинство популярных решений используют ту или иную форму гидратации (hydration), поэтому перед выбором инструмента следует ознакомиться с используемыми подходами.
Static Rendering (Статический рендеринг)
Решения для статического рендеринга бывают разных форм и размеров. Такие инструменты как Gatsby разработаны для того, чтобы разработчики чувствовали, что их приложение отрисовывается динамически, а не генерируется на этапе сборки. Другие, такие как Jekyll и Metalsmith, принимают их статическую природу, предоставляя подход более заточенный на шаблоны.
Одним из недостатков статического рендеринга является то, что отдельные HTML-файлы должны быть сгенерированы для каждого возможного URL. Это может быть сложно или даже невозможно, когда вы не можете предсказать, какими будут эти URL заранее, или если на сайте большое количество уникальных страниц.
Если вы не уверены, является ли решение статическим рендерингом или пре-рендерингом, попробуйте такой тест: отключите JavaScript и загрузите созданные веб-страницы. У статически отрендеренных страниц бОльшая часть функционала все равно будет существовать и без включённого JavaScript. У пре-рендеренных страниц все еще может быть некоторая базовая функциональность, такая как ссылки, но бОльшая часть страницы будет неживой.
Серверный рендеринг против статического
Серверный рендеринг генерирует HTML по требованию для каждого URL, но это может быть медленнее, чем просто обслуживание статически отрендереного контента. Если вы готовы сделать дополнительные усилия, то серверный рендеринг + [HTML кеширование] (https://freecontent.manning.com/caching-in-react/) может значительно сократить время серверного рендеринга. Положительной стороной серверного рендеринга является возможность получать более «живые» данные и отвечать на более полный набор запросов, чем это возможно при статическом рендеринге. Страницы, требующие персонализации, являются хорошим примером типа запроса, который плохо работает со статическим рендерингом.
Серверный рендеринг также может представлять интересные решения при построении PWA. Лучше ли использовать full-page service worker кеширование, или просто рендерить на сервере отдельные фрагменты контента?
Client-Side Rendering (CSR)
Рендеринг на стороне клиента (CSR) означает рендеринг страниц непосредственно в браузере с использованием JavaScript. Вся логика, сбор данных, шаблонирование и маршрутизация обрабатываются на клиенте, а не на сервере.
Для тех, кто создает одностраничное приложение, определение основных частей пользовательского интерфейса, разделяемого большинством страниц, означает возможность применить технику Application Shell caching. В сочетании с service workers это может драматически повысить воспринимаемую производительность при повторных визитах.
Комбинация серверного рендеринга и клиентского через регидратацию
Часто называемый Universal Rendering или просто «SSR», этот подход пытается сгладить компромиссы клиентского и серверного редеринга, делая и то, и другое. Навигационные запросы, такие как полная загрузка страницы или перезагрузка, обрабатываются сервером, который рендерит приложение в HTML, затем JavaScript и данные, используемые для рендеринга, встраиваются в результирующий документ. При тщательной реализации, это даёт быстрый FCP (First Contentful Paint) такой же, как Server Rendering, а далее «усиливает это» путем рендеринга опять же на клиенте с помощью техники, называемой (re)hydration ((ре)гидратация). Это новое решение, но оно может иметь некоторые существенные недостатки в производительности.
Основной недостаток SSR с регидратацией (rehydration) заключается в том, что она может оказать значительное негативное влияние на TTI (Time To Interactive), даже если она улучшает FP (First Paint). SSR-страницы часто выглядят обманчиво полностью загруженными и интерактивными, но на самом деле не могут реагировать на ввод, пока не будет выполнен JS на стороне клиента и не будут прикреплены обработчики событий. Это может занять секунды или даже минуты на мобильном устройстве.
= Проблема регидратации: Одно приложение по цене двух
Проблемы с регидратацией часто могут быть хуже, чем задержка интерактивности из-за JS. Для того, чтобы JavaScript на стороне клиента мог точно «определить» («pick up») то место, где остановился сервер, без необходимости повторно запрашивать все данные, использованные сервером для рендеринга этого HTML, текущие SSR решения обычно сериализуют ответ из зависимых данных UI в документ в виде тегов script. Полученный HTML-документ содержит высокий уровень дублирования:
Как вы видите, сервер возвращает описание пользовательского интерфейса приложения в ответ на навигационный запрос, но также возвращает исходные данные, использованные для составления этого интерфейса, и полную копию реализации интерфейса, которая затем загружается на клиенте. Только после того, как bundle.js завершит загрузку и выполнение, этот пользовательский интерфейс станет интерактивным.
Показатели производительности, собранные с реальных веб-сайтов, использующих SSR регидратацию, указывают на то, что их использование должно приводить в уныние. В конце концов, причина сводится к Пользовательскому Опыту: очень легко оставить пользователей в «жуткой долине».
Но всё же надежда на SSR с регидратацией есть. В краткосрочной перспективе, только использование SSR для высоко кешируемого содержимого может уменьшить задержку TTFB (Time to First Byte), давая результаты, схожие с пре-рендерингом. Регидратация инкрементальная, прогрессивная или частичная, может быть ключом к тому, чтобы сделать эту технику более жизнеспособной в будущем.
Потоковый серверный рендеринг и прогрессивная регидратация
Серверный рендеринг за последние несколько лет претерпел ряд изменений.
= Частичная регидратация
Частичная регидратация оказалась трудной для осуществления. Этот подход является продолжением идеи прогрессивной регидратации, когда отдельные части (компоненты / виджеты / деревья), подлежащие прогрессивной регидратации, анализируются, а те, которые обладают низкой интерактивностью или не обладают реактивностью помечаются. Для каждой из этих наиболее статических частей соответствующий код JavaScript затем трансформируется в инертные ссылки и декоративную функциональность, уменьшая их влияние на стороне клиента до почти нулевого уровня. Подход, основанный на частичной гидратации, имеет свои собственные проблемы и компромиссы. Он создает некоторые интересные вызовы для кеширования, а навигация на стороне клиента означает, что мы не можем иметь HTML рендерящийся на сервере для инертных частей приложения и доступный без полной загрузки страницы.
= Трисоморфный рендеринг (Trisomorphic Rendering)
Если service workers, являются подходящим вариантом для вас, то «трисоморфный» рендеринг также может быть вам интересен. Это метод, при котором вы можете использовать потоковый серверный рендеринг для начальных/не-JS навигаций, а затем попросить ваш service worker взять на себя рендеринг HTML для навигации после того как он будет смонтирован. Это может поддерживать кешированные компоненты и шаблоны в актуальном состоянии и позволяет использовать навигацию в стиле SPA для рендеринга новых UI-частей в той же сессии. Такой подход лучше всего работает, когда вы можете поделиться одним и тем же шаблоном и кодом маршрутизации между сервером, клиентской страницей и service worker.
SEO соображения
Команды часто учитывают влияние SEO при выборе стратегии для рендеринга в вебе. Серверный рендеринг часто выбирается для обеспечения поисковым роботам возможности лёгкого «полного поиска». Поисковые роботы могут понимать JavaScript, но часто существуют ограничения, о которых стоит знать в части того как они рендерят. Рендеринг на стороне клиента может работать, но часто не без дополнительного тестирования и трудной работы. В последнее время динамический рендеринг также стал вариантом, заслуживающим внимания, если ваша архитектура в значительной степени ориентирована на клиентский JavaScript.
В случае сомнений, инструмент Mobile Friendly Test бесценен для проверки, что выбранный вами подход делает то, что бы вы хотели. Он показывает визуальный предварительный просмотр того, как какую-либо страницу видет поисковый робот Google, сериализованный HTML контент, найденный (после выполнения JavaScript), и любые ошибки, обнаруженные во время рендеринга.
Заключение.
При принятии решения о подходе к рендерингу, измеряйте и понимайте, каковы ваши «узкие места». Подумайте, может ли статический рендеринг или серверный рендеринг дать вам хотя бы 90% возможностей. Совершенно нормально обычно отправлять HTML с минимальным количеством JS, чтобы получить интерактивный опыт. Вот удобная инфографика, показывающая спектр возможностей в разрезе сервер-клиент:
Благодарности
Спасибо всем этим людям за отзывы и вдохновение:
Jeffrey Posnick, Houssein Djirdeh, Shubhie Panicker, Chris Harrelson, and Sebastian Markbåge