Essentials of Zepto.js

Moderne JavaScript-biblioteker er ganske behemoths - bare ta en titt på jQuery. Når du lager en mobil-app, eller til og med bare målretter mot moderne nettlesere, blir et bibliotek som er mye mer svelte og nimble et bedre forslag.

I dag skal vi se på et slikt bibliotek, kalt Zepto.


Problemet med blending skrivebordsbiblioteker og mobilenheter

En ting som har snuck forbi de fleste radarer har vært økningen av mobile enheter.

Se, internett og teknologien som driver det, har vokst i sprang i løpet av de siste årene. Vi flyttet fra statiske nettsteder til webapplikasjoner til dynamiske webapplikasjoner og deretter til realtid, hyper-responsive, thingamabob apps i dag. En ting som har snuck forbi de fleste radarer har vært økningen av mobile enheter.

Tenk på det: mange bruker smarte telefoner og bruker den til å surfe på en konstant basis. Selv hjemme har en ikke-triviell del av kretsen min vedtatt en tavle-enhet for uformell surfing og e-post. Mens denne tilstrømningen av enheter er god fra et eksponeringsperspektiv, er det ikke uten forbehold.

I stedet for å tenke på disse enhetene som visning begrenset som forbrukere, må vi som utviklere tenke på dem når det gjelder ressurser og båndbredde. Ikke alle dem har en hyper quad gajillion Ghz CPU eller kommer med minnepinner. Og la oss ikke engang komme i gang med båndbredden. En stor del av surfingpopulasjonen er fortsatt fast på disse infernalske unnskyldningene for en mobil internettforbindelse.

Jeg tror du ser hvor jeg går med dette. Store monolittiske biblioteker som jQuery eller Prototype har definitivt sin plass, men for denne mobile æra tror jeg det er et sted for noe som er mye mer skummelt. Og mange utviklere synes å være enige med meg.


Alle koden for å lage et biblioteksarbeid over nettlesere legger til

Et annet stort problem som jeg ikke klarte å nevne er at moderne biblioteker gjør en mye av kryss leser ting. Faktisk var en stor tegning av jQuery, i utgangspunktet, hvordan det abstrakte bort mye av kryssbrowser quirkiness som frontend utviklere måtte jobbe rundt. Selv nå, gjør jQuery mye tung løft under hetten for å sørge for at ingenting bryter i forskjellige nettlesere.

Men hvis du er en utvikler som ser ut til å imøtekomme bare moderne enheter, trenger du virkelig alt dette, tør jeg si, cruft? Det korte svaret er nei. Ved å kutte ut unødvendig kode, både du:

  • Eke ut mer ytelse siden det er færre linjer med kode for nettleseren å analysere og
  • gjør filen mindre i størrelse, noe som bidrar til båndbreddebegrensede mobile enheter.

Tenk at dette problemet er overblown? Her er en tilfeldig blokkering av kode fra jQuery's kilde:

 isPlainObject: funksjon (obj) // Må være et objekt. // På grunn av IE må vi også sjekke tilstedeværelsen av byggherren. // Pass på at DOM noder og vindu objekter ikke passerer, så vel som (! Obj || jQuery.type (obj)! == "objekt" || obj.nodeType || jQuery.isWindow (obj)) return false;  ... 

Eller noe litt mer esoterisk:

 // Utfør en enkel sjekk for å avgjøre om nettleseren kan // konvertere en NodeList til en matrise ved hjelp av innebygde metoder. // Verifiserer også at den returnerte gruppen inneholder DOM noder // (som ikke er tilfelle i Blackberry-nettleseren) prøv Array.prototype.slice.call (document.documentElement.childNodes, 0) [0] .nodeType; // Gi en tilbakebetaling metode hvis den ikke fungerer fange (e) // Den tiltenkte tilbakebetaling ... 

Dette kan se ganske trivielt ut, men husk dette legger til. Hvis du bare skal målrette mot moderne nettlesere, enten på skrivebord eller mobiltelefoner, så er det ikke noe reelt behov for alle disse ekstrakontrollene og hackene. Ved å kutte ned dine tiltenkte nettlesere, vinner du på både båndbredde og ytelse!


Så hva er Zepto's Deal?

Jeg hører dere sier "Nok buildup! Fortell oss om darn-biblioteket allerede!". Så la oss komme til det.

Zepto, som tittelen bortskjemt det for deg, er en mobil JavaScript-rammeverk som korrigerer begge problemene nevnt ovenfor. Den har en veldig liten kodebase og er fjærvekt på rundt 8kb.

