Странните API-та, които направиха възможен съвременния уеб (и какво ни учат за лошите решения)
Защо pushState() има безполезен параметър?
Да си поиграем: кое е най-странното browser API, което познаваш?
Ако си frontend developer, вероятно веднага се сети за canPlayType(). Този метод връща три стойности: празен string ("не"), "probably" или "maybe". Неопределеност, увита в размита терминология — малко хаос.
Но има едно друго API, което показва истинското лице на уеба: History.pushState().
Когато го извикаш, трябва да подадеш три параметъра: state, title и url. Обектът state е логичен — позволява на приложението ти да възстанови данни при натискане на бутона "назад". Параметърът url също е полезен — обновява адресната лента без презареждане на страницата.
Ами този title? Първият параметър?
Пълен нула. Всички големи браузъри напълно го игнорират.
И така — защо изобщо съществува?
През 2008, когато History API се е проектирал, някой е решил, че браузърите трябва да позволяват на апликациите да задават персонално заглавие за всеки history entry. Идеята била: твоето SPA показва "Табло" в интерфейса, но в историята на браузъра стои "Аналитичен отчет".
Звучало разумно по онова време. Но браузърите бързо схванали проблема — какво става, когато потребител запише отметка и заглавието не съответства на това, което вижда в табовете си?
Вместо да се занимават с тази каша, браузърите просто пренебрегнали параметъра. Към онзи момент обаче хиляди сайтове вече били изградили апликациите си с три параметъра. Да го премахнат — значи да счупят работещи сайтове. Да го направят optional — ще объркат съществуващите извиквания на pushState(state, url).
Затова спецификацията направи нещо елегантно: преименува параметъра на unused и документира, че няма ефект.
Мръсното тайно на уеба
Ние даваме приоритет на обратната съвместимост пред почти всичко друго. Уебът ще се огъне ( понякога буквално), за да подсигури, че код от 2008 все още работи в днешните браузъри.
Тази философия е точно защото ние в NameOcean препоръчваме статични сайтове и доказани уеб технологии. Когато строиш нещо, което трябва да издържи — медийни архиви, документация, лендинг страници — стабилността на ванилните уеб технологии не е ограничение; това е предимство.
Същото важи и когато избираш domain registrar или хостинг доставчик. Търсиш компании, които разбират дългата игра. Уебът не отива никъде и технологиите, върху които строиш днес, трябва да работят и след десет години.
Урок за всички
Понякога "грешното" решение става постоянно не защото е правилно, а защото твърде много неща зависят от него. Това не е бъг в уеба — това е функционалност, която поддържа милиони сайтове да работят гладко.
Следващия път, когато се натъкнеш на странно API или deprecated параметър, помни: някой, някъде, е взел решение преди години и сега то е част от основите на уеба.
Уважавай странностите. Те държат нещата работещи.