Auteurs:
Naam | Studentnummer |
---|---|
655269 |
Docenten
Naam | Functie |
---|---|
Skills begeleider | |
Procesbegeleider |
Klas | ITA-OOSE-A |
---|---|
Groepsnaam | Smalltalk |
Course | OOSE |
Datum |
|
Versie |
Inleiding
Bij het maken van onze casus voor regterschotracing komt er ook frond-end van pas waarbij we een front-end framework voor gebruiken. Omdat niet iedereen hier nog bekend mee is en we niet zeker weten welke opties er eigenlijk zijn en welke het beste werken gaan we hier een onderzoek naar doen. De hoofdvraag van dit onderzoek gaat als volgt: Welke front-end framework past het best bij ons project? Om tot een antwoord te komen tot de hoofdvraag heb ik ook een aantal deelvragen verzonnen. Deze deelvragen zijn: Welke front-end frameworks zijn er al? Wat zijn de criteria? Wat zijn de resultaten van de prototypes en als laatste hoe scoren de frameworks op de criteria. Na het beantwoorden van de deelvragen ga ik in de conclusie de hoofdvraag beantwoorden waar ik de deelvragen bij betrek.
Welke front-end frameworks zijn er?
Door te zoeken op het internet heb ik de meeste voorkomende frameworks genoteerd. Dit zijn:
- Angular
Angular is de front-end framework van Google. Deze wordt gebruik onder andere door Microsoft en en Gmail en heeft zo'n 83.000 github stars. (Angular, z.d.)
- Vue.js
Vue.js is een java framework. Deze wordt gebruikt door Nintendo en Adobe. en heeft 198.000 github stars
- React
React is gemaakt door facebook en wordt gebruikt door discord en en instagram. In tegenstelling to vue is react een library en is handiger voor single page aplicaties.
- jQuery
jQuery is het minst bekend van deze frameworks maar kwam ik nog steeds vaak tegen dus heb ik er voor gekozen om dit ook als een optie te zien. Het wordt gebruikt door onder andere walt disney
Deze 4 kwam ik tegen op de meeste websites en zijn ook de meest gebruikte. Deze neem ik dus mee naar de volgende deelvragen.
Welke criteria gaan we gebruiken voor het bepalen van de framework
Om te bepalen welke framework het best past bij dit project stel ik een aantal criteria op. Op basis van deze criteria geef ik de framework een score tussen de één en tien. Sommige criteria zullen sterker weging omdat deze belangrijker zijn
Code | Wegingsfactor | Criteria |
---|---|---|
CR1 | 2x | Documentatie |
CR2 | 3x | Ervaring |
CR3 | 1x | Prestatie |
CR4 | 3x | Prototype |
CR5 | 1x | Onderhouden |
- Deze criteria zal ik even kort toelichten:
- CR1 gaat over hoeveel er te vinden is op het internet. Is de documentatie up to date en hoeveel kun je er op stackoverflow over vinden.
- CR2 staat voor hoeveel ervaring wij met het framework hebben. Hoe bekend zijn we er mee en hebben we er al eerder mee gewerkt.
- CR3 gaat over de snelheid van de framework
- CR4 is voor hoe makkelijk het is om de prototype te maken
- CR5 is hoe vaak de framework wordt geüpdate en onderhouden
Wat zijn de resultaten van de prototypes
Om te kijken welke front-end framework het fijnst is maak ik met elke framework een dynamische lijst op basis van JSON.
React
Het maken van de react prototype ging erg gemakkelijk. Ik heb react nog nooit eerder gebruikt en heb de eerste beste video gebruikt om mijn react project op te zetten. Van daaruit heb ik verder gezocht naar een dynamische lijst en kon ik ook gelijk weer de eerste video gebruiken. Het maken van de prototype ging dus zonder problemen en werkte eigenlijk meteen.
Code
import React from "react"; import ReactDOM from 'react-dom'; const state = { dashboards: [ {id: 1, car: "BMW", driver: "Erik"}, {id: 2, car: "AUDI", driver: "Wijnand"}, {id: 3, car: "Porsche", driver: "Thomas"} ] } const {dashboards} = state; const element = <div> <h1>Dashboards</h1> <ul> {dashboards.map((dashboards) => { return <li> Auto: {`${dashboards.car}`} Coureur: {`${dashboards.driver}`} <button>kijk mee</button></li> })} </ul> </div> ReactDOM.render(element,document.getElementById("root"));
Resultaat
Figuur 1: Resultaat react
jQuery
In tegenstelling to React kon ik over jQuery niet zoveel vinden. Er bestonden geen goeie duidelijke video's hoe ik een project moest opzetten met jQuery ook duurde het even tot ik het antwoord voor mijn oplossing had gevonden
Code
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <title>prototype</title> <script src="jquery.js" type ="text/javascript"></script> </head> <body> <h1>Dashboard</h1> <ul id="ul"></ul> </body> </html> <script> $(function(){ $.ajax({ type : 'GET', url : 'dashboard.json', async : false, beforeSend : function(){/*loading*/}, dataType : 'json', success : function(result){ let buffer=""; $.each(result, function(index, val){ for(let i=0; i < val.length; i++){ let item = val[i]; console.log(item.name); buffer+=" <li>Auto: "+item.car+" Coureur: "+ item.driver+"</li><button>Kijk mee</button>"; } $('ul').html(buffer); }); } }); }); </script>
Resultaat
Figuur 2: Resultaat jQuery
Vue
Het duurde even tot ik de syntax van vue begreep. Dit komt vooral omdat het niet op iets lijkt wat ik al eerder gebruikt heb. Het duurde daarom relatief gezien best lang om dit voor elkaar te krijgen maar omdat vue een erg populaire framework is kon ik genoeg hulp vinden op het internet.
<script> export default { data(){ return{ "dashboards": [ { ID: 1, car: 'BMW', driver: 'Erik' }, { "ID": 2, "car": "AUDI", "driver": "Wijnand" }, { "ID": 3, "car": "Mercedes", "driver": "Thomas" } ] } } } </script> <template> <h1>Dashboards</h1> <ul> <li v-for="(dashboard,index) in dashboards" :key="dashboard.car">Auto: {{dashboard.car}} Coureur: {{dashboard.driver}} <button>kijk mee</button></li> </ul> </template>
Resultaat
figuur 3: resultaat vue
Angular
Het duurde even tot ik de beginnende kneepjes van angular in de hand had. Dit kwam wel vrij snel door de grote hoeveelheid documentatie die angular bied. Voor bijna elk component dat angular biedt zijn er 10 tal voorbeelden over hoe je het zou kunnen gebruiken. Hierdoor was het maken van het prototype zeer gemakkelijk en van zelf sprekend, enig wat iets lastig was, was het feit dat het maken van pagina's iets uitgebreider was dan met bijvoorbeeld vue.
import { Component, OnInit } from '@angular/core'; import {FormControl} from "@angular/forms"; @Component({ selector: 'app-home', templateUrl: './home.component.html', styleUrls: ['./home.component.css'] }) export class HomeComponent { tabs = ['First', 'Second', 'Third']; selected = new FormControl(0); addTab(selectAfterAdding: boolean) { this.tabs.push('New'); if (selectAfterAdding) { this.selected.setValue(this.tabs.length - 1); } } removeTab(index: number) { this.tabs.splice(index, 1); } }
<div> <button mat-raised-button class="example-add-tab-button" (click)="addTab(selectAfterAdding.checked)"> Add new tab </button> <mat-checkbox #selectAfterAdding> Select tab after adding </mat-checkbox> </div> <mat-tab-group mat-align-tabs="center"> <mat-tab label="First" style="height: 100%"> <div class="example-boundary"> <div class="example-box" cdkDragBoundary=".example-boundary" cdkDrag> <img src="https://lh3.googleusercontent.com/_eWd5RuZfGPlgVcNzsG4S352TTXbZVoHsJju1t2_jFattGC-JaLrRTe02L7tBfQacQ=w600-rwa" height="100%" width="100%"> </div> </div> </mat-tab> <mat-tab label="Second" >Content 2</mat-tab> <mat-tab label="Third" >Content 3</mat-tab> </mat-tab-group>
Resultaat
Hoe scoren de frameworks op de criteria
React
Code | Aspect | Cijfer | Toelichting | Bron |
---|---|---|---|---|
CR1 | Documentatie | 7 | Omdat React ongeveer de grootste front-end framework is kun je op onder andere stackoverflow genoeg hulp vinden maar omdat het zo snel groeit wordt niet alles gedocumenteerd | https://www.sam-solutions.com/blog/best-frontend-framework/#3 |
CR2 | Ervaring | 7 | Er zijn een 2 teamleden die al eerder gewerkt hebben met react maar er geen grote fan van zijn | - |
CR3 | Prestatie | 8 | React is één van de snelste frameworks door het gebruik van de virtual DOM | https://jelvix.com/blog/is-react-js-fast#:~:text=Engineering-,React.,optimal%20choice%20for%20interactive%20design. |
CR4 | Prototype | 9 | Omdat er genoeg hulpbronnen bestaan kon ik de prototype snel maken | |
CR5 | Onderhouden | 9 | React is wordt erg vaak geupdate | https://www.sam-solutions.com/blog/best-frontend-framework/#3 |
jQuery
Code | Aspect | Cijfer | Toelichting | Bron |
---|---|---|---|---|
CR1 | Documentatie | 5 | De documentatie van de DOM is outdated | https://www.monocubed.com/blog/best-front-end-frameworks/ |
CR2 | Ervaring | 3 | Niemand in het projectgroep heeft ervaring met jQuery er zijn er wel een aantal die een beetje kennis hebben van javascript | - |
CR3 | Prestatie | 3 | Omdat jQuery relatief oud is is de performance nogal laag | https://www.sam-solutions.com/blog/best-frontend-framework/#3 |
CR4 | Prototype | 5 | In tegenstelling tot react kon ik niet zoveel vinden als jQuery en duurde dus ook een stuk langer | - |
CR5 | Onderhouden | 5 | API van jQuery is nogal outdated en jQuery wordt niet vaak geupdate | https://www.sam-solutions.com/blog/best-frontend-framework/#3 https://www.monocubed.com/blog/best-front-end-frameworks/ |
Vue
Code | Aspect | Cijfer | Toelichting | Bron |
---|---|---|---|---|
CR1 | Documentatie | 10 | Ik kon genoeg video's en hulp vinden voor het maken van de prototype | https://www.sam-solutions.com/blog/best-frontend-framework/#3 |
CR2 | Ervaring | 6 | We hebben een workshop gehad over vue | - |
CR3 | Prestatie | 10 | Vue is erg snel omdat het een nieuwe framework is en de wrappers extreem snel zijn | https://www.sam-solutions.com/blog/best-frontend-framework/#3 |
CR4 | Prototype | 5 | de syntax is erg nieuw maar er is genoeg documentatie | - |
CR5 | Onderhouden | 8 | Vue heeft tussen de 1 en 3 maanden een update en is 1 van de meest progressieve frameworks | https://endoflife.date/vue |
Angular
Code | Aspect | Cijfer | Toelichting | Bron |
---|---|---|---|---|
CR1 | Documentatie | 10 | Ik kon genoeg video's en hulp vinden voor het maken van de prototype | https://www.sam-solutions.com/blog/best-frontend-framework/#3 |
CR2 | Ervaring | 7 | We hebben een workshop gehad en het lijkt een beetje op java | - |
CR3 | Prestatie | 8 | Angular is snel omdat het gebruik maakt van two way databinding | https://www.sam-solutions.com/blog/best-frontend-framework/#3 |
CR4 | Prototype | 8 | Het heeft iets weg van java en er bestaat genoeg documentatie | - |
CR5 | Onderhouden | 8 | Angular heeft elke paar maanden weer een nieuwe update | Meron Brouwer (Nuttshelltalk angular) |
Conclusie
Door de cijfers bij elkaar op te te tellen en de wegingsfactor toe te passen hebben we een shortlist opgesteld.
Framework | Punten |
---|---|
React | 79 |
jQuery | 42 |
Angular | 81 |
Vue | 71 |
Je ziet al snel dat één framework al door de mand zakt. Dit is jQuery. Dit komt omdat jQuery relatief gezien erg oud is. In vergelijking met de andere frameworks kun je ook niet heel veel vinden. Vue heeft net iets minder punten dan angular en react. Dit komt omdat de syntax op vue niet lijkt op iets dat we eerder gebruikt hebben en het dus ook even gaat duren voor dat we hier bekend mee raken. Tussen react en Angular zitten maar 2 punten verschil. Het voordeel van react is dat het veruit de grootste framework is en je hier dus ook het meeste hulp bij kan vinden. Het voordeel van Angular is dat het meest lijkt op de technieken waar we bekend mee zijn en hier dus snel mee aan de gang kunnen. Ook hebben we hier een workshop over gehad en kunnen we bij eventuele vragen bij Meron brouwers aankloppen. Een ander voordeel is dat angular een integratie heeft voor google charts die als winnaar uit het onderzoek van de graphs komt. Daarom is Angular het antwoord op onze hoofdvraag: Welke front-end framework past het best bij ons project?
Bronnen
Angular. (z.d.). https://angular.io/
sam solutions (z.d.) https://www.sam-solutions.com/blog/best-frontend-framework/#3
monocubed (z.d.) https://www.monocubed.com/blog/best-front-end-frameworks/
endoflife(z.d.) https://endoflife.date/vue
jelvix(z.d.) https://jelvix.com/blog/is-react-js-fast#:~:text=Engineering-,React.,optimal%20choice%20for%20interactive%20design.