Den klarer å være så svelte ved for det meste å kutte ut kors nettleseren ting. Da det ble opprettet, var hovedfokuset bare å støtte Webkit. Den mobile versjonen av Webkit for å være nøyaktig. Nå har den blitt utvidet til å fungere med desktop-nettlesere - men bare moderne. Ikke mer klutzing rundt for å få ting til å fungere dette IE6!

Zepto API er jQuery-kompatibel. Hvis du bruker jQuery, vet du allerede hvordan du bruker Zepto.

Et annet område der Zepto klarer å være liten, er hvordan den klarer å unngå funksjonsoppblåsthet. Kjernebiblioteket ser ikke ut til å inneholde noen ytre funksjonalitet. Selv AJAX- og animasjonsfunksjonaliteten er tilgjengelig som separate moduler, hvis behovet oppstår. For brukere som primært bruker biblioteker til DOM-traversal og manipulasjon, er dette en fullstendig gud send.

Og, å nevnte jeg Zeptos hovedparti? Zepto API er jQuery-kompatibel. Hvis du bruker jQuery, vet du allerede hvordan du bruker Zepto.


Er Zepto og jQuery utskiftbare?

Ja og nei. Avhenger er et mer passende svar.

Ja, fordi Zepto kjernep API ligner jQuery i stor grad. For å gjøre det enkelt å bruke og dramatisk redusere læringskurven, emulerer Zepto jQuery's API. De fleste av de brukte metodene, som DOM-manipulering, heter ganske mye det samme og har samme parametre i samme rekkefølge. Metodens signaturer er de samme, for ingeniører der ute.

La oss se på et lite eksempel:

 $ ('# element'). html ("Hei! Er du på GW2 beta?");

Ser kjent ut? Det burde. Dette er nøyaktig samme kode som du vil bruke med jQuery for å endre HTML til et element. Som nevnt, er dette ikke begrenset til bare denne metoden. De fleste DOM-operasjoner er bygget på samme måte sammen med verktøyene dine, som AJAX.

På forsiden er API ikke en 100% kamp. Zepto avviser noen metoder som er tilstede i jQuery, som kan ødelegge koden din. Og like viktig, siden Zepto er en delmengde av jQuery, vil du sannsynligvis gå glipp av bestemte funksjoner som er bygd inn -- Utsatt er et fint eksempel. Du kan ikke bytte ut jQuery med Zepto og forventer at alt skal fungere.

Og for meg er den største hindringen metodene som har blitt kopiert fra jQuery, men har en annen signatur og funksjonssett. Det blir litt frustrerende når du tror du bruker en metode, men du er ikke. Klonemetodenes evne til å kopiere hendelseshåndterere er et godt eksempel. Uten å se på kilden, ville jeg egentlig ikke ha funnet dette ut.


Utforske Core API

Hvis du har jobbet med jQuery før, bør alt under være en snooze fest.

Nok chit chat, la oss dykke inn i noen kode nå. Som med mange moderne biblioteker er DOM-traversering og manipulering en kjernefunksjon som alle ønsker å perfeksjonere. Siden API og generell funksjonalitet er veldig lik jQuery, tror jeg at du sikkert kan anta at alt er topp hakk.

La oss ta en titt på noen vanlige DOM-relaterte funksjoner.

Endre HTML-innholdet i en beholder

Dette er brød og smør av DOM-operasjoner: lesing eller endring av HTML-innholdet i et element. Med Zepto er det like enkelt som å ringe html metode på beholderen, og passerer i den nye HTML, hvis nødvendig.

Dette får for eksempel HTML til et element og lagrer det i en variabel.

 var containerText = $ ('# element'). html ();

Eller hvis du vil bytte den til noe annet:

 $ ('# element'). html ("Hola there!");

Ganske enkelt, rett?

Legg på / legg til et element på en beholder

