Auto-prefix URL — sīkākais detaļa, kas ietaupa minūtes
cutty.dev atpazīst, ja ievietojat adresi bez https://, un automātiski to pievieno. Tas skan triviāli. Praktiski tas ir atšķirība starp divām sekundēm un klikšķi uz 'mēģiniet vēlreiz'.
Ievadi allegro.pl formulā. Noklikšķini. Un kas tad?
Lielākajā daļā saīsinātāju šajā brīdī jūs saņemat kļūdas ziņojumu. Something style "tas nav pareizs URL adrese". Jo priekšā nav https://. Tāpēc jūs atgriezaties, pievienojat protokolu, noklikojat vēlreiz, un tikai tagad jums ir jūsu īsā saite.
cutty.dev to nedara. Viņš vienkārši pats pievieno https:// un turpina tāpat, kā nekad neko nebūtu noticis.
Es zinu, kā tas izklausās. Kā funkcija, kas tik ilgi, lai pelnītu pat otro rindkopu, neļaujoties runāt par visu ierakstu. Tomēr es sēžu un par to rakstu, jo tieši šis sīkums ir mans nelielais manifests par to, kā vispār es domāju par auto-prefix URL izstrādi un visu pārējo šo neredzamo ērtību radīšanu.
Divas sekundes pret divdesmit
Aprēķināsimy. Patiešām, skaitļos, jo citādi tas ir tikai čaterošana.
Pirmais ceļš: ieliek, tev ir saite, aizver logu. Divas sekundes. Varbūt trīs.
Otrais ceļš: ieliek, kļūda, izlasi ziņojumu (sekunde vai divas, lai saprastu, par ko ir runa), pievieno protokolu, noklikšķini vēlreiz, tikai tagad saite. Piecpadsmit, divdesmit sekundas. Plusi tas nelaudais aizkaitrības moments, tas klusais "a nu jā, protokols", kas atsevišķi neko nemaksā, bet uzkrāj się.
A tagad pomnolec ar to, cik reizes mēnesī ieliek kādu adresi. Man tas ir desmitiem. Kam arī profesionāli pārvalda saites — hundreds. Pēkšņi šis "tikko vēršanās uzmanībā cienīgais" sīkums uzkrājas minutēs mēnesī. Vienai personai.
Tas ir tieši tā aritmetika, kuru lielākā daļa cilvēku ignorē, jo katrs atsevišķais gadījums šķiet par mazs, lai par to uztraptos.
Kas tieši tur atrodas zem virsmas
Mehānisms ir vienkāršs un es to visēc neslēpju. Tu ievieci tekstu laukā. Pirms kaut kas tiek nosūtīts uz serveri, JavaScript fragments pārbauda, vai tas, ko esi ierakstījis, sākas ar kādu protokolu — http://, https://, ftp://, mailto:, koļienu. Ja tas nesākas ar to, sistēma pieņem, ka tu domā par parastu domēnu, un pievieno https:// priekšā.
Praktiskajā līmenī:
allegro.plpārvēršashttps://allegro.plgithub.com/twoj-profil/projekthttps://github.com/twoj-profil/projektwww.gazeta.plhttps://www.gazeta.pl
Un ja protokols jau ir tur, pat ja tas ir dīvains, sistēma to neuzraksta pār. Atstāj to un turpina pārbaudīt, ko ar to darīt. http://example.com iet cauri (atļauts). ftp://example.com dodas misā, jo mēs pieņemam tikai http un https. Un javascript:alert(1) izlido nekavējoties, jo tas nav adrese, bet gan mēģinājums ievadīt kaut ko briesmono (klasisks XSS, paldies, nē).
Kāpēc man tas ir, bet puspuse tirgus nē
Šeit kļūst interesanti, jo atbilde ir nedaudz smieklīga.
Standarta veids, kā pārliecināties par adresa derīgumu pārliecinātājā, ir konstruktors new URL(string). Un šis konstruktors ir stingrs. Kompromisus nepieņem. Ja nav protokola — tas izrauca kļūdu. new URL("allegro.pl") vienkārši atdod TypeError un viss.
Un zin what? Tas ir pareiz uzvedība. Lielākajai daļai lietotņu tieši to tu vēlies. Bet saite sk shortenēšanas formulā, kur cilvēks kopē adresi no pārlūka joslas vai no kāda ziņojuma, šī stingrība no priekšrocības pārvēršas par šķērsli. Pēkšņi rīks, kas tev šodien jātaupa laiks, liek tev labot kaut ko, ko tas taču lieliski saprot.
Šī apvairīšanās ir burtiski tikai dažas rindiņas:
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)
}
Piecas rindiņas. Desmitiem sekundēm mazāk beresnes, katru dienu, ikvienam, kurš ievada adreses. Ļoti atklāti nezinu, kāpēc tas nav standarts visur. Šaubos, ka iemesls ir tajā, ka "URL konstruktors vienkārši darbojas" un nekāds nevēlējās to pieskart. Inertija, ne slikta griba.
Mazs pieequals noteikums par to, ko nozīmē "standarta"
Tā kā šis stāsts ar new URL() ir lielisks piemērs kaut kam plašākam. Daudzas lietas programmatūrā, kas tiek uzskritas par "tā ir jādara", patiesībā ir "tā izdevās ar kādas bibliotekas noklusējumiem, kuru neviens neapšaubīja". Konstruktora strict mode nav no cutty dizaineru vai konkurence lēmums — tā ir URL specifikācijas autoru pieņemtais lēmums, kas tika pieņemts pilnīgi citā kontekstā un pilnīgi citiem lietošanas mērķiem.
Un pēc tam visa tirgus ir mantno šo noklusējumu un sauc to par "standartu". Man šķiet, ka labākie produkti rodas tieši tajos brīžos, kad kāds apstājās un pajautāja: mirkli, vai šis konkrētais uzvedība kalpo manu lietotāju, vai tikai manu bibliotēku? Visbiežāk atbilde ir: bibliotēku. Un tad ir vērts ar pie trim rindkopām pāriet cilvēka pusē.
Šo sīkumu ir vairāk, nekā redzams
Auto-prefix ir tikai viens no daudziem šādiem elementiem, ko jūs neatrogsiet nevienā funkciju sarakstā. Jo, ja tos tur ierakstu, katrs atsevišķi izskatītos smieklīgi mazs:
- do atviegšana pirms validācijas, lai nejauša dobums ievietotā adreses beigās nesabojātu visu
- sakumenta saglabāšana, tātad
#sectionvietoshttps://example.com/page#sectionnez消失 pēc sa shortening - pieprasījuma parametri (
?utm_source=test) tiek pānes pilnībā, nekas netiek atsvaidots ceļā - domēni ar poļu rakstera zīmēm,
źdźbło.pl, automātiski tiek konvertē uz punycode - poļu burti savējos galnieklīdošajos daļās tiek aizvietoti ar ASCII (
różowy-linkkļūst parrozowy-link) - bīstamie protokoli —
javascript:,data:,file:— tiek noraidīti ar konkrētu, saprotamu ziņojumu
(Vēl tiek plānots automātisks http:// pārvēršana https://, ja mērķa serveris atbalsta šifrēšanu. Tas pašlaik vēl nedziała tiešsaistē, tāpēc es nevarēšu to apsimēt.)
Katrs no šiem detaļiem kādam ietaupa piecas, desmit, trīsdesmit sekund un vienu pietuksumu. Atsevišķi — neceļ. Kopā tas ir atšķirība starp "darbojas OK" un "man patīk to izmantot".
Ko es vēl vēlētos pievienot
Brīžu saraksts nākotnei, jo par to domāšana man vienkārši sniedz prieku:
- viedā ievietošana — atrast adresi, kas slēpjas teikumā, un izvilkt tikai URL vārdu starpā
- masveida ievietošana — adrešu saraksts, viens katrā rindā, un no katras uzreiz atsevišķs īss saite
- ieteicamie galigriezi — pamatojoties uz mērķlapas virsrakstu, piedāvāt trīs zīmola slugus seçimam
- Open Graph priekšskatījums uzreiz pēc ievietošanas, vēl pirms noklikšķināt "saīsināt"
Katrs no šiem ir atkal "piecu rindu funkcija, kas izskatās pēc nekas". Un visi kopā? Tas ir tieši tas robežpunkts starp rīku, kas ir laika, un tādu, kuru tu lieto katru dienu bez aizdomām. Ja vēlies redzēt, kā tas darbojas tagad, ievieti cutty.dev jebko bez protokola — allegro.pl, github.com, news.ycombinator.com — un pārliecinies, ka tas tev neradīs nekādas šķēršļi.
Beigās, nedaudz personiski
Ilgu domāju, ka produkti uzvar ar lieliskām funkcijām. Ar to vieno efektīvo kaut ko, kas var parādīt uz slaida un par ko cilvēki rakstīs. Un jā, dažreiz tā ir.
Jo ilgāk es veidoju cutty, jo spēcīgāk jūt man, ka lietotāja lojalitā rodas citur — tajos simtiem mikrosekundēs, ko neviens apzināti nepamanī. Tu neatceries, ka rīks pats pievienoja tev https://. Tu atceras tikai vispārējo iespaidu, ka "tas irgendwie labi lietojas", "neizkaitina". Šis iespaids neņemas no nekas. Tas sastāv no desmitiem piedimenīšu lēmumu, kurus atsevišķi neviens nevarētu aizstāvēt pret sevi kā "vērtus laika".
Varbūt tieši tajā ir amatniecības būtība. Ne tajā vienā lielajā kustībā, bet gan neatlaidībā, apstāties cilvēka pusē pie kopsvaru aizpildīšanas — pat ja tas attiecas uz nelielām divām sekundēm. Un tu? Kas tevi pēdējā laikā kādā rīkā ir izkaitinājis tik sīki, ka pat traucinošīgi atzīties? Jo parasti tieši tur slēpjas labākais darbs, kas jāveic.