Это просто превью, не высматривайте тут интересного)
Это просто превью, не высматривайте тут интересного)

Chrome Devtools, безусловно, мощнейший инструмент для разработки, дебага, профайлинга и тестирования в браузере. С каждым релизом в него завозят всё новые и новые фичи. И время от времени на хабре выходят посты типа "10 крутых фишек Devtools". Но факт - то ли копирайтовый мир победил, то ли это не слишком интересная тема, но в большинстве случаев авторы описывают одни и те же возможности, которые существуют уже года 4. Мне кажется только ленивый сейчас не знает о console.time, о манипуляциях с анимациями, и о том что ветки DOM-дерева можно drag&drop-ать, и т. д.

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

Переопределение const

Те кто любят экспериментировать (или просто тестить всякую ерунду) в консоли devtools, наверняка сталкивались с проблемой - накидываешь код который использует const, тестишь - что-то не то. Правишь, enter - а const уже был определён, ошибка. Приходится перезагружать страницу, неудобно. Поэтому в последнем релизе в devtools отключили запрет на переопределение констант. Точнее - const работают как и прежде, но только в рамках одной REPL. Думаю, со скрином будет понятнее

Если запускаешь код в пределах одной команды - принцип работы const не изменился
Если запускаешь код в пределах одной команды - принцип работы const не изменился

Grid - редактор

При работе с гридами, на элементе с display: grid; появляется бейджик, с надписью grid. Кликаем по нему - видим визуализацию нашей грид-разметки, её рамки, размеры, и т. д. Очень облегчает понимание происходящего.

Для Flexbox-ов есть точно такая же фича
Для Flexbox-ов есть точно такая же фича

Скриншот DOM-узла

Когда я узнал о этой фишке - первой моей мыслью было "чёрт, как я жил без этого раньше?!". Всё элементарно - devtools позволяет сделать скриншот отдельно взятого DOM элемента. Фантастически удобно, когда надо сделать скрин какой-то определённой части сайта - например, сайдбара.

ПКМ, Capture node screenshot
ПКМ, Capture node screenshot
Пример результата
Пример результата

Удобное копирование CSS свойств

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

Неудобно
Неудобно

Оказывается - всё давно уже придумано, достаточно в контекстном меню выбрать Copy all declarations!

Намного удобнее
Намного удобнее

Просмотр стейта JS кода без console.log-ов

Многие (я в том числе) дебажат js посредством вызовов console.log в нужных местах. При этом я слышал что есть какой-то debugger, и даже ставил его ради интереса - но изначально особо смысла не уловил. Оказывается же, это мощнейшая фича, которая позволяет смотреть состояние всех переменных в реальном времени. Покажу на примере

ключевое слово - debugger
ключевое слово - debugger

Теперь, при выполнении этого кода, когда интерпретатор дойдёт до debugger - выполнение остановится и автоматически откроется devtools с участком кода где произошла остановка. А справа, во вкладке scope, мы можем видеть все переменные в области видимости где установлен debugger, причём со всеми значениями.

x, i - обе переменные видны
x, i - обе переменные видны

Манипуляции с юзер-агентом

Когда-то мне было нужно изменять юзер-агент для тестирования, тогда я ставил какое-то стороннее расширение на хром. Сейчас же всё можно делать не выходя из дому из девтулзов.

Снизу нажимаем троеточие, там выбираем network conditions - тогда появится такой таб
Снизу нажимаем троеточие, там выбираем network conditions - тогда появится такой таб

Брекпоинты по изменению DOM-дерева

Совершенно лютая вещь, как по мне. Особенно когда надо найти что-то в диком легаси коде, где какая-то jQuery лапша что-то там меняет на фронте.

Теперь если какой-то код сделает изменения в любом элементе дерева - произойдёт эффект аналогичный с вызовом debugger. Точнее - остановка выполнения, и демонстрация участка кода который затриггерил дебаггер.

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

Эмуляция сенсорных касаний

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

Выбираем Force enabled, и перезагружаем страницу
Выбираем Force enabled, и перезагружаем страницу

Группировка CSS свойств

Надеюсь, вкладка computed ни для кого не секрет. А вот секретом может быть опция group, которая группирует свойства по категориям - внешний вид, разметка, и т. д. Очень удобно, когда свойств дохрена. Хотя если нужно найти определённое, то быстрее всего будет использование фильтра

Слева без group, справа c
Слева без group, справа c

