Подтвердить что ты не робот

Почему именно HTML-версия на стороне сервера быстрее, чем клиентская?

Я работаю на большом веб-сайте, и мы перемещаем множество функций на стороне клиента (Require.js, Backbone и Handlebars stack). Есть даже дискуссии о возможном перемещении всего рендеринга на клиентскую сторону.

Но, читая некоторые статьи, особенно те, которые касаются Twitter, отступают от рендеринга на стороне клиента, в которых упоминается, что серверная сторона быстрее/надежнее, у меня возникают вопросы. Я не понимаю, как рендеринг довольно простых HTML-виджетов в JS от JSON и шаблонов - это современный браузер на двухъядерном процессоре с 4-8 ГБ оперативной памяти, чем медленнее, чем делать десятки включений в приложении на стороне сервера. Есть ли реальные фактические показатели бенчмаркинга в отношении этого?

Кроме того, похоже, что синтаксический анализ HTML-шаблонов с помощью механизмов шаблонов на стороне сервера не может быть быстрее, чем рендеринг того же HTML-кода из шаблона Handlebars, особенно если это функция precomp JS?

4b9b3361

Ответ 1

Существует много причин:

  • JavaScript интерпретируется как язык и медленнее, чем сервер (обычно выполняется на компилированном языке)
  • Манипуляция DOM выполняется медленно, и если вы манипулируете им в JS, приводит к низкой производительности. Есть способы преодолеть это, как подготовка вашего рендеринга в тексте, а затем его оценка, на самом деле это может привести вас как можно ближе к рендерингу на стороне сервера.
  • Некоторые браузеры слишком медленные, особенно старые IE

Ответ 2

  • Выполнение скомпилированного языка по сравнению с интерпретированным javascript
  • Кэширование, т.е. обслуживание той же страницы, которую уже запросил другой пользователь, это устраняет необходимость для каждого клиента визуализировать его. Отлично подходит для сайтов с огромным трафиком - то есть новостных сайтов. Микро-кэширование может даже обеспечить почти обновления в режиме реального времени, но обеспечивает значительный трафик из кеша. Не нужно ждать рендеринга клиента.
  • Меньшая зависимость от пользователей со старыми компьютерами или медленными/искалеченными браузерами.
  • Нужно только беспокоиться о рендеринге, меньше полагаться на то, как разные браузеры управляют DOM (надежность)

Но для сложного пользовательского интерфейса клиентский рендеринг взаимодействий обеспечит более удобный пользовательский интерфейс.

Это зависит от того, какую производительность вы пытаетесь оптимизировать и сколько пользователей.

Ответ 3

Чтобы запустить код на стороне клиента, он сначала должен быть загружен. Код на стороне сервера просто загружается при запуске сервера, тогда как клиентский код должен быть загружен при каждой странице страницы. В любом случае код должен интерпретироваться при загрузке страницы, даже если файл уже кэширован. Возможно, у вас также есть кеширование деревьев разбора JS в браузере, но я думаю, что они не сохраняются, поэтому они не будут долго жить.

Это означает, что независимо от того, насколько быстро работает JavaScript (и это довольно быстро), работа должна выполняться во время ожидания пользователя. Многие исследования показали, что время загрузки страницы сильно влияет на восприятие пользователями качества и актуальности сайтов.

Итог заключается в том, что у вас есть максимум 500 мс, чтобы получить вашу страницу из чистого кеша в вашей типичной среде разработчика. Более медленные устройства и сети сделают это отставание практически неприемлемым для большинства пользователей.

Итак, у вас, вероятно, есть 50-100 мс, чтобы делать что-то в JavaScript во время загрузки страницы, все это, общая сумма, что означает, что рендеринг сложной страницы, ну, нелегко.