Sisu juurde
cutty.dev
All posts

Auto-prefix URL — pis detail, mis säästab minute

cutty.dev tuvastab, kui kleepid aadressi ilma https:// ja lisab selle automaatselt. See kõlab trivialsena. Tegelikkuses on see erinevus kahe sekundi ja nupule 'proovi uuesti' vajutamise vahel.

Sisestad vormile allegro.pl. Klõpsad. Ja mis siis?

Enamikus lühendajatest saad sel hetkel veateadet. Midelgi stiilis "see ei ole korrektne URL-aadress". Kuna eespuudel puudub https://. Nii et vajut tagasi, lisad protokooli, klõpsad uuesti ja alles siis on sul oma lühike link.

cutty.dev ei tee seda. Ta lihtsalt liidab ise https:// ja jätkab edasi, nagu pole midagi juhtunud.

Tean, kuidas see kõlab. Nagu funktsionaalsus, mis ei vääri vaevas isegi lõigut, rääkimata kogu postitusest. Kuid siiski istun ja seda kirjutades, sest just see pisikese detail on minu jaoks väike manifest selle kohta, kuidas ma üldse mõtlen auto-prefix URL ehitamise ja kogu ülejäänud nähtamatute mugavuste kohta.

Kaks sekundit vastu kahekümmend

Laskem. Tõepoolest, numbritega, sest annal jääb see lihtsalt juttudeks.

Esimene tee: kleepid sisse, sulged lingi, sulged aken. Kaks sekundit. Võib olla kolm.

Teine tee: kleepid kinni, viga, loed teadet (sekund ehk kaks, et aru saada, millest on tegemist), lisad protokooli, klikid uuesti, alles nüüd link. Kuusteist, kakskümmend sekund. Lisaks see väike ärrituse hetk, see vaikne "ah joo, protokoll", mis üksi ei kosta midagi, kuid kumul𝗱ub.

Ja nüüd korrunda seda arvuga, kui palju korda kuus sa mõnda aadressi kleepid. Minu puhul on see kümned. Järgneva professionaali puhul, kes haldab linke, on see sajad. Äkitselt kogrub see "peaaegu mainimiskuidta" pis detail minutites kuus. Ühe inimese kohta.

See ongi see arithmētika, mille enamik inimesi mö忽视vad, sest iga üksik juhtum tundub liiga väikese, et selle pärast muretsemata jääda.

Mis seal tegelikult allpool on

Mekanism on banalne ja ma seda üldse ei varjasta. Liistad teksti laaki. Enne kui midagi serverile saadetakse, kontrollib osa JavaScriptist, kas sisestatud tekst algab mõne protokolliga — http://, https://, ftp://, mailto:, mida tahes. Kui see ei alga sellise protokolliga, eeldab süsteem, et mõtled tavalist domeeni, ja lisab ette https://.

Praktikas:

  • allegro.pl muutubรูปแบบ https://allegro.pl
  • github.com/twoj-profil/projekt vormi https://github.com/twoj-profil/projekt
  • www.gazeta.pl vormi https://www.gazeta.pl

Ja kui protokoll on juba seal, isegi kui see on kummaline, ei kirjuta süsteem seda üle. Jätab selle alles ja kontrollib edasi, mida sellega teha. http://example.com läbib (lubatud). ftp://example.com läheb prügimajasse, sest me aktsepteerime ainult http ja https. Ja javascript:alert(1) väljub kohe, kuna see ei ole aadress, vaid upayaks midagi häret sisse süüntida (klassikaline XSS, aitame, ei).

Miks see on mul, aga pool turust seda ei omanda

Siin muutub huvitavaks, sest vastus on veidi naeratuslik.

Standardne viis aadressi veebilehis kontrollimiseks on konstruktor new URL(string). Ja see konstruktor on karm. Kompromissita. Kui protokoll puudub — see viskab vea. new URL("allegro.pl") tagastab sulle lihtsalt TypeError ja kõik.

Ja tead mis? See on korrektne käitumine. Enamiku rakenduste puhul on see täpselt see, mida sa soovid. Kuid linki lühendamise vormis, kus inimene kopeerib aadressi brauseri ribast või kellegi sõnumist, muutub see karmus eelist takistuseks. Äkitselt paneb tööriist, mille eesmärk on sulle aega säästa, parandama midagi, mida ta tegelikult suurepäraselt mõistab.

Selle ümbersõit on tõepoolest vaid paar rida:

function sanitizeUrl(input) {
  const trimmed = input.trim();
  const hasProtocol = /^[a-z][a-z0-9+.-]*:/i.test(trimmed);
  const normalized = hasProtocol ? trimmed : "https://" + trimmed;
  // dalej leci normalna walidacja przez new URL(normalized)
}

Viis rida. Kümnesa sekundis vähem hõõrdumist päevas kõigile, kes kleepivad aadressid. Ausalt öeldes ei tea, miks see pole igal pool standard. Kahtlen, et põhjuseks on see, et "URL-konstruktor lihtsalt nii toimib" ja keegi ei soovinud seda puudutada. Inertia, mitte halb taht.