Комментарии (22)


  1. KR1470R
    26.07.2021 15:21
    +7

    Есть ещё интересная фича девтулзов как по мне - изменения скорости интернета для страницы, иногда удобно для того, чтобы протестировать, как поведёт себя страница при той или иной скорости инета, или вообще оффлайн.


    1. vlreshet Автор
      26.07.2021 15:22

      Да, есть такое. Причём кроме сети можно ещё троттлить CPU

      image


    1. jaiprakash
      26.07.2021 17:40

      Только большинство сайтописвтелей принципиально не тестируют их этой фичей(


      1. vlreshet Автор
        26.07.2021 17:47

        Вопрос целесообразности. В одних проектах это оправдано, в других — ради 0.1% аудитории нет смысла тратить время и деньги. Примерно такая же ситуация с поддержкой старых браузеров


  1. Vest
    26.07.2021 17:23

    Мне была полезна мощная штука - content override. Но у неё есть небольшие недостатки, к сожалению, на которые тоже приходилось натыкаться.


  1. den-mesh
    26.07.2021 17:45

    Спасибо. Полезно. С удовольствием положил в закладки :)


  1. Dron007
    27.07.2021 01:02
    +3

    Вот это да, дебаггер :) А также инспектор, watches, stack trace и брейкпоинты. Это же основная часть девконсоли, как это можно не использовать? Вот ещё бы сделали, чтобы можно было игнорировать этот debugger без изменения кода, когда он уже не нужен и надо продолжить выполнение. А то иногда так застревает в нём, что приходится вкладку убивать. Да и вообще хорошо бы менять код на лету. Я знаю, что там можно сделать локальную копию и редактировать код прямо во вкладке Sources, но оно всё как-то странно работает.

    Подменять агента хорошо, но почему бы не сделать просто нормальный сниффер с возможностью замены запросов/ответов от веб-сервера? Типа как в Fiddler, который не всегда работает. Даже среди расширений ничего нормального не нашёл. Что ещё много лет не могут сделать, это нормальную работу с обфусцированным кодом. Форматируешь его и брейкпоинты после этого как правило уже не срабатывают.


    1. Fodin
      08.08.2021 14:19

      Так сделали же. Правой кнопкой на номере строки, там, где ставится брейкпойнт и пункт "Never pause here".


      1. Dron007
        09.08.2021 01:23

        О, класс! А я и прозевал нововведение. Теперь буду чаще использовать эту штуку.


    1. Exxcel
      09.08.2021 12:12

      Возможность игнорировать debugger тоже уже есть :) Либо кнопка на скрине, либо ctrl+f8 или то, что надо жмакать в вашей операционке.


  1. OlegPatron92
    27.07.2021 01:47
    -1

    Кстати, во Vue, например, debugger вызвет ошибку.


    1. NerVik
      27.07.2021 07:02

      Дебажу вью дебаггером, никаких проблем не наблюдаю.


    1. DreamShaded
      04.08.2021 11:04

      Может, вы про ругань линтера? Там всё замечательно дебажится, дебаггер вообще не про фреймворк, он работает везде


    1. evgeniyPP
      06.08.2021 22:30

      Добавьте в настройки ESLint в раздел "overrides" -> "rules": "no-debugger": "warn"


      1. OlegPatron92
        06.08.2021 22:34

        Спасибо.


        1. evgeniyPP
          06.08.2021 23:38

          Если точнее, то что-то типа:

          "overrides": [
            {
              "files": [
                "*.js"
              ],
              "rules": {
                "no-debugger": "warn"
              }
            }
          ]


  1. 3vi1_0n3
    27.07.2021 11:11

    Еще есть блокировка запросов с использованием регэкспов на урлы.


    1. vlreshet Автор
      27.07.2021 11:31

      Полноценных рэгэкспов, не просто wildcards? А как?


      1. 3vi1_0n3
        27.07.2021 11:34
        +1

        Да, я наврал, просто wildcards, думал в это время о своём. Вы правы. Я как раз думал, что плохо, что не по регэкспам.


  1. AdvTechnoKing
    28.07.2021 12:12

    И всё равно до Firefox Devtools ему по прежнему далеко))

    Вы не сможете в хроме адекватно найти слушатель у элемента без использования консоли, когда в лисе все перед глазами)


    1. vlreshet Автор
      28.07.2021 12:13
      +2

      Может, конечно, дело вкуса, но ни разу ещё не встречал человека предпочитающего девтулз фаерфокса


  1. Kuch
    02.08.2021 14:49

    Вот ссылка на получасовой доклад, где раскрыто множество dev tools фишек: https://youtu.be/zzkX1LQPddk