Хорошо, просто назови меня хранителем склепа на всех некро, которые я делаю, но я никогда не чувствовал, что истинная ценность этого была правильно понята. Исторически сложилось так, что «ненавязчивый JavaScript» или сохранение вашего JS вне HTML с помощью встроенных атрибутов обработчика событий HTML и тегов сценариев, которые не связываются с файлом в максимально возможной степени, является огромным ключевым элементом:
- Проблемы доступности
- SEO
- И прогрессивное улучшение
ВРАНЬЕ! (ну, теперь они будут)
Дело в том, что вы могли бы сделать технически навязчивый JavaScript и все же выполнить три вышеуказанных пункта. Если вы не создавали HTML-контент динамически, что было большим SEO нет-нет в день.
Но остановись и подумай ... о себе!
Действительно, большая выгода, главная и самая недооцененная победа в поддержании разделения всегда была прямой выгодой, которую разработчик получает от этого. В одном и том же элементе html для одного и того же события вы можете иметь столько обработчиков событий, сколько вам удобно. Это означает, что если тег class="some_class"
всегда имеет определенное поведение, но также получает некоторое бонусное поведение, когда он находится внутри id="bonus_behavior"
элемента div, нам не нужно начинать возиться с логикой в нашем обработчике событий с одним разрешением, чтобы перейти к нему. Мы можем просто добавлять или не добавлять обработчики в зависимости от контекста.
Легко читать
Еще одно преимущество - удобочитаемость. Это было более серьезной проблемой, когда инструменты браузера состояли из эксклюзивного сообщения об ошибке IE, сообщающего вам, что с ним что-то не так, [object]
но с IMO это все еще имеет большое значение. CSS здесь, JS там и HTML это место, где встречаются и они, и сервер. Поскольку все эти вещи объединяются в одном месте, имеет смысл полагаться на хуки (идентификаторы, классы и иерархию) для создания уровня абстракции, который все использует для подключения к HTML.
ИМО, чем больше вы МОЖЕТЕ держать свои HTML, CSS и JS разделенными, тем легче будет не только читать, но и изменять и понимать, что происходит. Я вижу пустой div с «dynamic_combo_box» как класс, и у меня есть хорошая идея, что что-то делает необычный выбор, который загружает данные динамически. У меня есть подсказка, как найти это в JS и CSS, и если я столкнусь с классом по этим вопросам, у меня будет хорошее представление о том, что это такое и как найти его в HTML.
Слишком легко сделать даже неряшливый
И, конечно, разборчивость имеет тенденцию идти рука об руку с ремонтопригодностью. Когда вы просто делаете что-то напрямую, выкидывая все это в теги сценария, где находится соответствующий HTML, зачастую людям становится проще просто вырезать и вставить этот сценарий в HTML другой страницы, над которой они работают, когда им нужна похожая функциональность, а это означает, что теперь у вас есть одна вещь, которая, скорее всего, в конечном итоге станет двумя раздражающе похожими, но не на 100% похожими вещами, поведение которых со временем может стать проблематичным из-за игнорирования ожиданий и требует добавления более бессмысленных ветвлений для обработки исключений, которые необходимы другой не сделал.
Так что фальсификация поведения для этих хуков HTML поощряет повторное использование кода разумным способом. Если вам нужно разветвлять поведение для альтернативной реализации, вы просто переходите к той же функции и обрабатываете ее там с помощью иерархии HTML или, возможно, с помощью data-att, запускающего некоторое alt-поведение. Это одна остановка покупок для любого, кто хочет понять, как работают элементы пользовательского интерфейса определенного типа, и эти ужасно ленивые в стиле вырезки и вставки будут делать правильные / более удобные для обслуживания вещи только потому, что это самая простая вещь сделайте это сейчас, и это лучший способ обеспечить ремонтопригодность. Сделайте это самым легким делом даже для тех, кому все равно, из-за паники или апатии.
Но как насчет 2014?
Это может быть законным аргументом, что в современных одностраничных приложениях некоторые из этих мерзких вещей, возможно, не следует застревать так догматично, как они были, но поверьте мне, когда я говорю, что я не думаю, что я единственный, кто был продан на нем, потому что это в конечном итоге делает работу проще. Я ленивый (я надеюсь) в основном - хороший способ. Мне нравится, когда мне нужно всего лишь изменить вещи в одном месте, чтобы получить изменения во всем приложении, когда мне нужно только посмотреть в одном месте, чтобы выяснить, в чем заключается ошибка, и когда мне легко понять, что это за хрень и как лучше использовать этот код, чтобы сделать что-то очень похожее.
Это хорошо, как разделение БД или уровня данных - это хорошо. В конечном итоге это экономит время, почему я просто не делаю, например, что вы потратили все пять минут на стирку прошлой ночью, вместо того, чтобы тратить 10 минут на жевание ваших боксеров и проводить проверку параноидального запаха на следующее утро.
Для меня это именно те корыстные мотивы, которые всегда были главной причиной того, почему я держусь не просто за ненавязчивый JS, а за то, чтобы разделить интересы стиля / поведения / контента настолько, насколько это возможно, даже если WHAT-freaking-WG делает все возможное, чтобы запутать эти проблемы по понятным удивительным и прохладным / удобным способом.
Теперь, когда все делают SPA, и это почти глупо, чтобы убедить бизнес, что мы должны заботиться о людях, которые работают без JS (доступность теперь может быть, предположительно, обработана сгенерированным JS контентом), кажется, что следующее поколение разработчиков JS меньше заботится об этом, но IMO, там все еще есть победа, и это в основном для вас, разработчика, пишущего и поддерживающего этот материал. И действительно, эта победа всегда должна была быть наиболее подчеркнутой, но никогда не была по какой-то причине, потому что она в конечном итоге приносит пользу вам и продукту благодаря счастливой случайности благодаря простоте настройки / модификации / отладки.
Это всегда хорошо?
Ну да, наверное. В одноразовом одноразовом приложении для конкурса или чего-то еще. Но я все равно буду делать это только потому, что у меня есть привычка, и на самом деле это не сложнее.