
Вам сообщают, что страница сломана. Вы просите открыть её в окне в режиме инкогнито. Там она работает. На этом разговор обычно и заканчивается советом очистить кеш, и именно в этот момент информация выбрасывается.
Инкогнито не даёт вам чистый браузер. Оно даёт ваш же браузер с конкретным и довольно коротким списком отключённых вещей, и в этом списке вся ценность проверки. Если вы его знаете, одна фраза от человека превращается в деление пополам, которое можно довести до конца за несколько минут.
Что окно инкогнито меняет на самом деле
Пять отличий, и большинство людей могут назвать только два из них.
Расширения не запускаются. Это главный пункт и тот, о котором все забывают. Документация Chrome по расширениям описывает соответствующий ключ манифеста как способ поведения расширения “if allowed to run in incognito mode”: разрешение выключено, пока кто-нибудь его не включит, для каждого расширения отдельно, через «Подробнее» и затем «Разрешить в режиме инкогнито». Поэтому окно инкогнито почти всегда оказывается ещё и окном без расширений, и именно это смешение делает проверку неоднозначной.
Ни одной куки из вашей обычной сессии. Окно стартует без них и выбрасывает то, что собрало. По словам самого Chrome, оно “temporarily keeps some information, like cookies and site data, to help websites work and support navigation”, и “this information is removed when the Incognito session ends”.
Сторонние куки заблокированы. Отдельно от предыдущего пункта и по умолчанию: “In Incognito mode, third-party cookies are blocked by default.” Этот пункт меняет результат в сторону, противоположную остальным, и на нём стоит задержаться ниже.
Нет кеша и сохранённых данных сайта, которые можно переиспользовать. Ничего из того, что ваш обычный профиль скачал на прошлой неделе, там не лежит и повторно не отдаётся, включая и то, что браузер решил сохранить по своему усмотрению.
Зарегистрированных вами service worker там нет. Service worker принадлежит хранилищу профиля. У сессии инкогнито своё хранилище, и оно пустое, поэтому то, что перехватывает запросы в обычном окне, просто отсутствует.
Важно, в какую сторону проверка не прошла
У одного и того же эксперимента два исхода, и означают они разное. Почти все рассуждают только о первом.
- Работает в инкогнито, сломано в обычном окне
- В деле участвует что-то из профиля этого человека: расширение, устаревший файл из кеша, service worker, отдающий код прошлой недели, или кука с состоянием, которое читает ваше приложение.
- Сломано в инкогнито, работает в обычном окне
- Отсутствует что-то, на что ваша страница опирается: сторонняя кука, выполненный вход, или данные, которые вы считали лежащими в хранилище, потому что на вашей машине они лежали там всегда.
Второй случай обычно отмахиваются фразой про то, что инкогнито ведёт себя странно. Странного тут ничего нет. Для большинства людей это единственный дешёвый способ воспроизвести то, что видит человек при первом визите, и если у него страница ломается, значит она ломается у всех, кто здесь ещё ни разу не был.
Как разделить пять подозреваемых, не гадая
Слабость проверки инкогнито состоит в том, что она меняет пять вещей сразу, поэтому успешный исход говорит вам, что виновата одна из пяти, но не говорит какая. Эти шаги их разделяют, начиная с самого дешёвого.
- Свежий профиль браузера с включёнными расширениями. Вот какой должна была быть проверка инкогнито: новые куки, новый кеш, новое хранилище, но ваши расширения продолжают работать. Если проблема здесь возвращается, дело не в расширении, и вы отбросили самую частую причину примерно за тридцать секунд.
- Жёсткая перезагрузка с открытой панелью сети и галочкой “Disable cache”. Отделяет устаревшие файлы от всего остального. Если это помогает, у вас проблема с кешированием, а браузер этого человека ведёт себя ровно так, как ему велели.
- Очистка данных сайта для этого источника. В панели Application одно действие убирает куки, локальное хранилище и регистрацию service worker. Если проблема исчезает, причина была в состоянии, а не в коде, и следующий вопрос в том, в какой именно его части.
- Отдельная отмена регистрации service worker. Это стоит сделать отдельно от предыдущего пункта, потому что если помогает именно оно, человек выполнял код, который вы давно перестали публиковать, и никакой деплой до него не дойдёт, пока worker не обновится.
Выполненные в таком порядке, эти шаги дают причину, а не корреляцию. Одно только инкогнито даёт фразу, в ответ на которую все кивают.
Чего «работает в инкогнито» не означает
Это не означает, что проблема на машине у человека, и это не означает, что баг не ваш.
Service worker, отдающий устаревший бандл, относится к вашему деплою. Кука, которую ваше приложение записало и потом не смогло прочитать, относится к вашему коду. Расширение, ломающее вашу страницу, как минимум становится вашей проблемой совместимости, если оно есть у многих ваших пользователей. По-настоящему опасным остаётся только то прочтение, которое выбирают чаще всего: что со страницей всё в порядке, а с компьютером человека нет.
В обратную сторону это тоже не переносится. Тот, кто проверяет только в инкогнито, вечно проверяет путь первого визита и никогда не увидит баг, которому для появления нужна недельной давности кука.
Как попросить об этом правильно
Для человека, который сообщает о проблеме, это одна из немногих проверок, которая ничего не стоит и не требует никакой терминологии: откройте приватное окно, зайдите на ту же страницу и скажите, происходит ли там то же самое. Это лучший вопрос из списка, и он достаточно дешёвый, чтобы задать его первым.
Чего он дать не может, так это причины. Ошибка в консоли, неудавшийся запрос и версия скрипта, которая действительно выполнялась, остаются тем, что решает дело, и ничто из этого не переживает закрытия окна.
Session Replay
Бесплатное расширение для Chrome. Один клик на странице, которая ведёт себя неправильно, сохраняет скриншот, консоль и сетевой журнал и выдаёт ссылку, которую можно вставить в тикет.
Одна оговорка про использование любого расширения для этой цели, нашего в том числе: окно инкогнито не запустит его, если оно не было там разрешено, и это ровно то правило, которое и делает проверку полезной.
Коротко
- Инкогнито отключает пять вещей сразу: расширения, существующие куки, сторонние куки, кеш и service worker.
- Сторона, в которую проверка не прошла, подсказывает, какую половину этого списка смотреть.
- Свежий профиль с включёнными расширениями служит следующим шагом, который отделяет самую частую причину от остальных.
- «Работает в инкогнито» начинает диагностику. Если считать это её концом, устаревший service worker спокойно переживёт три деплоя.