← Все релизы EN  RU

Контроль изменений — пятница 11 сентября

v2.6.0

Скачать все изменения (CSV)

Что нужно решить на созвоне — один пункт, не технический
Одна настройка поиска едет невыставленной уже второй релиз не блокируетпокупателю не видно

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

РешениеПятницу это не держит. Но защиты, ради которой это писалось, нет, пока настройка не выставлена, и это второй релиз, который она едет впустую.

Страница запчасти на телефоне — шестнадцать изменений, покупатель, измеримо
Главная фотография весит вчетверо меньше front#4471front#4497

Самое тяжёлое, что телефон скачивает на странице запчасти, — фотография сверху. Теперь она приезжает в современном формате на 18–22 килобайта вместо 69–79, а каждая фотография в карточке просит тот размер, которым её реально рисуют, а не полноэкранный.

До и послеЗамерено и на тестовом стенде, и на живом магазине.

Модуль входа не грузится для посетителя, который не вошёл front#4450front#4433

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

Вес, нужный только после нажатия, уходит с первого экрана front#4417front#4474front#4413front#4436front#4431

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

Телефон перестаёт скачивать настольный магазин front#4398front#4384front#4388

Полка корзины и большое поле поиска — мебель для настольного экрана, а телефон скачивал и то и другое, чтобы затем спрятать. На телефон они больше не едут вовсе. Страница запчасти стартует с 16 кусков кода вместо 21, неиспользуемое оформление удалено, страница схем везёт меньше.

ЗачемВсё, что телефон скачивает до того, как сможет нарисовать, — это время, которое покупатель смотрит в пустоту.

Сбор ошибок и аналитика ждут, пока посетитель что-то сделает front#4396

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

Что не теряетсяОшибка по-прежнему приходит, заказ по-прежнему считается. Они просто перестают занимать первую секунду.

Обложка бренда и проверка адреса перестают стоить как раньше front#4405front#4382

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

Бренды открываются и закрываются сами — покупатель и Google
Бренд открывается Google по мере готовности собственных запчастей front#4416search#1119

До сих пор бренд открывали Google руками. Теперь он открывается, когда его запчасти сами проходят проверку качества, и каждая строка листинга и страница запчасти несёт этот вердикт с собой, так что магазину и Google говорится одно и то же в один момент.

Бренд, которому нечего продать, исчезает, а не висит серым front#4403

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

Доступность читается живой — покупатель
Можно ли купить запчасть, читается из базы, а не из ночной копии front#4389

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

Правки каталога и доступности — покупатель
Каждая кнопка «в корзину» говорит программе чтения с экрана то же, что видно глазом front#4469

Видимая надпись на кнопке и то, что произносит программа чтения с экрана, могли расходиться. Теперь совпадают на каждой кнопке «в корзину» и в каждой карточке. Такое незаметно, пока кто-то со вспомогательной технологией не окажется не в состоянии у нас купить.

Адрес просмотра, который отдавал пустую страницу, теперь перенаправляет front#4386

Одна форма адреса каталога отдавала пустую страницу вместо того, чтобы отправить посетителя на существующую.

Новые адреса запчастей, собраны и в кандидате включены — двадцать одно изменение, в кандидате включены

Каждая страница запчасти переедет с нынешнего адреса на тот, где назван бренд, а каждая страница-подборка — бренд, категория, тип техники — станет собственным адресом. Всё это собрано и проверено на тестовом сайте. По плану оно должно было ехать выключенным и включиться 25 сентября вместе с подборками, под которые у Алекса есть данные, отдельным релизом со своей страницей. В сегодняшнем кандидате оно включено, и что с этим делать — первый пункт вверху этой страницы.

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

Страница запчасти живёт по бренду и номеру front#4440front#4449front#4453front#4466

Сегодня страница запчасти отвечает по адресу с дилерским кодом на конце, например /parts/100016-nhl. Теперь она отвечает по /parts/new-holland/100016 — бренд, который покупатель узнаёт, и номер, напечатанный на детали. Внутреннего в адресе больше нет.

ЗачемАдрес — первое, что читает Google, и то, что покупатель вставляет в письмо. Код, который за пределами дилерства никто не узнаёт, не приносит ничего и ничего не объясняет.

До — живой магазинПосле — кандидат
Новый адрес запчасти на живом магазине: не найдено Тот же адрес на кандидате: страница запчасти
Один и тот же адрес /parts/new-holland/100016 с обеих сторон. Сегодня это страница «не найдено», на кандидате — сама запчасть.
У каждой запчасти одно написание собственного имени, и только одно migrations#78search#1128search#1133front#4499front#4508

Адресу нужна такая запись номера детали, которая безопасна в ссылке: нижний регистр, без косых черт и пробелов. Мы держим реестр этих написаний, чтобы у детали не появилось двух адресов, а деталь, которой в реестре нет, всё равно находится — написание вычисляется на месте.

Два бренда писали собственное имя одним способом на страницах схем и другим на страницах запчастей. Для нас это один бренд, для Google — два; теперь написание одно везде.

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

Бренд, категория и тип техники становятся страницей, а не фильтром front#4454front#4500front#4506search#1126migrations#79migrations#82

