Valley Decoration

Django vs. Drupal -pohdintaa

8. marraskuu 2011

Verkkopalvelua rakennettaessa ensimmäinen ja tärkein valinta koskee palvelun alustaksi valittavaa järjestelmää.

Hyvin yksinkertaiset verkkosivustot voidaan toteuttaa Wordpressin kaltaisten varsin yksinkertaisten sisällönhallintajärjestelmien avulla, mutta monimutkaisempien tietokantapohjaisten verkkopalveluiden toteuttamiseen tarvitaan laajempia ohjelmistoja.

Yksi suosituimmista avoimen lähdekoodin sisällönhallintajärjestelmistä on Drupal, jolla on toteutettu yli puoli miljoonaa verkkosivustoa – mukaan lukien Valkoisen talon sekä talouslehti The Economistin verkkopalvelut. Suomessa Drupalia käyttävät muun muassa YLE ja Suomi24-keskustelupalsta.

Anders Inno käyttää verkkopalveluissaan Djangoa, joka on avoimeen lähdekoodiin perustuva ohjelmistokehys. Django ei ole kansainvälisessä suosiossa samalla tasolla Drupalin kanssa, mutta sen käyttäjäkunta kasvaa kovaa vauhtia. Toimitamme asiakkaillemme aina parasta käytettävissä olevaa teknologiaa ja olemme valinneet Djangon sen nopeuden, tehokkuuden, tietoturvan ja erinomaisen räätälöitävyyden vuoksi.

Tässä kirjoituksessa havainnollistamme Djangon erinomaisia teknisiä ominaisuuksia vertailemalla sitä suositumpaan kilpailijaansa Drupaliin. Kirjoituksen pohjana on verkkokehittäjien keskuudessa huomiota herättänyt artikkeli Drupal or Django? A Guide for Decision Makers.[1]

 

Ohjelmistokehys vs. sisällönhallintajärjestelmä

Djangon ja Drupalin suurin ero on ohjelmistojen yleisessä luonteessa. Django on ohjelmistokehys (framework), jolla on sisällönhallintajärjestelmän ominaisuuksia. Drupal on sisällönhallintajärjestelmä, jolla on ohjelmistokehyksen ominaisuuksia.

Ohjelmistokehys toimii teknisesti matalammalla tasolla kuin sisällönhallintajärjestelmä. Tämän takia ohjelmistokehys ei ole loppukäyttäjälle avaimet käteen –ratkaisu mutta se on huomattavasti joustavampi kuin tavanomainen sisällönhallintajärjestelmä. Joustavuus on seurausta siitä, että ohjelmistokehys ei oleta asioita niin paljon kuin sisällönhallintajärjestelmä. Ohjelmistokehys ei esimerkiksi oleta missä muodossa sisältöä halutaan esittää tai mitä WYSIWYG-editoria käytetä sisällön tuottamiseen. Toisaalta ohjelmistokehys vaatii tyhjältä pöydältä aloittamisen takia kehittäjiltä enemmän vaivaa ja tietotaitoa.

Varsinainen raja ohjelmistokehyksen sisällönhallintajärjestelmän välillä on kuitenkin usein häilyvä. Vaikka Django on ensisijaisesti ohjelmistokehys, siihen on saatavilla helppokäyttöinen ja täysin räätälöitävä hallintonäkymä (Django CMS), jonka avulla Django toimii käyttäjän näkökulmasta sisällönhallintajärjestelmän tavoin.

Djangon ja Drupalin erot voitaisiin ehkä tiivistää siten, että Djangossa painotetaan yksinkertaisuutta ja selkeyttä; jos jotain tarvitaan, se lisätään erikseen. Drupal tarjoaa paljon valmiina ja tekee käyttäjän puolesta monenlaisia oletuksia. Tämä mahdollistaa nopean käyttöönoton, mutta saattaa johtaa jatkossa siihen, että aikaa kuluu tarpeettomien asioiden ja toiminnallisuuksien poistamiseen.

 

Python vs. PHP

