4

http://blog.urbantastic.com/post/81336210/tech-tuesday-the-fiddly-bitsКаковы преимущества обслуживания статического HTML и создания контента с помощью AJAX/JSON?

Хит из Urbantastic пишет о своей системе генерации HTML:

Все HTML в Urbantastic полностью статичным. Все динамические данные отправляются через AJAX в формате JSON, а затем объединены с HTML с помощью Javascript. Иными словами, серверное программное обеспечение для Urbantastic производит и потребляет исключительно JSON. HTML, CSS, Javascript и изображения отправляются через другую службу (ванильный сервер Nginx).

Я думаю, что это интересная модель, поскольку она отделяет представление от данных физически. Я не эксперт в области архитектуры, но кажется, что будет скачок эффективности и стабильности.

Однако следующие проблемы со мной:


  • [субъективное] Clojure является чрезвычайно мощным; Javascript нет. Написание всего контента на языке, создаваемом для других целей, создаст некоторую боль (представьте себе, что код Javascript-типа в CSS). Если у него нет макросистемы для генерации Javascript, Heath, вероятно, до постоянного переключения между JavaScript и Clojure. У него также будет много JS-кода; вероятно, намного больше, чем Clojure. Это может быть не очень хорошо с точки зрения силы, быстрого развития, лаконичности и всего, что мы смотрим при переключении на Lang-based langauges.

  • [performance] Я не уверен в этом, но рендеринг всего на машине пользователя может отставать.

  • [accessibility] Если у вас отключен JS, вы не можете использовать сайт вообще.

  • [accessibility # 2] Я подозреваю, что много динамических данных, заполняемых JavaScript, создаст проблемы с несколькими браузерами.

Отзывы могут комментировать? Мне было бы интересно узнать ваше мнение об этом типе архитектуры.

Ссылки:

  1. Link для обсуждения HN.
  2. Link обсуждение/r/программирование.
+0

Javascript IS чрезвычайно мощный. Я имею в виду, что вы не должны понимать Javascript. Он предоставляет больше парадигм и вариантов, чем C++ или Lisp. Ему не хватает скорости, но для объема работы это не имеет значения. –

+0

Любое из недостатков скорости в любом случае компенсирует накладные расходы данных при передаче полных страниц. (по крайней мере, по крайней мере). Javascript дает вам возможность сделать массивный перекрестный кластер с 0 усилиями (зрители выполняют работу;)) –

+0

Скорость относительно восприятия не является проблемой. Это граница IO, которая все еще проблема. – annakata

ответ

2

«Весь HTML-код в Urbantastic полностью статичен. Все динамические данные отправляются через AJAX в формате JSON, а затем объединены с HTML с помощью Javascript».

Я думаю, что это стандартная модель RIA. Слово акцента, кажется, «Все» здесь. Причина на многих веб-сайтах, многие из динамического контента все еще не получены через Ajax, только ключевые функции.

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

Доступность JS действительно является проблемой. Но тогда пользователи, которые хотят испытать AJAX, должны иметь JS. Проводили ли вы опрос о том, сколько из ВАШИХ пользователей не включено?

+0

«если у вас нет огромной веб-страницы с большим количеством элементов» Лично я не думаю, что это будет проблемой даже тогда. У нас есть огромные страницы, которые отсылаются на сервер, что замедляет работу сервера для ВСЕХ пользователей! Данные Судоходные бы 10% от ввода/вывода полностью оказанной HTML – Kristen

+0

Если наш сервер в 100 раз быстрее, чем клиент, и наш скомпилированный приложение 100x интерпретированы JavaScript, но Template + JSON данных только 10% полностью оказанной HTML моей кишки чувствую что сторона шаблона слияние клиента будет достаточно быстро, и уменьшить потребность – Kristen

+0

серверов и ресурсов полосы пропускания Я согласен с вами, Кристен, я просто пытался играть безопасно там :) –

0

Когда AJAX начал бить его большим, в конце 2005 я написал шаблонизатор на сторону клиента, и в основном повернул мой шаблон блоггера в полноценный опыт AJAX.

Дело в том, что шаблон вещи, это было действительно легко реализовать и он устранил много черновой работы.

Вот как это было сделано.

<div id="blogger-post-template"> 
<h1><span id="blogger-post-header"/></h1> 
<p><span id="blogger-post-body"/><p> 
<div> 

А потом в JavaScript:

var response = // <- AJAX response 
var container = document.getElementById("blogger-post-template"); 
if (!template) { // template context 
    template = container.cloneNode(true); // deep clone 
} 
// clear container 
while(container.firstChild) 
    container.removeChild(template.firstChild); 

container.appendChild(instantiate(template, response)); 

Функция Instantiate делает глубокий клон шаблон затем ищет клон для идентификаторов заменить данными, полученными в ответ. Конечным результатом является заполненное дерево DOM, которое изначально было определено в HTML. Если бы у меня было более одного результата, я просто перешел через приведенный выше код.

1

Преимущество заключается в том, вы можете служить 99% (по массе) содержания через CDN (как Akamai) или даже поставить его на внешнем запоминающем устройстве (например, S3). Обслуживание только JSON практически невозможно для сайта, чтобы получить slashdoted.

+0

Это только справедливо, если вы не предоставите Беспоставочные альтернатива. Лучший план состоит в том, чтобы иметь нормальные ссылки для разметки без сценария и заменить их на JS-вызовы * с помощью JS * как часть загрузки страницы. – annakata

+0

В настоящее время 97-99% пользователей имеют JS active. Остальные 1-3% не будут перегружать сервер. – vartec