До сих пор «подшипники New Holland» существовали только как галочки на сетке каталога, по адресу, который Google велено не замечать. Теперь это собственная страница /parts/new-holland-bearings со своим заголовком, крошками, описанием и разметкой для Google, а чипы снимают фильтр, а не сбрасывают страницу.

ЗачемИменно эти страницы покупатель и ищет. Фильтр ранжироваться не может, страница может.

До — живой магазинПосле — кандидат
Адрес бренда на живом магазине: не найдено Тот же адрес на кандидате: страница бренда New Holland
/parts/new-holland. У бренда не было собственной страницы; теперь есть, а сверху — остальные бренды.
До — живой магазинПосле — кандидат
Адрес бренда с категорией на живом магазине: не найдено Тот же адрес на кандидате: подшипники New Holland, 23 428 запчастей
/parts/new-holland-bearings. Бренд, скрещённый с категорией, был парой галочек; теперь это страница со своим заголовком, крошками и 23 428 запчастями.
Каждая старая ссылка работает, одним перенаправлением и без цепочки front#4452front#4488

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

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

Что Google можно индексировать, а что нельзя front#4448front#4494front#4457front#4463front#4455

Один список теперь решает, какие параметры адреса (номер страницы, текст поиска, сортировка) Google вправе считать страницей, и файл robots следует этому же списку. Вторая страница списка остаётся открытой для Google и перестаёт выдавать себя за первую. Страницы схем остаются для покупателей, но помечены как не для индексации, потому что показывают те же детали, что и страницы запчастей.

Перегруженная страница теперь отвечает честно, а не отдаёт поломанную страницу, которую Google записывает как поломку.

Google получает новые адреса, а не старые front#4458

Карта сайта и товарный фид Google несут новые адреса, а фид берёт категорию каждой позиции со страницы, которой она принадлежит, а не угадывает её.

Проверки читают формат адреса, а не его копию front#4443front#4441front#4460front#4461front#4462front#4464

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

Хозяйственное — машины, данные и проверки; покупателю не видно
Проверки кода перестали конкурировать с живым магазином front#4446front#4445front#4444

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

ЕщёПолная проверка изменения занимает 15,7 минуты вместо 24,5.

Сервисы заказов и оплаты ps#790ps#792ps#793ps#794

Четыре изменения, ни одного видимого покупателю: сервис оплаты в разработке теперь ходит в доставку и поиск разработки, а не тянется в живые, остальное — рецепт запуска этих сервисов на нашей собственной машине.

Своя машина для выкладки, чтобы тестовая сборка не зависела от внешнего сервиса ps#792ps#794search#1131search#1132search#1134

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

Тестовый заказ оттуда до дилерской системы не доходит — эта связь намеренно заглушка.

ОткрытоПоловина с кодом. Ваша же таблица говорит держать код на GitHub; машина может держать его тоже. Нужен один ответ: своя копия как основной дом для кода или только зеркало.

Каждая база на этой машине каждую ночь копируется в облако Google

Умершая машина больше не значит потерянную машину. Это было условием, чтобы вообще класть на неё настоящую работу.

К проверкам кода добавилась вторая машина, и они перестали конкурировать с живым магазином front#4444front#4445front#4446front#4496

Проверки шли на одной офисной машине, которая одновременно продакшен-инфраструктура, и давали на живую базу кратно нормальную нагрузку, пока на сайте были покупатели. Mac Studio теперь берёт работу из той же очереди, обе машины отвечают на любую свободную задачу, а маленькая контрольная задача доказывает, что вторая машина действительно берёт работу, а не считается берущей.

ИтогПолная проверка изменения занимает 15,7 минуты вместо 24,5, а настоящее решение — копия базы на нашей машине, чтобы проверки не трогали живую, — строится сейчас.

Остальные проверки кода и что они стоят front#4387front#4480front#4493search#1130migrations#80front#4476

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

Одна правка, которую стоит назватьПроверка утверждала, что сломанная страница бренда остаётся сломанной. Теперь она на этом падает.

Данные каталога и сигнал поставщика migrations#73migrations#83migrations#84migrations#66search#1115

Сторона Алекса в этом релизе. Совмещённая пересборка группировки поставщиков, кодов реестра и ранга, которым сортируется выдача поиска. Поставщик, у которого фид падает, теперь отличается от поставщика, у которого фида не было никогда, — это две разные беды, читавшиеся одинаково. Планка складского количества сошлась с ночным обходом, который обязан ей соответствовать. Учётные записи базы создаются файлом в репозитории, а не руками.

ЕщёТри соблазнительных послабления в проверке номера детали посчитаны и письменно отклонены, чтобы никто не открывал их заново по памяти.

Уборка в сборке и настройках front#4394front#4400front#4442

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

Если что-то пойдёт не так — путь назад, решённый до выхода

Поиск: работающая сегодня версия закреплена по имени и держит весь трафик; вернуть — это перевести трафик на неё, около минуты.

Сайт магазина: предыдущий продакшен-релиз в одном клике в панели хостинга.

Сервисы заказов и оплаты: работающие сегодня образы этот релиз не меняет, кроме четырёх пунктов выше.