Django tehty oliopohjaisella Python-ohjelmointikielellä. Tämä tarkoittaa muun muassa, että erilaisia elementtejä voidaan liikutella ja käyttää uudelleen Djangon koodissa helposti. Pythonin ydinjärjestelmä on pieni ja tehokas ja sitä tuetaan ladattavilla moduuleilla – oliopohjaisuus mahdollistaa kaiken ylimääräisen koodin eliminoimisen. Pythonin laaja kehittäjäekosysteemi tarjoaa erittäin nopean, tehokkaan, tietoturvallisen ja laajennettavan ympäristön verkkopalveluiden rakentamiselle.

PHP:llä toteutettu Drupal ei ole samassa määrin oliopohjainen, vaikka siinä on joitakin oliopohjaisia elementtejä. PHP:tä voidaankin pitää Drupalin varsinaisena akilleenkantapäänä. PHP on suoraan sanottuna vanhentunut ja puutteellinen kieli. Kielestä puuttuu vieläkin esimerkiksi täysi Unicode-tuki, vaikka sellaista olisi tarvittu jo ainakin vuosikymmenen verran (Pythonissa on ollut täydellinen Unicode-tuki jo vuodesta 2000). PHP:tä käytetään usein vain siitä syystä, että se on oletus ja helposti käytettävissä vaikka parempiakin vaihtoehtoja olisi tarjolla. On tärkeää tiedostaa että kaikki mitä voidaan tehdä PHP:llä, voidaan tehdä myös Pythonilla, mutta sama ei päde toisinpäin.

 

Tietoturva

Drupalilla ja muilla PHP-pohjaisilla sisällönhallintajärjestelmillä (Joomla, Wordpress) on synkkä historia tietoturvan saralla, kun taas Djangossa tietoturvaongelmat ovat olleet erittäin harvinaisia. Varmasti osittain siksi, että Djangolla on matalampi julkinen profiili, mutta myös siksi, että Django tekee vähemmän oletuksia siitä, miten asiat toimivat. Djangossa on erinomaisia tietoturvallisuutta lisääviä ominaisuuksia kuten kehittynyt lomakkeiden käsittely sekä URL-kuvausjärjestelmä, joka estää pääsyn sellaisiin URL-malleihin joihin ei ole ennalta määritelty pääsyä kehittäjien toimesta.

 

Sivupohjien hallinta

Djangon ohjelmointiarkkitehtuuriin kuuluu mahdollisimman täydellinen erottelu ohjelmointilogiikan, sisältörakenteen ja sisällön esittämistä ohjaavan koodin välillä. Tämä käyttöliittymän erottaminen sovellusaluetiedosta eli MVC-arkkitehtuuri (model-view-controller, malli-näkymä-käsittelijä) toimii perustana Django CMS:n selkeälle ja suoraviivaiselle sivupohjien hallinnnalle.

Elegantti järjestelmä mahdollistaa sivupohjien sisäiset sivupohjat, erilaiset pohjat sivuston eri alueille sekä päällekkäisyyksien eliminoimisen sivupohjakoodissa. Kehittäjien lausuntojen mukaan ”ilo” on sana, joka parhaiten kuvastaa työskentelyä Djangon CMS:n sivupohjien hallinnan kanssa. Yleinen Drupalia koskeva kritiikki sen sijaan on, että sivupohjien räätälöinti voi olla vaikea. Sivupohjien hallinnasta Drupalissa on kirjoitettu kokonaisia opaskirjoja, mikä kuvastaa osaltaan niiden käsittelyn monimutkaisuutta.

 

Tietokanta

Djangossa ei käsitellä tietokantaa suoraan vaan oliopohjaisen tietomallin avulla. Selkeät ja suoraviivaiset mallit sekä niiden kyselyihin käytettävät querysetit helpottavat asioita. Niiden avulla vältetään monimutkaiset SQL-komennot, jotka ovat usein vaikeita ja virhealttiita. Kehittäjät säästävät näin aikaa ja organisaatio rahaa. Samalla parannetaan myös tietoturvan tasoa. Drupalissa ei ole vastaavaa järjestelmää tietokantojen käsittelyyn.

 

Nopeus

Järjestelmien nopeutta on vaikea vertailla luotettavasti, sillä se edellyttäisi kahta täysin identtistä sivustoa joista toinen on toteutettu Drupalilla ja toinen Djangolla. Djangoa ja Drupalia vertailevan artikkelin mukaan Drupalissa on paljon kerroksia, joiden läpi kaikkien sivukyselyiden pitää kulkea. Tämän seurauksena syntyy korkea määrä kyselyitä palvelimelle, mikä saattaa hidastaa sivun latautumista.

