Які переваги надаються за допомогою відображення сторінок на сервері?


19

Я розробляю веб-додаток, і в даний час я написав весь веб-сайт у html / js / css, а на бекенді у мене є сервлети, які розміщують деякі ПОСЛУГІ послуги. Вся логіка презентації здійснюється через отримання об'єктів json та модифікацію подання через JavaScript.

Додаток по суті є пошуковою системою, але він матиме облікові записи користувачів з різними ролями.

Я досліджував деякі рамки, такі як Play і Spring. Я досить новачок у веб-розробці, тому мені було цікаво, які переваги за допомогою надання серверної сторінки надаватиме?

Це: Швидкість? Легший розвиток та робочий процес? Доступ до існуючих бібліотек? Більше? Все вищеперераховане?


4
Безпека - велика. Зокрема, коли програма є динамічною та потребує зв’язку з базою даних.
Одід

2
@Oded - Чому безпеку зробити простіше, коли ви рендерінгу сторінки в API? Я завжди думав, що те, що вам потрібно програмувати, рівнозначно будь-якому випадку, але психологічно простіше (принаймні для мене) пам’ятати, щоб не довіряти клієнту під час роботи API. Я прошу, бо якщо я не помічаю щось, що мені дуже хочеться знати.
пн

1
@psr Він може не посилатися на безпеку даних настільки, як на безпеку користувачів (наприклад, експлуатація MITM). Тільки здогадка, хоча.
maple_shaft

1
@psr - Погоджено. Однак якраз вчора я відповів на запитання, де в ОР була вбудована лінія з'єднання в JS ...
Oded

1
@maple_shaft - MITM - це над чим подумати, але я знову не впевнений, чому це має значення для HTML, створеного API та сервером. Я думаю, що API зручніше програмувати проти, тому це було б дещо легше зламати, але я сумніваюся, що це ви маєте на увазі.
пн

Відповіді:


16

HTML-рендерінг на стороні сервера:

  • Найшвидше відображення браузера
  • Кешування сторінок можливе як швидке та брудне підвищення продуктивності
  • Для "стандартних" додатків багато функцій інтерфейсу попередньо вбудовані
  • Іноді вважається більш стабільним, оскільки компоненти зазвичай підлягають валідації часу компіляції
  • Опирається на досвід бекенда
  • Іноді швидше розвиватися *

* Коли вимоги інтерфейсу добре відповідають рамкам.


HTML-рендерінг на стороні клієнта:

  • Менше використання пропускної здатності
  • Повільніше відображення початкової сторінки. Можливо, це навіть не помітно в сучасних настільних браузерах. Якщо вам потрібно підтримувати IE6-7 або багато мобільних браузерів (мобільний веб-код не поганий), ви можете зіткнутися з вузькими місцями.
  • Спочатку побудова API - це означає, що клієнт може так само легко бути власною програмою, тонким клієнтом, іншою веб-службою тощо.
  • Спирається на експертизу JS
  • Іноді швидше розвиватися **

** Коли користувальницький інтерфейс значною мірою призначений для користувача, з цікавішими взаємодіями. Крім того, я вважаю, що кодування в браузері з інтерпретованим кодом помітно швидше, ніж очікування компіляцій та перезавантаження сервера.


Ви також можете розглянути гібридну модель із легким допоміжним реалізацією, використовуючи систему шаблонів «передній / задній», як вуса .


1
О, повністю забув про можливості кешування!
Майкл К

"Для" стандартних "додатків багато функцій інтерфейсу є попередньо вбудованими" Це не має значення, і сервер, і клієнт мають це.
Райнос

@Raynos Він не згадував про використання на стороні клієнта рамки, але якщо він використовує, це хороший момент.
peteorpeter

1
Дякую, це здебільшого відповідь, яку я шукав. Я не надто багато робив з клієнтськими рамками, але я робив кілька досліджень на dust.js, грунтуючись на виборі LinkedIn. Я знаю, що вуса - це альтернатива, але я вивчу її більше. Я, швидше за все, буду робити якийсь гібрид, в першу чергу я хотів би відсунути речі на сторону сервера, якщо це може покращити продуктивність. Знову дякую.
користувач1303881

