Статьи

Пишите лучшую разметку с помощью HTML Inspector

Мы часто видим довольно много дискуссий о методах оптимизации для различных областей разработки интерфейса. Одна из областей, которая, вероятно, больше игнорируется, чем HTML.

Я, конечно, не член лагеря «чистой, не презентационной разметки». Но я думаю, что необходима последовательность в разметке, особенно при работе с кодом, к которому многие разработчики будут обращаться.

В этой статье я расскажу об одном небольшом инструменте, который я недавно посетил и который, я думаю, многим командам разработчиков было бы неплохо рассмотреть возможность использования: HTML Inspector от Philip Walton.

Что такое HTML инспектор?

Как объясняет Филипп в README репо, это:

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

Хотя я несколько не согласен с утверждением Филиппа о том, что валидатор W3C является «бескомпромиссно строгим» (разве он не помнит XHTML?), Я, безусловно, согласен с тем, что многим командам разработчиков, скорее всего, не хватает набора логических внутренних стандартов, чтобы поддерживать их разметку обслуживаемой и своевременно.

После запуска HTML-инспектора вы получите ряд сообщений в консоли инструментов разработчика вашего браузера, в которых вы узнаете, какие проблемы в HTML-коде следует рассмотреть.

Предупреждения консоли HTML Inspector

Вы можете увидеть пример вывода HTML Inspector на изображении выше, который взят из теста, который я провел на одном из моих старых проектов , который, как я знал, вероятно, будет иметь некоторую сомнительную разметку.

Установить и запустить HTML Inspector

Если вы проводите тестирование на своем непроизводственном коде, вы можете просто включить скрипт HTML Inspector на любой из ваших страниц внизу, а затем запустить его, вызвав основной метод. Ниже приведено краткое описание методов установки, а затем я объясню еще лучший способ заставить его работать на любом веб-сайте, удаленном или локальном.

Для установки и использования через командную строку вы можете использовать NPM, для чего требуется PhantomJS :

npm install -g html-inspector 

Или вы можете установить с Bower для использования в браузере:

 bower install html-inspector 

Если вы решите загрузить инструмент вручную, все, что вам нужно сделать, это получить копию html-inspector.js из корневого каталога проекта, включая ее в нижней части документа после загрузки всех других сценариев. Затем вам нужно выполнить его, как показано ниже:

 <script src="js/html-inspector.js"></script> <script> HTMLInspector.inspect(); </script> 

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

Откройте консоль инструментов разработчика вашего браузера и выполните следующие команды:

 var htmlInsp = document.createElement('script'); htmlInsp.src = '//cdnjs.cloudflare.com/ajax/libs/html-inspector/0.8.1/html-inspector.js'; document.body.appendChild(htmlInsp); 

После того, как они выполнены, вы можете запустить следующее в консоли:

 HTMLInspector.inspect(); 

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

Этот скрипт использует код HTML Inspector, размещенный на cdnjs .

На самом деле, я сделаю это еще проще для вас; Вы можете создать букмарклет с кодом в этом Gist . Как только вы добавите букмарклет на панель закладок, запустите его на любом веб-сайте, откройте консоль и запустите HTMLInspector.inspect() .

Попробуйте его в действительно старом проекте или почти на любом сайте WordPress, если вы хотите увидеть предупреждения, которые он выдает по умолчанию.

Конечно, если вы решите настроить HTML Inspector, вам нужно скачать его и запустить собственную настроенную версию. Поэтому, как только у вас есть готовая версия, вы можете сделать то же, что я описал выше, но с измененным исходным URL.

Инспектор HTML: Великие Части

Вот некоторые из замечательных вещей об этом инструменте:

  • Это единственный в своем роде; Я не видел ни одного еще работающего инструмента, сравнимого с точки зрения HTML-линтинга. (Если вы знаете один, дайте мне знать в комментариях!)
  • Как и другие подобные инструменты для CSS и JavaScript, вы можете настроить его так, чтобы он предупреждал вас только о тех правилах, которые вам нравятся.
  • Вы можете написать свои собственные правила, что, вероятно, является лучшей из всех возможностей.
  • Никаких зависимостей (обратите внимание, что в оригинальном сообщении блога говорится, что он требует jQuery, но это было исправлено примерно через неделю).
  • Он работает на реальном DOM в браузере, а не только на исходном статическом HTML. Это здорово, потому что позволяет вам тестировать разметку, которая динамически добавляется и изменяется другими скриптами на странице.