Som med jQuery bruker Zepto bruk av føyer og foranstilt metoder. Og invokasjonen forblir den samme også.

 $ ( '# Element'). Append ("

Dette er det vedlagte elementet.

"); // eller $ ('# element'). prepend ("

Dette er det vedlagte elementet.

");

arrangementer

Hendelser er ryggraden i ethvert moderne program, og Zepto gir deg en mengde enkle å bruke metoder for å få jobben din ferdig. Hoveddelen av arbeidet gjøres gjennom metode.

 $ ('# element'). på ('klikk', funksjon (e) // Din kode her);

Lett å lese og lett å analysere. Hvis du føler deg gammel skole og har lyst til å bruke bind, delegere eller bo fremgangsmåter, ikke. Akkurat som med jQuery, blir de avskrevet her.

AJAX

Ethvert moderne lavnivå bibliotek trenger å gi en enkel å bruke wrapper rundt AJAX og Zepto lar deg ikke her nede. Her er et eksempel på en super enkel AJAX-forespørsel.

 $ .ajax (type: 'POST', url: '/ prosjekt', data: navn: 'Super Volcano Lair', dataType: 'json', suksess: funksjon (data) // Gjør noen fine ting her , feil: funksjon (xhr, type) alarm ('YU NO WORK?'));

Ting kan se litt komplisert ut, men det vi gjør kan kokes ned til:

  • Oppretter AJAX-objektet og overfører det.
  • I alternativene spesifiserer vi at vi ønsker å gjøre en POST-forespørsel. Standard er GET, jeg forestiller meg.
  • Angi nettadressen til POST til.
  • Angi dataene som må sendes til serveren. Som du kan se, ler jeg maniacally og prøver å lage min egen super skurk lair.
  • Angi metoder som vil bli utløst når forespørselen lykkes eller mislykkes. På denne måten kan vi oppdatere brukergrensesnittet hva som helst.

Som med jQuery, er det en egen metode for en GET- eller POST-forespørsel, eller at de bare skal laste opp noe webinnhold.

animasjoner

Hva kommer verden til å komme uten noen animasjoner? Zepto avslører den allmektige animere metode som skal håndtere mest av dine animasjonsbehov.

 $ ('# element'). animate (opacity: 0.50, top: '30px', farge: '# 656565', 0,5)

Vi velger i utgangspunktet elementet som skal animeres, påberåbe seg animere metode og spesifiser egenskapene som skal animeres, samt tiden det skal ta for å fullføre animasjonen. Zepto gjør resten.

Eller hvis du bare trenger å vise og skjule et element, bør byttet fungere helt fint.

Jeg tror du får poenget her - Zepto er DOM, animasjon og hendelser API emulerer jQuery i stor grad. Og som vi alle vet, er jQuery darn bra med disse tingene. Hvis du har jobbet med jQuery før, bør du ikke stå overfor for mye problemer her.


En titt på Touch Events og andre Niceties

Zepto gir deg noen få berøringsspesifikke hendelser som du kan utnytte i appene dine. Disse inkluderer:

  • swipe -- Håndterer din typiske swipe-bevegelse. Det er også separate hendelser for forskjellige retninger, som swipeLeft.
  • springen -- Utløses som svar på en generisk trykkaksjon.
  • doubleTap -- Tydeligvis håndterer dette dobbeltkraner.
  • longTap -- Det utløses når et element er tappet på for mer enn 750ms. Det ser ikke ut til å være en grei å endre denne forsinkelsen skjønt.

Her er et raskt eksempel, glatt av Zeptos dokumentasjon.

 
  • Liste 1 SLETT
  • Liste 2 SLETT

Når et listeelement blir feid, er hvert annet listelements sletteknapp skjult, og bare nåværende er vist. Ved å trykke på en sletteknapp fjerner du den overordnede li-delen for den knappen som skal fjernes fra DOM.

Dette bør være ganske lik det hvordan du vanligvis håndterer hendelser, med unntak av at du har bindende håndterer til forskjellige hendelser, det er alt.


Wrapping Up

Med tanke på hva og hvem jeg utvikler for, er dette perfekt for meg; men som det alltid er, kan kjørelengde varierer.

Vel, det handler om nesten alt det er til Zepto. På den kjernen var det ment å være en mager, fri versjon av jQuery som kunne brukes på mobile enheter. Over tid har det slått seg inn i et magert bibliotek som gjør unna med å støtte arkaiske nettlesere.

Med tanke på hva og hvem jeg utvikler for, er dette perfekt for meg; men som det alltid er, kan kjørelengde varierer. Du kan være låst inn ved hjelp av jQuery-plugins som krever ikke-trivielle modifikasjoner for å få det til å fungere under Zepto eller bare ha mer tro på jQuery.

Uansett må du virkelig gi Zepto et forsøk på å se hvordan det passer inn i arbeidsflyten din før du skriver den av. Jeg gjorde det, og jeg elsker det!

Vel, det er alt fra meg i dag. Gi meg beskjed om hva du synes i kommentarene nedenfor, og takk så mye for å lese!