Я б насправді не вважав нічим, що перераховане для "Візуалізація HTML на стороні клієнта", як перевагу. "Іноді швидше розвиватися" вилітає у вікно ще раз, ніж розглядаються крайові браузери (IE 8 тощо).
null

3

генерація HTML на стороні сервера:

  • легше налагоджувати;
  • немає проблем із сумісністю браузера;
  • з класичним поколінням сервера на повних сторінках важче кешувати HTML, навіть якщо він має великі незмінні частини; (рішення - отримати фрагменти HTML через дзвінки AJAX);
  • не скористатися кеш-проксі-серверами та CDN-динаміками для динамічного HTML;

генерація HTML на стороні клієнта:

  • важче налагоджувати;
  • деякі проблеми із застарілими браузерами;
  • немає проблем із кешуванням HTML-шаблонів на стороні клієнта;
  • скористатися кеш-проксі-серверами та CDN-кодами для HTML-шаблонів та JS-коду;
  • значно нижче використання мережі;

Зауважте, що генерація на стороні клієнта - це так, як це робиться у випадку успішних мобільних сайтів, оскільки, очевидно, це набагато ефективніше у сучасних браузерах (браузери на основі WebKit мають близько 70-80% ринку мобільних пристроїв).

LinkedIn має статтю про переваги підходу на стороні клієнта, використовуючи dust.js як приклад: "Залишити JSP в пилу: переміщення LinkedIn до шаблонів на стороні dust.js"


1
+1 На сучасних смартфонах (в першу чергу використовують веб-мобільний мобільний телефон) JS, швидше за все, не є вузьким місцем, тоді як пропускна здатність стільникової мережі є .
peteorpeter

1

Це залежить від ваших вимог. Якщо вам потрібно рішення високої продуктивності та низької затримки, яке залежить від безлічі дрібних завдань, ви можете перейти зі структурою, подібною до того, що ви описуєте. Найбільш поширені рішення в Java, PHP та C # не замовчують це.

Більшість веб-додатків дуже сильно залежать від баз даних - більшість з них настільки сильно, що сторінки не могли відображатися без хоча б одного дзвінка. Очевидно, ви не хочете відкривати свою базу даних публічно з кількох причин:

  • Безпека (як згадує Оден ) - ви точно не хочете відкривати свою мережу публічно! В ідеалі єдиним інтерфейсом для вашої системи ззовні повинен бути https до вашого сервера.
  • Простота розробки - ви дійсно, дійсно , дійсно не хочете писати SQL в Javascript, і мови , призначені для веб - презентації не дуже добре працювати з РБД. Наприклад, у них немає поняття держави.

Отже, коли вам потрібна база даних, ви використовуєте мови, які добре грають з ними, як Java, C #, PHP тощо. Найпростішим способом створення сторінки виявляється такий: Ви використовуєте мову шаблонів (найбільш відомий PHP але JSP і ASP - це дві інші дуже поширені мови) для створення сторінки. Мова надає конструкції, які викликають інші модулі. У PHP це зазвичай на сторінці або в іншому файлі PHP, використовуючи шаблон MVC. У JSP ви використовуєте сценарії або мову вираження JSP. Ці інші модулі можуть виконувати важку роботу з підключенням до БД, виконанням логіки та поверненням значень до рівня перегляду. Кінцевим результатом є генерована HTML-сторінка, виведена на сервері та відправлена ​​клієнту.

Коли ваша база даних знаходиться в тій самій мережі, що й рендерінг сторінки, ви також отримуєте кращу ефективність. Клієнт повинен зробити лише один запит і отримати сторінку - можливо, вам доведеться зробити 10-15 запитів БД, перш ніж мати всю інформацію, яка потрібна користувачеві. Затримка мілісекунд у вашій мережі склала б секунди до хвилини, якби клієнт повинен був їх виконати.

