Почему бы мне просто не создать целое веб-приложение в HTML-шаблонах Javascript и Javascript? - PullRequest
18 голосов
/ 06 марта 2011

Я дошел до точки приложения, где мне нужно начать кэшировать вещи, и это заставило меня задуматься ...

  1. В некоторых частях приложения я визуализирую строки таблицы (jqGrid, slickgrid и т. Д.) Или необычные строки div (как в новом Twitter), захватывая чистый JSON и запуская его через что-то вроде Mustache, jquery.tmpl и т. Д. .
  2. В других частях приложения я просто отображаю информацию в чистом HTML (серверные HAML-шаблоны), а если идет поиск / разбиение на страницы, я просто захожу на новый URL и загружаю новую HTML-страницу.

Теперь проблема в кешировании и поддержке.

С одной стороны, я думаю, что если бы все было построено с использованием HTML-шаблонов Javascript, то мое приложение могло бы обслуживать только макет / оболочку HTML и несколько JSON. Если вы посмотрите на исходный HTML-код Facebook и Twitter, то в основном это то, что они делают (95% json / javascript, 5% html). Это сделало бы так, чтобы моему приложению требовалось только кэшировать JSON (страницы, действия и / или записи). Это означает, что вы попадете в кеш, независимо от того, работали ли вы с каким-нибудь удаленным API-разработчиком, обращающимся к JSON-API, или веб-приложением с ограниченным доступом. То есть мне не нужно 2 кэша, один для JSON, другой для HTML. Похоже, это сократит мой кеш-накопитель пополам и немного упростит работу.

С другой стороны, я думаю, что из того, что я видел / испытывал, генерирование статического HTML-кода на стороне сервера и его кэширование, похоже, намного лучше с точки зрения производительности кросс-браузерно; Вы получаете графику мгновенно, и вам не нужно ждать этой доли секунды, пока javascript ее отобразит. StackOverflow, кажется, делает все в простом HTML, как и Google, и вы можете сказать ... все появляется сразу. Обратите внимание, что на twitter.com страница пуста в течение 0,5-1 секунды, и страница разбивается на части: javascript должен отображать json. Недостатком этого является то, что для чего-то динамического (например, бесконечная прокрутка или сетки) мне бы пришлось создавать шаблоны javascript в любом случае ... так что теперь у меня есть серверные HAML-шаблоны, клиентские javascript-шаблоны и многое другое. больше в кеш.

У меня вопрос: есть ли консенсус о том, как к этому подойти? Каковы преимущества и недостатки вашего опыта смешивания двух по сравнению со 100% с одним по другому?

Обновление:

Вот некоторые причины, которые влияют на то, почему я еще не принял решение использовать 100% шаблоны JavaScript:

  • Производительность . Формально не проверял, но из того, что я видел, сырой html рендерит быстрее и плавнее, чем кросс-браузерный html, сгенерированный javascript. Кроме того, я не уверен, как мобильные устройства обрабатывают динамический HTML с точки зрения производительности.
  • Тестирование . У меня есть много интеграционных тестов, которые хорошо работают со статическим HTML, поэтому переключение на javascript-only потребует 1) более сфокусированного тестирования на чистом javascript ( jasmine ) и 2) интеграции javascript в интеграционные тесты capybara. Это просто вопрос времени и работы, но, вероятно, это важно.
  • Техническое обслуживание . Избавляемся от ХАМЛ. Я люблю HAML, его так легко написать, он печатает красивый HTML ... Он делает код чистым, он облегчает обслуживание. Что касается javascript, нет ничего более краткого.
  • SEO . Я знаю, что Google обрабатывает ajax /#!/path, но я еще не понял, как это повлияет на другие поисковые системы и как старые браузеры справляются с этим. Похоже, это потребовало бы значительных настроек.

Ответы [ 3 ]

8 голосов
/ 06 марта 2011

Постоянное хранилище личных данных.

Вам необходим сервер для хранения данных с различными уровнями публичного / частного доступа.Вам также нужен сервер для безопасной информации с закрытым исходным кодом.Вам нужен сервер, чтобы выполнять тяжелую работу, которую вы не хотите делать на клиенте.Сложные запросы данных лучше оставить в вашей базе данных.Индексирование и поиск еще не оптимизированы для javascript.

Также у вас есть проблемы с более старыми браузерами, которые намного медленнее.Если вы не используете FF4 / Chrome или IE9, тогда существует большая разница между манипулированием данными и построением страницы на клиенте и сервере.

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

Но в целом приложение действительно может быть полностью построено на JavaScript и с использованием шаблонов.Различные конструкции и движки javascript достаточно продвинуты, чтобы сделать это.Для этого существует достаточно популярных фреймворков.Веб-приложения на чистом javascript больше не являются экспериментами и прототипами.

О, и если бы рекомендовали для этого фреймворки, взгляните на backbone.js .


Безопасность


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

5 голосов
/ 06 марта 2011

Раньше я смешивал эти два подхода, но затем полностью переключился на рендеринг на стороне клиента, потому что было действительно трудно правильно обрабатывать тяжелый JavaScript, иначе. В качестве законченного решения можно порекомендовать подход JavaScriptMVC framework.

Он имеет механизм рендеринга представлений, называемый EJS, который может сжимать ваши представления в простой JavaScript для производственной сборки вашего приложения. Это делает его чрезвычайно быстрым (весь ваш HTML предварительно загружается с вашим единственным сжатым файлом JavaScript, поэтому он отображается, как только вы получаете данные JSON моделей). Я лично не мог заметить разницу в производительности между рендерингом EJS и передачей простого HTML.

Тогда для вашего API, следуя принципам REST, кэширование является одним из ключевых ограничений. Поэтому, если ваше приложение правильно поддерживает кэширование HTTP для данных JSON и использует сжатые шаблоны на стороне клиента, вы можете даже увидеть улучшение производительности.

2 голосов
/ 06 марта 2011

Я мог бы быть далеко отсюда, но ...

Вы когда-нибудь смотрели на CouchDB?(У меня нет связи с ними) Кстати, я могу ошибаться, но ваша ситуация звучит так, как будто она идеально подходит для использования Apache CouchDB Я сам еще не использовал его, ноНекоторое время назад я внимательно посмотрел на него, и это очень интересная база данных.

Это база данных на основе документов, которая использует REST API для соединений (очень универсальная и простая в использовании).Это также очень JSON-ориентированный, очень быстрый и крошечный след;они говорят, что он также может быть установлен на телефонах и других встроенных устройствах, но в то же время должен быть чрезвычайно масштабируемым (то есть вверх).Если вы большой пользователь JS (который звучит так, как вы), то вы можете быть дома с ним.

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

...