Я добираюсь до места в приложении, где мне нужно начинать кешировать вещи, и это заставило меня задуматься...
- В некоторых частях приложения я обрабатываю строки таблицы (jqGrid, slickgrid и т.д.) или фантастические строки div (например, в New Twitter), захватывая чистый JSON и запуская его через нечто вроде Mustache, jquery.tmpl и т.д..
- В других частях приложения я просто представляю информацию в чистом HTML (на серверных шаблонах HAML), а если есть поиск/разбиение на страницы, я просто перехожу на новый URL-адрес и загружаю новую HTML-страницу.
Теперь проблема заключается в кэшировании и ремонтопригодности.
С одной стороны, я думаю, если бы все было построено с использованием Javascript HTML Templates, то мое приложение будет служить только макетом/оболочкой HTML и связкой JSON. Если вы посмотрите на источник в Facebook и Twitter HTML, это в основном то, что они делают (95% json/javascript, 5% html). Это сделало бы так, что моему приложению нужно было только кэшировать JSON (страницы, действия и/или записи). Это означает, что вы попали в кеш независимо от того, был ли вы каким-то удаленным разработчиком api, обращающимся к JSON api, или к веб-прокси-сайту. То есть, мне не нужны 2 кэша, один для JSON, один для HTML. Похоже, что он сократил мой кэш-хранилище пополам и немного упростил ситуацию.
С другой стороны, я думаю, из того, что я видел/испытывал, создавая статическую HTML-серверную сторону и кэшируя это, кажется, намного лучше, чем мудрый кросс-браузер; вы получаете графику мгновенно и не должны ждать, что split-second для javascript для ее рендеринга. StackOverflow, кажется, делает все в простом HTML, так же как и Google, и вы можете сказать... все появляется сразу. Обратите внимание, что, хотя на twitter.com, страница пуста для .5-1 секунд, а фрагменты страницы: javascript должен отображать JSON. Недостатком этого является то, что для любой динамической (например, бесконечной прокрутки или сетки) мне все равно придется создавать шаблоны javascript... так что теперь у меня есть серверные шаблоны HAML, клиентские javascript-шаблоны и многое другое больше для кэширования.
Мой вопрос в том, есть ли какой-либо консенсус относительно того, как подойти к этому? Каковы преимущества и недостатки вашего опыта смешивания двух против 100% с одним над другим?
Update:
Некоторые причины, из-за которых я еще не принял решение идти со 100% -ным шаблоном javascript, следующие:
- Производительность. Формально не тестировались, но из того, что я видел, raw html отображает быстрее и быстрее, чем javascript-сгенерированный html-браузер. Кроме того, я не уверен, как мобильные устройства обрабатывают динамический html-результат.
- Тестирование. У меня много интеграционных тестов, которые хорошо работают со статическим HTML, поэтому переход на javascript-only потребует 1) более целенаправленного тестирования pure-javascript (jasmine) и 2) интеграция javascript в тесты интеграции capybara. Это всего лишь вопрос времени и работы, но это, вероятно, важно.
- Обслуживание. Избавиться от HAML. Мне нравится HAML, так легко писать, он печатает довольно HTML... Он делает код чистым, он упрощает обслуживание. Идя с javascript, нет ничего более сжатого.
- SEO. Я знаю, что google обрабатывает ajax
/#!/path
, но не понял, как это повлияет на другие поисковые системы и как старые браузеры обрабатывают его. Похоже, что для этого потребуется значительная настройка.