Javascript: как разобраться во всех фреймворках и философиях дизайна?

Я уже некоторое время пользуюсь jQuery (и некоторыми из его второстепенных плагинов). Код Javascript, который я разрабатывал годами, можно было бы лучше всего описать как... беспорядочный. Тут и там использовалось множество глобальных переменных и функций, не использовались ни стандартные способы организации кода, ни вообще какие-либо шаблоны проектирования.

В настоящее время я создаю новую версию веб-сайта и завершил работу с серверной частью с помощью PEAR::MDB2. и шаблоны Smarty. Остальное — это просто доморощенный PHP с некоторыми классами.

Сейчас я нахожусь на том этапе, когда добавлю слой Javascript поверх веб-сайта, чтобы улучшить удобство использования некоторых функций. (убедившись, что все деградирует изящно) Я хочу писать лучше, чище, более организованный Javascript, чем раньше, поэтому я провел небольшое исследование. Я прочитал Object-Oriented Javascript Стефанова, чтобы лучше понять некоторые концепции, о которых я знал лишь приблизительно (прототипы, конструкторы и т. д.). Теперь я застрял на том этапе, когда мне интересно, какие фреймворки Javascript мне следует использовать и как все это организовать.

Проведя исследование, я понял Cappuccino & Objective-J и Sproutcore — это не то, что я искал. Чтобы процитировать Cappucino о странице:

Cappuccino не предназначен для создания веб-сайтов или создания более «динамичных» существующих сайтов. Мы думаем, что эти цели слишком далеки от целей разработки приложений, чтобы их можно было успешно решить с помощью одной структуры. Такие проекты, как Prototype и jQuery, отлично справляются с этими задачами.

Так вот что. Затем я узнал о Coffee Script, который больше похож на "компилятор один к одному". " и не поможет мне с фактической организацией моего кода.

Я также наткнулся на некоторые статьи, которые дают рекомендации:

Я также узнал о Backbone.js, Shoestring, JavaScriptMVC, Google Loader, инструменты jQuery, интерфейс jQuery. Я действительно не знаю, что со всем этим делать... То, что я знаю:

  • Я не хочу тратить слишком много времени на изучение чего-то слишком сложного, я хочу, чтобы все было максимально простым и гибким (поэтому я не использую Symfony на серверной части, например), но чистый и организованный.
  • Я хочу использовать jQuery, вопрос в том, что мне с ним использовать? (это тоже совместимо)

Прямо сейчас я бы использовал jQuery и инструменты jQuery и «организовал» все это в простом литерале пространства имен/объекта с простыми свойствами и методами, а также, поскольку сайт локализован, я просто планирую использовать простой vsprintf (как я делаю на бэкэнде) с парами ключ:значение, загруженными из литерала объекта, предоставленного бэкендом. JavaScriptMVC кажется интересным, но я боюсь, что это слишком усложнит проект небольшого размера. Вот где мне нужен ваш совет! Заранее большое спасибо.


person Mathieu M-Gosselin    schedule 02.06.2011    source источник
comment
+1 за исследование перед тем, как задать вопрос...   -  person Felix Kling    schedule 02.06.2011
comment
Я согласен, что если вы не будете осторожны с jQuery, вы получите беспорядочный скрипт на стороне клиента. Я сталкивался с этим раньше, когда впервые попробовал jQuery в реальном проекте.   -  person OnesimusUnbound    schedule 02.06.2011
comment
Я большой пользователь jQuery. Однако держитесь подальше от инструментов jQuery Flowplayer, если вам действительно нужен организованный и логичный код. Он сильно устарел (умер?), полон ошибок, практически не поддерживается собственным сообществом и получил слоган jQuery: пиши меньше, делай больше полностью наоборот. Инструменты jQuery противоречат всему, что вы должны знать о jQuery и о том, как должны работать хорошие плагины jQuery ... все, конечно, ИМХО.   -  person Sparky    schedule 02.06.2011
comment
В части сложности есть приятный парадокс. Я использую symfony уже два года, и это значительно облегчило мне жизнь. Вы правы в том, что в него нужно инвестировать, но я также обнаружил, что, поскольку он имеет умный способ решения общих проблем (предлагая то, что вы хотите: простой, чистый, организованный и гибкий), «настоящий» код становится намного проще. (например, ваше приложение простое, а фреймворк сложный - это правда).   -  person Arend    schedule 02.06.2011
comment
Кстати, я не использую jQueryUI, но эта статья подчеркивает присущий дизайн проблемы с инструментами jQuery при сравнении двух.   -  person Sparky    schedule 02.06.2011