Отличный инструмент для команд разработчиков

Как объясняет Филипп в вышеупомянутом посте по запуску, большое преимущество использования HTML Inspector предоставляется командам, в которых может быть несколько разработчиков, которые присоединяются на короткий промежуток времени (например, стажеры и новые сотрудники).

Итак, представьте себе нового, менее опытного разработчика, работающего над вашими проектами в течение трех месяцев, в качестве летнего стажера или еще чего-нибудь. Обычно этому сотруднику может потребоваться целых три месяца, чтобы привыкнуть к написанию кода. Но с HTML Inspector все, что вам нужно сделать, — это настроить ваши собственные правила. Затем новому разработчику просто нужно запустить HTML Inspector с вашими пользовательскими правилами, затем прочитать предупреждения в консоли и внести необходимые изменения в его код.

Изменение настроек по умолчанию

Существует два способа настройки HTML Inspector: изменение значений по умолчанию в настройках конфигурации или (как уже упоминалось) написание собственных правил. Давайте сначала посмотрим на настройки по умолчанию.

Запуск HTMLInspector.inspect() с настройкой по умолчанию HTMLInspector.inspect() инструмент со значениями по умолчанию. Метод inspect() принимает необязательный объект config для их изменения. Вы можете переопределить значения, выполнив что-то вроде этого:

 HTMLInspector.inspect({ domRoot: "main", excludeRules: ["validate-elements", "validate-attributes"], excludeElements: ["svg", "span", "input"], onComplete: function(errors) { errors.forEach(function(error) { console.warn(error.message, error.context) } } }); 

Здесь я решил не проверять элементы или атрибуты и сказал инструменту исключить некоторые элементы из проверки.

Для получения полной информации об изменении этих значений по умолчанию ознакомьтесь с соответствующими разделами в файле README на репозитории GitHub:

Написание пользовательских правил

Как уже упоминалось, вы можете не согласиться с предупреждениями инспектора HTML по умолчанию. Если это так, или если вы хотите добавить к ним, самая мощная часть инструмента является возможность писать свои собственные правила.

Вы можете сделать это, используя следующую структуру:

 HTMLInspector.rules.add(name, [config], func) 

В README приведен пример команды разработчиков, которые ранее использовали два конкретных пространства имен атрибута data-* , которые теперь внутренне устарели в пользу другого метода. Вот как будет выглядеть код:

 HTMLInspector.rules.add( "deprecated-data-prefixes", { deprecated: ["foo", "bar"] }, function(listener, reporter, config) { // register a handler for the `attribute` event listener.on('attribute', function(name, value, element) { var prefix = /data-([az]+)/.test(name) && RegExp.$1 // return if there's no data prefix if (!prefix) return // loop through each of the deprecated names from the // config array and compare them to the prefix. // Warn if they're the same config.deprecated.forEach(function(item) { if (item === prefix) { reporter.warn( "deprecated-data-prefixes", "The 'data-" + item + "' prefix is deprecated.", element ) } }) } ) }); 

(Обратите внимание, что Филипп сумасшедший и поэтому не использует точки с запятой в конце строк!)

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

Вывод

Как и во многих инструментах разработчика, для работы HTML Inspector вам потребуется современный браузер (например, браузер должен поддерживать методы ES5, CSSOM и console.warn() ).

Как уже упоминалось, я не видел слишком много подобных инструментов (кроме обычного валидатора). Был общий инструмент HTML Lint, который, похоже, исчез. Но, кроме этого, я не могу вспомнить другой инструмент, подобный этому, и, конечно, не такой, который бы настраивался и работал на живом DOM.

Если вы опробовали HTML Inspector или знаете другой подобный инструмент, сообщите нам об этом в обсуждении.