Една обява от търг на едро има между двадесет и шестдесет снимки. При милион активни автомобила това са десетки милиони изображения — и за разлика от полетата със спецификации, потребителите наистина ги гледат. Решетка с обяви, в която една трета от миниатюрите са счупени, изглежда като счупен продукт, независимо колко добри са данните отдолу.
Наивният подход е да пазите адреса на снимката от източника заедно с обявата и да оставите браузъра да я изтегли. В разработка работи. Ето защо не оцелява.
Четири причини директните връзки да се провалят
1. Адресите от източника изтичат
Това е фаталната. Платформите за търгове често спират да сервират медия за затворени лотове — понякога до дни, понякога след седмици и рядко с някакво обявление. Активните обяви изглеждат наред. Историческият ви архив тихо гние от най-старата страна и докато някой забележи, месеци галерии са изчезнали без начин да бъдат възстановени.
2. Защита срещу hotlink
Много източници проверяват заглавката Referer или изискват валидна бисквитка на сесия. Начинът, по който това се проваля, е наистина неприятен: снимките се зареждат при вас (наскоро сте посетили източника), не се зареждат при потребителите ви и се държат различно в различните браузъри според политиката за referrer. Изглежда като периодичен бъг и често се диагностицира погрешно със седмици.
3. Размери на файловете за друга употреба
Галериите от източниците са JPEG в пълна резолюция, обикновено по 2–6 MB. Зареждането на решетка с двадесет и четири карти по една миниатюра означава изтегляне на около 60 MB, за да се покаже страница, която се нуждае от около 400 KB снимки. На мобилно устройство това не е бавно — неизползваемо е.
4. Нямате контрол върху наличността
Възприеманата бързина на продукта ви става функция на няколко чужди CDN, с които нямате отношения, нямате SLA и нямате контрол върху кеша. Една бавна сутрин при източник става ваш инцидент.
Какво трябва да прави архивът със снимки
Копирането на снимки е лесната част. Ето свойствата, които определят дали копието си струва разходите за съхранение:
- 1Копирайте при импортиране, не при поискване. Мързеливото копиране означава, че първият потребител, който отвори стар лот, предизвиква изтегляне от адрес, който може вече да не работи. Копирайте при първата поява на обявата, докато източникът още я сервира.
- 2Прекодирайте. WebP с разумно качество обикновено намалява значително размера спрямо оригиналния JPEG без видима разлика в решетката с обяви.
- 3Сервирайте няколко размера. Решетка с миниатюри и галерия на цял екран имат напълно различни изисквания и една снимка за двете хаби или трафик, или детайл.
- 4Стабилни адреси, които надживяват лота. Това е целият смисъл. Ако сервираният адрес се счупи при затварянето на търга, сте изградили скъп кеш, а не архив.
- 5Пазете реда и ролята. Коя снимка е основна, към коя част на автомобила принадлежи всяка, екстериор срещу интериор срещу детайли на щетите. Галериите в произволен ред са осезаемо по-неудобни.
- 6Записвайте размерите. Без ширина и височина в данните всяка снимка предизвиква разместване на страницата при зареждане, което е проблем и за потребителите, и наказание в Core Web Vitals.
curl -s "https://api.thecarapi.com/api/auction-images/encar/38112900" \
-H "X-API-Key: $API_KEY"site/auction_id като детайлите и историята на цените и връщат served_url заедно с реда, секцията и размерите.Ефективно използване на галериите
Два модела, които обясняват по-голямата част от практическата разлика в бързината на страниците.
Не извличайте галерии при търсене
Резултатите от търсенето се нуждаят от по една миниатюра на карта. Пълни галерии за двадесет и четири резултата са голям отговор с данни за снимки, които потребителят почти сигурно никога няма да отвори. Използвайте миниатюрата в картата и извличайте галерията едва когато се отвори изгледът с детайли.
// Карта в търсенето — само миниатюра, от отговора на търсенето
<img
src={listing.thumbnail_url}
alt={`${listing.registration_year} ${listing.clean_make} ${listing.clean_model}`}
width={400}
height={300}
loading="lazy"
/>
// Изглед с детайли — галерията се извлича при отваряне, първата снимка веднага
const images = await fetch(
`${API}/api/auction-images/${site}/${id}`,
{ headers: { 'X-API-Key': key } }
).then(r => r.json());Пишете истински alt текст
Снимките на автомобили имат необичайно предимство тук: разполагате със структурирани данни, които описват точно какво има на снимката. alt="2021 Kia Niro, екстериор отпред в три четвърти" не струва нищо за генериране, наистина помага на потребителите с екранни четци и е едно от малкото места, където достъпността и SEO за снимки сочат точно в една посока. Празни alt атрибути на страница, чието цялото съдържание са автомобили, са пропилян сигнал.
Сметката за съхранението
Струва си да се направи изрично, защото интуицията обикновено греши и в двете посоки.
| Оригинален JPEG | WebP, прекодиран | |
|---|---|---|
| Средна снимка | ~2,5 MB | ~150 KB |
| Една обява (30 снимки) | ~75 MB | ~4,5 MB |
| 1 млн. активни обяви | ~75 TB | ~4,5 TB |
Съхранението на няколко терабайта е евтино. Разходите, които наистина болят, са другаде: трафикът през резидентни проксита за изтегляне на оригиналите и изходящият трафик от CDN за сервирането им след това — който расте с трафика ви, а не с каталога, и затова е сметката, която расте точно когато нещата вървят добре. Разбивката на разходите за скрейпване поставя двата реда в контекст.
Накратко за правата
Снимките в обявите са обекти на авторско право и позицията за повторното им хостване е наистина различна от позицията за извличане на фактически характеристики. Това не е правен съвет и отговорът варира по юрисдикции и по условията, при които работите — но това е реално съображение и една от съществените разлики между самостоятелното събиране на снимки и получаването им от доставчик с търговски отношения с източниците.
За по-пълна картина какво съдържат данните от търговете и как да ги използвате, започнете с ръководството за данни от търгове или вижте ендпойнтите за снимки в справочника.
Често задавани въпроси
Защо снимките от обявите на търгове се чупят след няколко седмици?
Платформите източници често спират да сервират медия за затворени лотове, обикновено до дни или седмици след края на търга. Активните обяви продължават да работят, така че проблемът първоначално е невидим и се проявява като разпадане на историческите галерии от най-старата страна — без начин да възстановите снимки, които не сте копирали, докато източникът още ги е сервирал.
Мога ли просто да слагам директни връзки към снимките от търговете?
Само ако никога не ви се налага да показвате обява след затварянето ѝ. Директните връзки се сблъскват и със защита срещу hotlink, която проверява referrer на заявката — което предизвиква периодични откази, приличащи на бъг в браузъра — и сервират оригинали от по няколко мегабайта на мобилни потребители. За всичко с исторически изглед снимките трябва да се копират при импортиране.
Колко място заемат снимките на автомобили?
Около 4–5 TB за милион обяви с по тридесет снимки след прекодиране в WebP, срещу около 75 TB за оригиналните JPEG. Самото съхранение е евтино; скъпите редове са трафикът за изтегляне на оригиналите през резидентни проксита и изходящият трафик от CDN за сервирането им — последният расте с трафика ви, а не с размера на каталога.
Какво трябва да казва alt текстът на снимка на автомобил?
Опишете автомобила и ракурса: „2021 Kia Niro, екстериор отпред в три четвърти“. Вече имате структурирани данни за марка, модел и година, така че това може да се генерира автоматично. Това е един от малкото случаи, в които изискването за достъпност и възможността за SEO на снимки се покриват от точно един и същ текст.
Трябва ли резултатите от търсенето да включват пълни галерии?
Не. Картите в търсенето се нуждаят от по една миниатюра; връщането на тридесет записа за снимки на резултат умножава размера на отговора с данни, които потребителят почти сигурно никога няма да отвори. Използвайте миниатюрата от търсенето и извличайте галерията при поискване, когато се отвори изгледът с детайли.
- снимки
- CDN
- WebP
- производителност
Един API, много източници на инвентар
Нормализирано търсене, детайли според източника, галерии в CDN, история на цените и достъп до архива — включени във всеки план.