Коли системи зростають, розділення проблем та основних компетенцій стає вирішальним. HTML хороший для відображення. Javascript хороший для динамічного контенту. SQL чудово підходить для запитів до бази даних, а інші мови корисні для логіки бізнесу. Наша робота як розробників - використовувати всі доступні нам інструменти для побудови ремонтованої системи. Простота розвитку - це величезна частина хорошої системи. На мій погляд, це майже так само важливо, як продуктивність та зручність використання. З часом розвиваються чудові системи. Погані системи були написані погано з самого початку і ніколи не вдосконалювалися.


you can't write SQL in Javascript Дійсно ?! Ви коли-небудь переглядали питання StackOverflow для Javascript? Я б просив, на жаль, відрізнятися. Звичайно, це найгірше, що ви могли зробити в коді клієнта, але ...
maple_shaft

... також я забув про Node.JS, але тоді це сервер JS, який зовсім інша тварина.
maple_shaft

Мабуть, можна - ТІЛ! Просто ... ого, хоч. Хоча говорити про зловживання мовою!
Майкл К

2
Інтерфейс REST - це те, як клієнт в даний час отримує доступ до даних БД через об'єкти json. Він не відкриває все, і ця програма є частиною приватної корпоративної мережі. Однією з переваг інтерфейсів є можливість інших програм на підприємстві використовувати будь-які послуги, які вони хотіли б. З точки зору розвитку, я можу дозволити розробникам переднього кінця робити те, що їм заманеться в html / js / css, і тоді вони можуть просто пінгувати RESTful інтерфейс, розроблений розробниками Java. Однак у більшості з нас є змішаний набір навичок, і такий поділ може не знадобитися.
user1303881

3
-1: @MichaelK: ти обговорюєш із солом’яною людиною, яку ти уявляв, але абсолютно не має нічого спільного з реальним життям. RESTful використовує HTTP. Нікому не потрібно писати SQL в JS, саме для цього RESTful інтерфейс. Також RESTful не означає, що існує 1-до-1 зіставлення із запитами БД. Ваша відповідь могла бути дійсною у 1990-х, але ми зараз у 2012-му.
vartec

0

Мобільні клієнти, як правило, обмежені потужністю, пропускною здатністю та пам'яттю. Напевно, краще візуалізувати сторінки для них на сервері.

Для настільних клієнтів ви можете розглянути можливість надсилання js + json для надання сторінки клієнту, динамічного оновлення тощо.


На практиці, однак, часто буває навпаки. Фактично проект jQuery Mobile повністю заснований на ідеї надання клієнта.
Pointy

@Pointy: так, це може бути навпаки. Слід перевірити, як поводяться конкретні сторінки у конкретних клієнтів. Надання посилання на альтернативу (наприклад, "мобільні" та "посилання на версії для робочого столу") може бути корисним і для користувача.
9000

Мобільний сьогодні характеризується набагато більшою затримкою, ніж низькою пропускною здатністю або потужністю обробки. У проекті, над яким я нещодавно працював, ми більше переймалися розміром сторінки, а не швидкістю візуалізації - сучасні телефони досить непогані.
Майкл К

@Pointy Проект jQuery Mobile - це також велика купа жахливого коду, який не слід використовувати. Популярність! == значення
Райнос

@Raynos Ми фактично використовуємо Jquery Mobile, маючи досить хороший успіх. Ви знаєте щось, чого ми не робимо? ;)
Майкл К

0

Однією з величезних переваг візуалізації на сервері є доступність - додатки на основі JavaScript все ще є великою проблемою для людей без виду. Це і є цей сліпий хлопець під назвою "googlebot", якого ви, можливо, захочете задовольнити. Він також не працює на JavaScript.


Хороший момент, хоча ця програма не вимагає SEO, оскільки вона приватна, я також розробляю деякі особисті програми, і це є врахуванням на цій арені.
user1303881

Googlebot чи інтерпретувати JS / AJAX в протягом деякого часу: searchenginewatch.com/article/2122137 / ...
Vartec

@vartec: Я думаю, що ключовим сенсом у цій статті є "тепер можна читати та розуміти певні динамічні коментарі, реалізовані через AJAX та JavaScript". Я підозрюю, що він охоплює диски та фейсбук, але не ваша власна настройка ajax.
Wyatt Barnett
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.