Ответы (4)


Хорошо, моя попытка ответить:

Не существует «лучшего» способа сделать это. Теперь вы знаете, что там есть, и я думаю, что у вас может быть предпочтение для себя в отношении того, что вы хотите. В этом случае выберите фреймворк и изучите его изнутри. (извините, что разорвал ваш пузырь, но у каждого фреймворка есть кривая обучения, некоторые крутые, некоторые очень простые, но, в конце концов, чтобы использовать его правильно, вы должны инвестировать в него. Просто сделайте это, вы не пожалеете).

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

Есть несколько хороших лекций и руководств с советами о том, как структурировать код в jQuery:

Некоторые руководства по стилю:

Инструменты для проверки кода

Стандартные работы (javascript)

Там может быть больше ... возможно, больше людей могут внести свой вклад, но я также думаю, что вы почти достигли конца того, что вы можете узнать, прежде чем пачкать руки. Многие из этих руководств написаны очень общим языком, но интересно то, что javascript вызывается во многих конкретных ситуациях. Возможно, было бы полезно просто опубликовать часть кода, который вы считаете «грязным», и мы поможем вам понять, как сделать это лучше. Удачи!

person Arend    schedule 04.06.2011

Вам следует посмотреть видео и прочитать ссылки в этой статье, а затем снова задать себе вопрос если jquery - правильный инструмент. Может быть, вы будете использовать dojo, который намного лучше подходит для больших проектов, или вы посмотрите на магистраль и где вы можете остаться с jquery. В конце концов, оба они больше похожи на javascript, чем что-то вроде sproutcore, cappuciono или даже GWT. А также гораздо проще понять, когда вы пришли из jquery.

person Andreas Köberle    schedule 02.06.2011

Одним из фреймворков, которые стоит рассмотреть, безусловно, является ReactJS от Facebook. Этот фреймворк довольно удобен во многих отношениях.

Первое, что вам нужно знать, это то, что это фреймворк представления. Его можно использовать на стороне сервера для предварительного рендеринга страниц, но он действительно хорош на стороне клиента. Поскольку это фреймворк представления, его можно использовать с магистралью или любой другой фреймворком "back-front" end.

Одним из главных достоинств React является его скорость. Он хранит виртуальный DOM в памяти и виртуализирует все события веб-страниц. Таким образом, виртуальные события используются для того, чтобы события не зависели от браузера.

Виртуальный DOM делает программирование динамического сайта таким же, как если бы вы программировали старый статический веб-сайт. Вы можете просто записать весь HTML-код для рендеринга в механизм просмотра (как если бы вы «перерисовывали» всю страницу), и он будет управлять операциями DOM. Он различает новую виртуальную DOM и текущую виртуальную DOM и вставляет только те узлы, которые необходимо вставить. Таким образом, вы уменьшаете количество операций DOM и, таким образом, значительно увеличиваете скорость рендеринга.

Хорошим местом для начала является это руководство, в котором показано, как использовать "Flux" (приложение веб-поток, разработанный Facebook для своего сайта) для реализации приложения Todo!

person Hugo Dozois    schedule 04.07.2014

Будете ли вы создавать сайт, который будет активно использовать AJAX? Затем вы можете использовать Backbone.js для организации JS на стороне клиента.

Прочитайте эту статью для справки: http://www.codethinked.com/building-epic-win-with-backbone-js

person OnesimusUnbound    schedule 02.06.2011
comment
Он будет использовать AJAX, но далеко не сильно. Я прочитаю эту статью! Спасибо. - person Mathieu M-Gosselin; 02.06.2011