Väike sidetekst selle kohta, mis tähendab "standardselt"

Sest see lugu new URL() on suurepärane näide millegi laiemast. Paljud asjad, mis tarkvaras peetakse normiks ("nii tehakse"), on tegelikult "nii tuli välja mõne kirjastiku vaagistustest, mida keegi ei küsimust alla". Konstruktori strict mode ei ole cutty disainijate või konkurentide otsus — see on URL-spetsifikatsiooni autorite otsus, mis tehti täiesti teises kontekstis ja täiesti teistele eesmärkidele.

Ja pärast seda继承 kogu turg selle vaikimisi valiku ja nimetab seda "standardiks". Mul on tunne, et parimad tooted sünnivad just nendes kohtades, kus keegi peatumata küsib: oota, kas see käitumine teenib mu kasutajat või ainult minu kirjastiku? Kõige sagedamalt on vastus: kirjastiku. Ja siis on väärtus viie readaga liikuda inimese poole.

Neid pisivigu on rohkem, kui näkannya

Auto-prefix on vaid üks paljudest sellistest elementidest, mida ei leia ühestagi funktsioonide nimekirjast. Sest kui need sinna kirjutataks, tunduks igaüks eraldi naeratuslikult väike:

  • tühikute trimmimine enne valideerimist, et klebitud aadressi lõpus olev juhuslik tühikus ei rikuteks kõike
  • ankurit säilitamine, ehk #section ei kao https://example.com/page#section aadressist pärast lühendamist
  • päringuparametrid (?utm_source=test) jäävad terviklikud, midagi ei lõika tee peal ära
  • domeenid polskide tähtedega, źdźbło.pl, muutuvad automaatselt punycode-ks
  • poolased tähed oma lõppos asuvad asendatakse ASCII-ga (różowy-link muutub 되겠 rozowy-link)
  • ohtlikud protokollid — javascript:, data:, file: — blokeeritakse konkreetse, arusaatava teatega

(On planeeritud ka automaatne http:// ümberviimimine https://รูปแบบ, kui sihtserver toetab krüpteeringut. See ei tööta hetkel veel reaalajas, nii et ma ei pretendeeri, et see toimiks.)

Iga üks neist detailidest säästab kellelegi viis, kümme, kolmkümmend sekundit ja ühe ohvatus. Üksikuna mitte midagi. Koos on see erinevus tussen "töötab OK" ja "nautin selle kasutamisest".

Mida ma tahaksin veel juurde teenida

Tuleviku soovinime nimekiri, sest selle üle mõtlemine tekitab mul lihtsalt rõõmu:

  • intelligentne kleepimine — tuvastada lause sees peituv aadress ja eraldada sõnade vahelt ainult URL
  • massikleepimine — aadresside loetelu, üks ridadel, ja igaühele luua koheselt eraldi lühike link
  • soovituslikud lõpposad — sihtlehe pealkirja põhjal pakkuda valikuks kolm brändikat sulgiga slug'it
  • Open Graphi eelvaade kohe pärast kleepimist, veel enne kui klõpsate nupule "lühikenda"

Iga üks neist on jälle "viisiline funktsioon, mis ei näata midagi". Ja kõik koos? See ongi see piir tööriista ja selle vahel, mida kasutad igapäevaselt mõtlemata. Kui soovid näha, kuidas see praegu toimib, kleepi cutty.dev sisse mis tahes ilma protokollita — allegro.pl, github.com, news.ycombinator.com — ja näe, et see ei takista teed.

Lõpetuseks, veidi isiklikult

Kau lâu mõtlesin, et tooted võidavad suurete funktsioonidega. Selle ühe efektse asjaga, mida saab esitada diapositüsil ja millest inimesed kirjutavad. Ja jah, vahel ongi nii.

Mida kauem ma kuttu ehitan, seda kindlamalt tunnen, et kasutaja lojaalsus sünnib hoopis kus另kohal — neis sajades mikrosekundides, mida keegi teadlikult ei märka. Sa ei mäleta, et tööriist lisas ise https://. Sa mästad ainult üldist muljet, et "kasutamine on kuidagi mugav", "ei äratala". See mulje ei tule tühistest kohtadest. See koosneb kümnemetest vielinijalistest otsustest, mida üksikut ei kaitsetaks end ante keelatud kui "väärtuslikud ajakulu suhtes".

Ehk just see on käsitöö olemus. Mitte see üks suur liik, vaid üritus, et kord esile kord uuesti seisida inimese kõrval vormi juures — isegi kui tegemist on vaeste kahe sekundiga. Ja sina? Mis tegi sind hiljuti mõnes tööriist nii ärritunuks, et on peaaegu häpi seda tunnistada? Sest tavaliselt asub just seal parim tehtav töö.