Omegapoint

2009-06-02

Dojo och Dijit

Måndagsförmiddagen ägnades åt en längre genomgång av javascriptramverket Dojo, Web 2.0: Building Dynamic Web Sites with Ajax and the Dojo Toolkit. Sessionen hölls av en Niel Roberts från SitePen som varit med och utvecklat delar av ramverket. Efter en ganska trevande start med en till synes oändlig genomgång av vad som skulle avhandlas under de kommande timmarna, så lättade stämningen något när vi faktiskt kom till detaljerna och det hela blev inte så plågsamt som det hela först framstod. Niel visade sig vara en av de där människorna som faktiskt har riktigt bra koll på det han pratar om och var inte rädd för att släppa Powerpoint och koda sina exempel live. Imponerande.

Dojo är, hursomhelst, ett av de javascriptramverk som varit med längst. För den som inte är bekant med konceptet, så är ett javascriptramverk någonting som försöker abstrahera bort skillnader mellan webbläsare, fixa trasiga implementationer, samt addera funktionalitet som används ofta men som ännu inte blivit en del av någon standard. Genom att använda ett ramverk får utvecklaren ett api som dels innehåller mer funktionalitet och dels har ett förutsägbart och konsistent uppförande på alla plattformar.

Mer formellt så består Dojo av tre delar:

  • Dojo som innehåller grundfunktionaliteten.
  • Dijit som är ett ramverk för att skapa återanvändbara widgets som kan renderas på sidan.
  • DojoX som är en mängd communitygenererade bibliotek för att utföra olika funktioner som antingen inte anses passa i dojo eller Dijit, eller som passar men ännu inte är tillräckligt stabila för att inkluderas i huvuddistributionen.

Dojo och Dijit knyter dina skor!

Dojo löser en hel del saker som annars saknas i javascriptvärlden. Ett exempel är paketsystemet, som i och för sig inte kommer i närheten av den smidighet som det skulle kunna ha haft om det varit integrerat i språket, men som ändå relativt smärtfritt låter användaren dela upp applikationen på flera filer, ange paketnamn och deklarera beroenden mellan dessa. En annan favorit är en implementation av publish/subscribe mönstret som låter funktioner prenumerera på events utan att känna till vem som publicerar dem, vilket passar bra in i med den event-intensiva programmeringsmodelllen som finns i webbläsaren.

Förutom att addera funktionalitet så "fixar" Dojo en hel del saker som är mer eller mindre trasiga på andra ställen. Exempel på sådan funktionalitet kan vara möjligheten att trigga ett event efter att dom:en byggts men före media laddas, vilket tydligen inte är trivialt att göra i alla browsers eller funktionalitet för att addera en post före eller efter ett givet element i en lista. Vidare finns funktionalitet för att välja noder (motsvarande jQuery) och för smidig hantering av ajax-kommunikation, inklusive serialisering av frågor och svar till en mängd olika format. En av poängerna är att med dessa funktioner är Dojo implementerar gränssnitten på samma sätt i olika webbläsare, även i de läsare som inte har någon motsvarande generisk funktion. När en version av webbläsaren som har funktionaliteten inbyggd dyker upp, ersätts Dojos egen implementation med ett anrop till webbläsarens implementation.

Dijit-delen av Dojo låter användaren programmatiskt bygga upp html-sidan via javascript. Genom att utnyttja paketsystemet i Dojo kan en mängd komponenter med olika, ofta mer avancerade, beteenden skapas. I html definieras en div-tagg som via ett attribut pekar ut en Dojo-widget. Taggens fylls sedan av html som genereras i javascript, vilket medför att html och css dynamiskt kan anpassas efter exempelvis vilken webbläsarversion som används eller hur stor viewport man har. Det kan låta som en liten grej, men Niel hade ett par exempel med olika drag'n'drop prylar och lite andra grejer som i alla fall imponerade på mig.

Jaha ... och?

Ovanstående är ju naturligtvis bara lattesskummet på toppen av den 131 slides långa presentationen. Efter att ha smält det hela över en stående lunch ur en liten låda så har vi, utan att ha någon egen hands-on erfarenhet, kommit fram till att Dojo är något vi gärna tittar vidare på. Vi gillade bland annat att man haft som designprincip att försöka påverka de underliggande objektens beteende så lite som möjligt och snarare skapa kopior och abstraktioner än att direkt överlagra metoder i objekten. Att jQuery redan idag kan anses vara en form av de facto standard och som dessutom börjar implementeras i olika webbläsare reser dock en del frågetecken om Dojos ambitioner att lösa alla problem på en gång.

Ytterligare frågetecken uppstår kring användandet av Dijit. Visst är det fräckt med en massa flådiga diagramkomponenter, drag'n'drop och annat lull-lull men samtidigt så måste man fundera på vad det innebär att implementera en html-sida som bara innehåller några div-objekt och ingen content över huvud taget. Vad händer exempelvis med feltolerans, sökmotorindexering och tillgänglighet?

Betyg: 3,5

Erik är övertygad om att den typ av ramverk som Dojo/Dijit utgör, till stor del kommer att bli obsoleta i framtiden. Kostnaden för att underhålla stöd för alla risiga implementationer av olika standarder kommer helt enkelt att marginalisera vissa webbläsare som inte lever upp till innehållsleverantörernas kvalitetskrav och på så sätt göra webbläsarmiljön mer homogen. Gissningen är att html version 5, som innebär fantastiska möjligheter för den som utvecklar rika klientapplikationer, kommer att accelerera utvecklingen och att stora spelare som Facebook och Google kommer att tappa tålamodet med (framförallt) Internet Explorer och helt enkelt tvinga folk att installera något som fungerar. Jag har inte en riktigt lika rosenskimrande bild av framtiden och tror att webbdesigners fortfarande kommer att sitta år 2014 och svära över att IE6 fortfarande har 30%-ig marknadsandel och att IE7-kompatiblitetsläget på IE8 inte är kompatibelt med vare sig IE7 eller IE8. Det finns ett vad man kan delta i ...

2 kommentarer:

John Wilander sa...

Att addera en rad mitt i en lista har vi aktuell och plågsam erfarenhet av i vårt projekt. Problem pga IE6? Japp.

Jag vill vara med i vadet om framtiden för web 2.0 och användarnas val av webbläsare! Vad är det mest pessimistiska alternativet man kan välja? :)

TM sa...

Mera att läsa om komprimerade pekare (det är inte bara enkla 32-bitars dito) finns att läsa på: http://wikis.sun.com/display/HotSpotInternals/CompressedOops

Skicka en kommentar

Om Omegapoint

Omegapoint AB är ledande rådgivare och experter inom Systemarkitektur, Säkerhet och IT-ledning.

Twitter uppdateringar

Omegapoints kvitterström:

    Andra Omegapointbloggar