Todellisuudessa ongelma ei ole kovin akuutti suuria kävijämääriä saavilla tietokantapohjaisilla sivuilla, sillä ne käyttävät joka tapauksessa välimuistia suorituskyvyn ylläpitämiseksi. Keveys ja tehokkuus on kuitenkin aina suotavia ohjelmistoja käytettäessä. Samassa artikkelissa huomautetaan, että Drupalin päälle toteutettu sivusto todennäköisesti vaatii välimuistin käyttöä pienemmillä kävijämäärillä kuin vastaava Django-pohjainen sivusto.

 

Käyttöönotto

Drupalin avulla saattaa olla nopeampaa ottaa käyttöön hyvin yksinkertainen ja sivusto pakettiratkaisuna, mutta jos palvelu vaatii vähänkään räätälöintiä saattaa työmäärä kasvaa radikaalisti. Djangolla on kovemmat vaatimukset kehittäjien tietotaidon suhteen, mutta toisaalta Djangon räätälöinti on Drupalia vaivattomampaa, selkeämpää ja suoraviivaisempaa. Asiansa osaavat Django-kehittäjät voivat ottaa käyttöön ja uudistaa vanhoja, jopa hyvinkin laajoja palveluita hyvinkin nopeasti.

Drupalilla on maine vaikeasti päivitettävänä koska siihen toteutetaan paljon sisäisiä muutoksia merkittävien julkaisujen välillä. Yksikään ohjelmistoalusta ei ole toki immuuni tälle ongelmalle, mutta Djangon moduuleissa nähdään erittäin harvoin päivityksestä johtuvia ongelmia ja silloinkin ne ovat useimmiten helposti korjattavissa. Tähän vaikuttaa varmasti Djangon pitkälle viety oliopohjaisuus, jonka puuttuminen juuri vaikeuttaa Drupalin päivitysprosessia. Lukuisten kehittäjien kokemusten mukaan yksinkertaisten räätälöintien tekeminen Drupalissa voi vaatia saman ajan kuin samojen asioiden toteuttaminen tyhjältä pöydältä Djangossa.

 

Jatkokehitys

Drupal voittaa Djangon suosiossa ja siten myös tarjolla olevien lisäosien ja yhteisöllisen käyttötuen määrässä. Toki Djangollakin on oma yhteisönsä, jolta saa nopeasti apua ja vastauksia, mutta Drupalin yleisyys nostaa sen tässä kohtaa eri tasolla. Tämä on ongelma, jos Djangon käytössä ollaan julkisesti tarjolla olevan avun ja lisäosioen varassa. Mutta jos Django-pohjaisen ratkaisun kehittäminen on sellaisen organisaation vastuulla, jolla on kyky luoda puuttuvat resurssit luodaan itse omien kehittäjien toimesta, ei ongelmia tässä suhteessa ole.

Avoimen lähdekoodin sovelluksena sekä Django että Drupal eivät kumpikaan sido palvelun käyttäjä mihinkään tiettyyn kehittäjätahoon vaan palvelun kehitystä voidaan tarvittaessa jatkaa toisen organisaation voimin.

 

Lopuksi

Drupal on hyvä työkalu, jos halutaan valmis ratkaisu verkkopalvelun sisällönhallintajärjestelmäksi, joka voidaan ottaa käyttöön organisaation omin voimin ilman erillistä ja erityistä ammattitaitoa. Verkkosivuston avaaminen on helppoa, mutta sen muokkaaminen ja räätälöinti voi osoittautua pitkällä aikavälillä vaativaksi ja aikaavieväksi.

Ohjelmistoarkkitehtuurissa, räätälöitävyydessä, nopeudessa ja tietoturvassa Django-sivustoilla on selkeitä etuja Drupaliin verrattuna. Toimivan Django-ratkaisun edellytyksenä ovat kokeneet kehittäjät, mutta jos tällainen voimavara on saatavilla, niin palvelu saadaan käyttöön nopeasti ja se voidaan räätälöidä monipuolisesti vastaamaan käyttötarkoitusta. Ylläpitäjille käyttöönotetun Django-järjestelmän ylläpitäminen on erittäin helppokäyttöistä ja vaivatonta.


By: Anders Inno