Door Jeroen Groeneweg

Responsive web design

Tweakers-rwd onder de loep

08-06-2014 • 09:00

182

Multipage-opmaak

Inleiding

Het is ondertussen alweer meer dan een jaar geleden dat Tweakers 7, de huidige website, het levenslicht zag. Voor de ontwikkeling van deze toch wel ingrijpende transformatie moest de scope van het project nauw gedefinieerd worden. Hierdoor viel sommige functionaliteit die we initieel voor ogen hadden helaas buiten de boot. Anderzijds konden we Tweakers 7 hierdoor tijdig online zetten en daarop, zoals het een modern scrum-team betaamt, de aanvullende functionaliteit agile opleveren. In het afgelopen jaar is er dan ook flink gesleuteld om Tweakers 7 zo functioneel en strak mogelijk te maken en zowel de oude Tweaker als de nieuwe bezoeker zich welkom te laten voelen in een vertrouwde omgeving.

Al die tijd bleven er echter twee grote aanpassingen achterwege. Zowel de mobiele website als de smartphone-apps bleven achter op de grote veranderingen die met, maar ook na Tweakers 7 werden geïntroduceerd. Niet alleen de lay-out was toe aan een update, ook qua functionaliteit lieten de huidige apps en de mobiele website te wensen over. Dit probleem is niet onopgemerkt gebleven en was ook menig gebruiker een doorn in het oog. Om deze reden is in de afgelopen maanden hard gewerkt aan een alternatief voor zowel de apps als de mobiele website, in de vorm van een responsive design.

RWD Navigatie Nexus 5

Inmiddels zijn velen al gewend aan het responsive design. Dit is echter niet zonder slag of stoot gegaan en we hebben ons dan ook vaak afgevraagd of we wel de juiste richting insloegen door ons op responsive webdesign te storten. In dit achtergrondartikel willen we de voors en tegens van het gebruik van responsive webdesign met jullie delen, maar ook de obstakels waar Tweakers tegenaan liep bij het toepassen van responsive op een al bestaande website.

Wat is responsive design precies?

Responsive webdesign, verder rwd genoemd, is een techniek waarbij de content van een website zich aanpast aan de grootte van de viewport van het device waarop de content bekeken wordt. Dit kan een tablet zijn of een smartphone, maar ook een 40”-tv of een display op een koelkast met internetaansluiting. Het idee hierachter is dat content altijd optimaal toegankelijk is, ongeacht het device waarmee de content opgevraagd wordt. Je kunt je voorstellen dat een website met veel informatie, zoals Tweakers, op een device met een kleiner scherm, zoals een smartphone, een andere lay-outvoorkeur geniet dan op een full-hd-desktopmonitor.

Rwd is eigenlijk een verzamelnaam voor een aantal technieken, zoals schaalbare afbeeldingen en media-elementen, fluid grids en CSS3-mediaqueries. De term rwd stamt alweer uit 2010 en is afkomstig van Ethan Marcotte. Hij beschrijft responsive webdesign in 2011 in zijn gelijknamige boek, waarna het in 2012 echt doorbrak. De techniek is nog relatief jong en veel pioniers zijn zoekende naar best practices en do's en don'ts. Ook bij Tweakers zijn we tegen de nodige vragen en problemen aangelopen, maar gezien de enorme populariteit van rwd zijn er, op wat kleine haken en ogen na, genoeg oplossingen te vinden.

RWD

Waarom responsive?

De keuze voor een responsive website was geen makkelijke, maar na uitvoerig onderzoek was het in onze optiek wel de juiste. Het onderhouden van diverse smartphoneapplicaties op verschillende platforms is een tijdrovende en kostbare bezigheid, waarbij je ook nog kennis in huis moet hebben van de verschillende ontwikkelplatforms. Zo wordt de iOS-applicatie in objective-C geschreven, waar dit voor Windows Phone in C# en .Net gebeurt. Bij Android is weer kennis van java en de Android-sdk nodig. Niet alleen zijn de verschillende talen en de benodigde tijd een probleem, ook het feit dat er naast de codebase van de website nog eens nieuwe code geschreven en onderhouden moet worden voor effectief dezelfde functionaliteit, is menig ontwikkelaar een doorn in het oog. De tijd, kosten en codebase voor het ontwikkelen van nieuwe functionaliteit binnen Tweakers zouden met elke extra smartphone-app verdubbelen, een onwenselijke situatie dus.

Feitelijk is het niet meer dan een extra laag CSS en javascript op een bestaande basisEen van de redenen om voor responsive te gaan was de wens om vanuit een enkele codebase te werken en dat kan prima met responsive. Feitelijk is het niet meer dan een extra laag CSS en javascript op een bestaande basis. Bijkomend voordeel is dat nieuwe functionaliteit op de website vrijwel direct ook doorgang vindt op je mobiele device, zodat updates snel en platformonafhankelijk uit te brengen zijn.

Toch brengt responsive niet enkel voordelen met zich mee. Omdat een responsive website iets heel anders is dan een mobiele applicatie, zijn er ook nadelen. Bij responsive hebben we bijvoorbeeld amper tot geen mogelijkheden om functies als push-notificaties te gebruiken of andere native functionaliteiten voor mobiele besturingssystemen. Smartphone-apps hebben daarnaast een uniforme gebruikservaring over het hele platform, wat het gebruiksgemak ten goede komt. Daarnaast hebben smartphone-apps geavanceerde cachingmogelijkheden, zodat dataverbruik geminimaliseerd kan worden. Er wordt immers gebruikgemaakt van lokale content.

Laadtijden zijn altijd erg belangrijk geweest voor Tweakers. Tweakers heeft dan ook goed gekeken naar de nadelen en ze zoveel mogelijk proberen in te perken. Dat gaat natuurlijk niet enkel op voor een smartphone, maar ook voor een desktop. Dit is een van de redenen dat er nooit gekozen is voor een kant-en-klare javascript-library, zoals jQuery of Mootools, maar voor een kleinere en snellere, in huis ontwikkelde library. Deze trend wilden we doorzetten met responsive om een zo snel mogelijk functionerende gebruikservaring neer te zetten.

De overige nadelen wegen niet op tegen de voordelen die responsive Tweakers biedt. Tegelijk sluiten we applicaties nog niet volledig uit. We zullen in de toekomst kijken waar de meerwaarde van een smartphoneapplicatie ligt en welke functionaliteit deze zou moeten bieden. Wij zien een app als een verlengstuk van een website en niet als een vervanger daarvan.

Bestaande methoden

Rwd mag dan een jonge techniek zijn, het is de kinderschoenen ruimschoots ontgroeid. Er zijn diverse manieren om rwd te implementeren. De bekendste is het zogenoemde mobile first. Bij mobile first wordt de website opgebouwd vanuit de kleinst mogelijke viewport, vaak een smartphone. Hierna wordt de content opgeschaald en verplaatst naarmate de viewport in omvang toeneemt. Op deze manier is de content voor elk type device geprioriteerd en geoptimaliseerd. Mobile first gaat er echter wel vanuit dat je de front-end van een website van de grond af opbouwt. Vaak zie je dan ook of een website met mobile first in het achterhoofd is ontwikkeld en de desktop een lagere prioriteit heeft genoten. Dat dit een veelvoorkomende opvatting is, zegt overigens niet dat een mobile first website altijd onderdoet voor websites die vanuit een ander vertrekpunt zijn opgezet.

mobile first

Helaas is mobile first voor een bestaande website als Tweakers geen optie. Tweakers beschikt uiteraard al over de nodige front-end-code en de website volledig opnieuw opbouwen zou onnodig veel werk met zich meebrengen. Daarom is er uiteindelijk voor gekozen om de bestaande pagina's te retrofitten. Retrofitten is niet meer dan de pagina's zodanig aanpassen dat ze op allerhande formaten zo goed mogelijk tot hun recht komen. In veel gevallen zijn lay-outs ten tijde van het retrofitten statisch en op pixels gebaseerd. Hoewel dit niet direct een probleem hoeft te zijn, kan het moeilijkheden opleveren als je gebruik wil maken van fluid grids. Deze grids gaan uit van schaalbare elementen, in procenten of 'units', gebaseerd op de gebruikte lettergrootte.

Uiteindelijk heeft Tweakers ervoor gekozen om gebruik te maken van een viertal breakpoints op basis van mediaqueries. Deze breakpoints definiëren de maximale breedte van de viewport voordat naar een andere grade wordt geswitcht. Daarbinnen wordt zoveel mogelijk gewerkt met fluid-grid-elementen. Dit is simpelweg bereikt door de content op te delen in losse blokken en deze een procentuele breedte te geven. Daarnaast is er een vorm van overerving binnen de css gecreëerd, zodat verschillende grades van elkaar kunnen profiteren en er niet voor iedere grade een aparte styling gedefinieerd hoeft te worden. Hoe dit precies in elkaar zit, zie je in Mediaqueries en device grades en Javascript behaviour en hooks.

Naast mobile first en retrofitting zijn er ook legio boiler templates en responsive frameworks te vinden, die je het leven makkelijker kunnen maken. JQuery biedt mobile aan als javascript-library, Twitter kwam met bootstrap, een front-end framework om aan de hand van voorgedefinieerde templates snel een responsive lay-out op te zetten, en zo zijn er nog vele andere, bekende en minder bekende hulpmiddelen voor het opzetten van een rwd. In dit artikel gaan we niet verder in op deze bestaande frameworks en templates, aangezien Tweakers er geen gebruik van maakt. Wel gaan we in op mediaqueries in het algemeen, een techniek waarmee veel van deze frameworks werken, en kijken we naar de onderliggende problemen en oplossingen met behulp van javascript.

Visie en scope

Uiteraard zijn we niet direct de code ingedoken, maar hebben we eerst uitvoerig bekeken hoe we ons rwd-proces het beste konden indelen. Er is gekeken naar de verschillende methoden, maar ook naar de diverse devices die de bezoekers van Tweakers gebruiken. Er is gekeken naar de verschillende formaten schermen en resoluties, maar ook naar de bestemmingen die veelvuldig bezocht of juist minder bezocht worden met andere apparaten dan een desktop-pc. Hieruit hebben we heel wat lering getrokken en uiteindelijk hebben we een hoofdrichtlijn opgesteld die dient als rode draad voor het project:

  • Mijn schermformaat geeft niemand inzicht in mijn intenties of mijn verlangens

Voor nu is ervoor gekozen om alle hoofdbestemmingen op te leveren, inclusief het forum

Ook dit project moesten we strak afbakenen om zo snel mogelijk een resultaat te kunnen vrijgeven en stapsgewijs verder te ontwikkelen. Voor nu is ervoor gekozen om alle hoofdbestemmingen op te leveren, inclusief het forum. Sinds Tweakers 7 is een groot deel van de legacy-code opnieuw geschreven en opgebouwd in Symfony2. Deze pagina's delen ook veel css en javascript, waardoor het opzetten van rwd hiervoor gemakkelijker ging dan het opzetten van de pagina's in het oude Tweakers-framework. Dit was onder andere te merken bij de Download-sectie (Meuktracker). Die bestemming was niet direct met Tweakers 7 omgezet naar Symfony 2. Toen we dat later alsnog deden, was het ook eenvoudig om het meteen responsive te maken.

Helaas zijn nog een hoop delen van de website niet in Symfony2 opgenomen. Zo hangen de profielen nog steeds in het oude framework, maar ook de benchmarks en my.tnet-pagina's zijn nog niet omgezet. Deze worden in de komende sprints dan ook langzaam en stapsgewijs responsive gemaakt en opgeleverd.

Mediaqueries en device grades

De oudste pagina's op internet waren eigenlijk al responsive. Responsive is uiteindelijk niets meer dan content optimaal beschikbaar maken voor allerhande schermen. Als we kijken naar html-tabellen, doen die in principe precies dat. Een tabel pakt standaard de volledige breedte van zijn parent. Een satirisch voorbeeld van de hedendaagse complexiteit van rwd is terug te zien op deze site, die wellicht nsfw is, vanwege grof taalgebruik. Het gaat hier om een complete responsive website zonder frameworks, mediaqueries en alternatieve stylesheets. Een dermate simpele opbouw is uiteraard niet besteed aan een site als Tweakers.net, maar het zet wel aan tot denken over complexiteit en designkeuzes.

Om Tweakers ook op mobiel zo snel mogelijk te houden is dan ook besloten zoveel mogelijk met css te werken en javascript als laatste redmiddel te benutten. Dit heeft als voordeel dat er minder reflow zal plaatsvinden en de pagina snel zal laden. Smartphones zijn voorlopig nog niet zo krachtig als desktopcomputers, waardoor de verwerking van javascript zoveel mogelijk ontzien moet worden. Binnen die css wordt gebruikgemaakt van mediaqueries om bepaalde breakpoints te definiëren. Wij hebben gekozen voor vier breakpoints, namelijk A, B, C en D. Deze mediaqueries zijn als volgt gedefinieerd:

/* Device grade: A */
@import "responsive/devicegrade_a.css"
/* tablet 10" in landscape or Desktops */
(max-device-width: 1023px) and (orientation: landscape);

/* Device grade: B */
@import "responsive/devicegrade_b.css"
/* tablet 10" in portrait */
(max-device-width: 1023px) and (orientation: portrait),
/* tablet 7" in landscape */
(max-device-width: 767px) and (orientation: landscape);

/* Device grade: C */
@import "responsive/devicegrade_c.css"
/* tablet 7" in portrait */
(max-device-width: 767px) and (orientation: portrait),
/* Smartphones in landscape */
(max-device-width: 499px) and (orientation: landscape);

/* Device grade: D */
@import "responsive/devicegrade_d.css"
/* Smartphones in portrait */
(max-device-width: 499px) and (orientation: portrait);

De breakpoints zijn gedefinieerd op een pixel and orientation-basis. Hedendaagse smartphones hebben echter vaak een full-hd-resolutie. De Nexus 5 heeft bijvoorbeeld al 1080x1920 pixels. Toch wordt hij als een smartphone herkend en valt hij dus in grade D of C, afhankelijk van de oriëntatie. Dit komt door de device-pixelratio. Een Nexus 5 heeft een device-pixelratio van 3. 1920/3 = 640 1080/3 = 360. De Nexus 5 geeft dus door dat hij 640x360 pixels ter beschikking heeft. Hierdoor zal de juiste mediaquery getriggerd worden. Dit verschil wordt ook aangeduid als hardware vs software pixels.

Op het moment van schrijven is grade B nog niet geïmplementeerd, omdat deze simpelweg van minder belang was dan grade C en D. Grade A is de desktopwebsite, zoals je die gewend bent van Tweakers. Ook bij het rwd-project was een strakke afbakening nodig om een Duke Nukem Forever te voorkomen. In de komende tijd wordt er dus ook gewerkt aan grade B voor grote tablets.

Er was een strakke afbakening nodig om een Duke Nukem Forever te voorkomen

De gedefinieerde mediaqueries leiden enkel tot breakpoints, momenten waarop de lay-out anders ingedeeld kan worden. Binnen deze grades schaalt de lay-out simpelweg in de breedte om op alle devices de volledige schermruimte te benutten. Alleen op de desktop is sprake van een maximale breedte om de content leesbaar te houden. Wel wordt er gekeken naar de optie voor een extra grade boven A voor bijvoorbeeld smart-tv's met 42”-4k-schermen, maar dat is nog toekomstmuziek.

Ieder breakpoint dat met een mediaquery wordt gedefinieerd, duiden we aan als een device grade. Device grades hebben we intern laten corresponderen met bepaalde typen devices, zoals smartphones, tablets, laptops of tv's. De styleheets worden alfabetisch geladen van devicegrade_a.css tot en met devicegrade_d.css. Hierdoor is een in devicegrade_c.css gedefinieerde stijl ook van kracht als men zich op grade D bevindt. Elk opvolgende stylesheet overschrijft dus enkel de benodigde elementen voor die grade. Omdat een apparaat dat maximaal 767px breed is (grade C) ook binnen 1023px breed (grade B) valt, zijn de stylesheets van A en B ook beschikbaar als je bij ons in grade C valt. Daardoor hoeven we niet alles opnieuw te definiëren in C, maar kunnen we ons beperken tot aanpassingen daarop, bijvoorbeeld:

devicegrade_c.css:

#categoryBrowser .images li {
-moz-box-sizing: border-box;
border-right: 0 none;
float: left;
height: auto;
padding: 0;
width: 50%;
}

devicegrade_d.css:

#categoryBrowser .images li {
float: none;
width: auto;
}

In devicegrade_d.css zijn de list-items in #categoryBrowser al voorzien van alle relevante styling, zoals aangegeven in devicegrade_c.css. Op grade D willen we echter enkele waardes overschrijven. Zo willen we niet twee lijsten naast elkaar maar, wegens de beperkte ruimte op een smartphone, simpelweg een enkele lijst. Hiervoor zetten we de width in grade D dus op auto in plaats van 50 procent en verwijderen we de float. De padding en box-sizing komen netjes mee van de parent en hoeven dus niet opnieuw gedefinieerd te worden.

categorybrowser grade_ccategorybrowser grade_d

Categorybrowser op grade C en D

Javascript-behaviour en -hooks

Mediaqueries zijn ideaal voor het definiëren van breakpoints, maar met enkel mediaqueries wordt een pagina erg statisch en aangezien het op kleinere viewports al moeilijk genoeg is om content optimaal weer te geven, is er meer nodig. Javascript is op elke moderne smartphone aanwezig en bij uitstek geschikt om content net wat mooier en functioneler te presenteren. Tweakers beschikt over een zelf ontwikkelde javascript-library, die we met relatief eenvoudige aanpassingen hebben uitgebreid, ter ondersteuning van onze rwd-implementatie.

Bij het inzetten van javascript liepen we tegen een aantal problemen aan. In css weten we bijvoorbeeld prima binnen welke grade we ons bevinden door gebruik van de mediaqueries. In javascript zouden we dit ook graag willen weten. Daarnaast zijn events als orientation change en het veranderen van een grade ook dingen waarvan je je binnen javascript bewust wil zijn. Een tablet kan immers van grade D naar grade C veranderen als je hem simpelweg een kwartslag draait. Op basis daarvan wil je additionele javascript kunnen uitvoeren.

Om ons in javascript bewust te worden van de actieve devicegrade, gebruiken we momenteel window.matchmedia in combinatie met een fall-back, waarbij css een width op een div zet met een bepaalde waarde om deze vervolgens in javascript uit te lezen. Zo worden ook browsers ondersteund die matchmedia nog niet hebben geïmplementeerd.

var currentDeviceGrade = 'A', gradeConfig = [],
initGradeConfig
= function(){
var stylesheets = Selector('link[rel=stylesheet]'), i = stylesheets.length, m;
while(i--){
if((m = stylesheets[i].href.match(/responsive_(w).css/))){
gradeConfig
.push({
grade: m[1].toUpperCase(),
media: stylesheets[i].media
});
}
}
},
getDeviceGrade
= function(){
if(window.matchMedia){
return getDeviceGradeByMediaQuery();
}
return getDeviceGradeByElement();
},
getDeviceGradeByMediaQuery = function(){
var i = 0, gc;
while((gc = gradeConfig[i++])){
if(window.matchMedia(gc.media).matches){
return gc.grade;
}
}
return 'A';
}

Fall-back als matchmedia niet wordt ondersteund:

getDeviceGradeByElement = function(){
var gradeElement = getById('devicegrade');
if(!gradeElement){
gradeElement
= document.createElement('div');
gradeElement
.id = 'devicegrade';
gradeElement
.style.cssText = 'position:absolute;top:-100px';
document
.body.appendChild(gradeElement);
}
switch
(gradeElement.offsetWidth){
case 30:
return 'D';
case 20:
return 'C';
case 10:
return 'B';
}
return 'A';
}

Bestaande javascript-functionaliteit kan nu eenvoudig nagaan wat de huidige devicegrade is door middel van een simpele Responsive.getCurrentDeviceGrade()-aanroep. Hoewel dit logisch en duidelijk is, is het niet handig om specifiek gedrag voor een responsive weergave te combineren met gedrag voor de gewone weergave. Dit maakt de code namelijk nodeloos complex en lastiger onderhoudbaar. Daarom passen we specifieke javascript-behaviours voor responsive zoveel mogelijk op een onopvallende manier toe; zeg maar als een soort add-on, waarbij we zo min mogelijk dingen aanpassen aan bestaande code.

Om dit te bewerkstelligen haken we op verschillende manieren in op bestaande code. Een van die manieren is overloading, waarbij we bijvoorbeeld een extra functie aan een bestaande functie of methode toevoegen:

function overload(obj, method, func)
{
	var originalFunc = obj[method];
	
	obj[method] = originalFunc ? function()
	{
		originalFunc.apply(obj, arguments);
		func.apply(obj, arguments);
	} : func;
}

Een andere manier is door gebruik te maken van custom events. Hierbij laten we bestaande code een event triggeren en kunnen we hieraan vanuit de responsive code listeners toevoegen die daarmee vervolgens iets specifieks kunnen doen:

if (window.filterForm)
{
	window.filterForm.addEvent('onAfterUpdate', checkActiveFilters);
}

Ook andersom kunnen we bestaand gedrag triggeren vanuit responsive code door middel van global custom events. Onze sliders bijvoorbeeld hebben een resize method, die door middel van een custom event kan worden getriggered vanuit de responsive code:

// resize all sliders on grade change
Selector('.sliderControl').forEach(
	function(el)
	{
		triggerCustomEvent(el, 'resize');
	}
);

Gemaakte keuzes en afwegingen

Gedurende het ontwikkelen van de rwd-versie van Tweakers zijn we diverse problemen tegengekomen. Hoe ga je bijvoorbeeld om met grote afbeeldingen? Hoe schaal je video's netjes voor een smartphone? Wat als een gebruiker geen responsive lay-out wil of simpelweg de verkeerde grade op een bepaalde device te zien krijgt? Waar laten we navigatie-elementen en wat heeft de hoogste prioriteit op een scherm waarop niet alles getoond kan worden wat er op een desktop te zien is? Een ding was zeker, een rwd mag een gebruiker nooit limiteren in wat hij wel en niet kan doen op een website. Simpelweg elementen verbergen of functionaliteit uitschakelen op een bepaalde grade is dan ook geen optie.

Een rwd mag een gebruiker nooit limiteren in wat hij wel en niet kan doen op een website

Het opzetten van rwd is uiteindelijk een groot onderzoek geworden naar wat het beste werkt op welke devicegrade. Zo hebben we er af en toe toch voor gekozen bepaalde elementen binnen het dom te verplaatsen, omdat het simpelweg de bruikbaarheid op die desbetreffende grade ten goede kwam. Gewoon alles een variabele width en float left geven levert wellicht een grotendeels functionelere responsive pagina op, maar is alles behalve gebruiksvriendelijk.

Afbeeldingen

Helaas is er nog geen geschikte manier om binnen een responsive website kleinere afbeeldingen te serveren dan in de desktopvariant. Naast het feit dat we hier aan het retrofitten zijn en de afbeeldingen dus al zijn geladen voor een desktopwebsite, heeft de server geen weet van de device en viewport van de eindgebruiker. Er zijn methodes om afbeeldingen afhankelijk van de devicegrade te laden, maar dit heeft weer als nadeel dat het een extra request kost en enkel werkt voor mensen die javascript hebben aanstaan. Downscalen is natuurlijk een optie, maar hierbij wordt nog steeds de volledige afbeelding gedownload en dat kost bandbreedte. Uiteindelijk is hier toch voor gekozen en worden image-galeries en losse afbeeldingen nu met een procentuele breedte weergegeven.

Video

Voor video's is grotendeels dezelfde keuze gemaakt als voor afbeeldingen. Helaas bleek hier een variabele breedte niet genoeg om tot het gewenste resultaat te komen. Browsers lieten wisselende resultaten zien, waarbij soms de hoogte van de video niet evenredig geschaald werd of waarbij zelfs de volledige verticale beschikbare ruimte gebruikt werd. Dit is uiteindelijk opgelost door een wrapper div met de volgende css:

.video-wrapper {
    position: relative;
    width: 100%;
    height: 0;
    padding-bottom: 56.25%;
    overflow: hidden;
}

.video- wrapper object,
.video- wrapper embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100% !important;
    height: 100% !important;
}

Navigatie

Een belangrijk aspect van een goede rwd-ervaring is de navigatie. Er zijn hierover boeken volgeschreven en er zijn dan ook talloze voorbeelden, design patterns en best practices over dit specifieke onderwerp te vinden. Uiteindelijk is gekozen voor de bekende hamburger-buttons om de uitgebreide navigatie van Tweakers onder te huisvesten. Links de hoofdnavigatie en rechts de gebruikermenu's. Om alles optimaal te maken is er wel voor gekozen om de zoekfunctionaliteit, berichten en notificaties in de header te houden. Dit kan echter wisselen tussen grade C en grade D, waarbij in verband met de beschikbare ruimte wat concessies gedaan moesten worden en enkele elementen onder het gebruikersmenu geplaatst zijn.

Devicegrade forceren

In de weergaveopties wordt de mogelijkheid aangeboden om een gebruiker de reguliere mediaqueries te laten onderdrukken en zodoende zelf een voorkeursgrade in te stellen. Het is immers de gebruiker die bepaalt hoe hij zijn content het liefst wil consumeren. Alleen al hierom is een desbetreffende functionaliteit een must om goed te implementeren. De voorkeuren van een gebruiker worden opgeslagen in zijn sessie om bij het bootstrappen van de website uitgelezen te worden. Dit moet gebeuren voordat alle javascript en css is ingeladen, aangezien naderhand onderdrukken geen optie is. De mediaqueries worden dan ook dynamisch gegenereerd vanuit php.

<?php
// Skip when responsive is disabled otherwise
if( ! ResponsiveService::shouldServeResponsive())
    return;

// Check if we have a forced grade
$forcedGrade = ResponsiveService::getForcedResponsiveGrade();

// ignore 'auto' forced grade
if($forcedGrade == ResponsiveConfig::gradeAuto)
    $forcedGrade =null;

// Add CSS files
foreach(ResponsiveConfig::$cssFiles as $grade=>$cssFile)
{
    if($forcedGrade)
        $fg= AssetManager::cssMediaScreen;
    else
        $fg= ResponsiveUtil::getMediaQueryForGrade($grade);

    if($cssFile)
        $this->assetManager->addStyle($cssFile, $fg);

    // break when current grade is also a forced grade
    if($grade==$forcedGrade)
        break;
}
?>

Tot slot

De traffic van mobiele apparaten blijft stijgen en voorlopig zien we daaraan ook nog geen einde komen. De desktop overheerst nog, maar wordt langzaam ingehaald door smartphones, kleine laptops en tablets. Tot die tijd blijft Tweakers in ieder geval actief verder ontwikkelen aan alle grades die het nu biedt en meer. Wij geloven dat responsive een gevestigde techniek is die nog flink zal groeien.

Graag vernemen we jullie problemen, ondervindingen, overwinningen, geneugten en tegenslagen. Vragen mogen uiteraard geplaatst worden in het Forum, waar ook wij zullen proberen die zo veel mogelijk te beantwoorden.

rwd comic

Reacties (182)

182
179
153
11
0
3
Wijzig sortering
Ik heb nog een 3 jaar oude smartphone met 1GHz SOC en ik moet wel zeggen dat sinds de switch naar responsive design ik bijna niet meer de reacties op tweakers lees omdat dit enorm traag gaat. Nuja als ik ooit eens een nieuwe koop zal dit wel een pak vlotter werken.

Mochten jullie nog een App overwegen bekijk zeker eens adobe PhoneGap:
http://phonegap.com/ je schijft uw code in HTML5,CSS, javascript upload deze en Adobe compileert de packages voor elk platform je maar wenst BlackBerry, IOS, Android, Windows Phone,..
Zelf ben ik niet echt weg van Phonegap. Het is een vrij traag systeem wat cross-platform maar matig werkt (vaak ben je nog handmatig per platform bezig met implementaties van notificaties, localstorage of andere device-verschillen). Verder zijn niet alle zaken even geweldig uitgewerkt en zit er al lange tijd een probleem binnen de community om eens rigorous te veranderen. Zeker als je WP8 erbij betrekt ben je aardig lang aan het kloten om alles goed te laten werken en dat komt vooral omdat bepaalde settings gewoon niet goed werken of dat je niet er vanuit kunt gaan dat hij werkt zoals je voor ogen had.

Daarom is het eigenlijk ook wel jammer dat er nog geen alternatief is voor dit soort hybride apps want het heeft zeker wel een toekomst. Ik kan echter Phonegap (of Cordova eigenlijk) specifiek niet echt aanraden, puur omdat het eigenlijk nog wel een bende is die niet lekker cross-platform werkt. Er is het afgelopen jaar veel verbeterd, maar er is nog een lange weg te gaan. Het houdt mij in ieder geval tegen om de appstores op te zoeken en gebruik liever een website die je aan je startscherm vastpint om een gebruikservaring te bieden.
Natuurlijk, je zult absoluut per platform nog steeds werk te doen hebben, maar vergelijk phonegap met hoeveel werk het orgineel kostte om native per platform apps te maken. Nu, er zijn wel een aantal voorwaarde die nodig zijn om het prettig te doen werken.

Ten eerste je te beperken tot webkit browsers bespaard al rond de 10 tot 30 procent van de ontwikkel tijd (firefox OS lukt nog wel, maar de touch versie van IE was nog flink rot de laatste keer dat ik er mee bezig ging).

Ten tweede niet de standaard phonegap/cordova te gebruiken voor android, maar de intel versie: crosswalk (chromium build ipv native browser). Met crosswalk op android heb je ook echt geen enkel nadeel vergeleken met een chrome app die je vastpint en wel een hele serie voordelen: hij zit in je applicatie menu, nette icoontjes in het applicatie overzicht en natuurlijk indien gewenst toegang to systeem API's.

En ten derde geen phonegap API's te gebruiken als er ook HTML5 api's zijn die hetzelfde kunnen. Dat valt een beetje samen met punt 1, want zodra je er IE bij betrekt worden veel van de nieuwe features niet gesupport (of gedeeltelijk alleen zoals met indexedDB). Plus, en dit valt samen met punt 2, als je het netjes doet is je app ook gewoon nog steeds als mobiele app bruikbaar (exclusief bijvoorbeeld push notificaties die alleen op de app werken).
Met betrekking tot de reacties - ik weet niet of dit bij andere ook voorkomt - maar zodra ik een reactie probeer "uit te klappen" op mijn telefoon dan loopt alles vast, soms wel voor 10-15 seconde. Dat is dusdanig storrend dat ik, net als Attixx, de reacties niet eens meer lees op mijn telefoon. En dat terwijl ik toch meestal op Tweakers zit voor de reacties (als het om nieuws gaat).

Overigens gebruik ik een Nexus 5 met Android KitKat, mocht dat relevant zijn.

Interessant artikel verder - zie graag meer achterrrond artikelen over trending topics op dit gebied (zowel design als development).

[Reactie gewijzigd door Mmore op 22 juli 2024 14:30]

Een ingeklapte reactie is van to voren niet geladen. Als je een reactie uitklapt, dan wordt de content pas geladen met AJAX. Tweakers heeft hier helaas gekozen om dit synchroon te gaan laden. Hierdoor staat alles "stil", totdat de Javascript klaar is en de reactie op je scherm staat.
De laadtijd van de reactie hangt af van je internetsnelheid. Bij een trage verbinding duurt het langer, voordat de Javascript klaar is.
Ik moet zeggen dat t hier op vakantie met een 2 mbit down nog goed te doen is. Ik hoef nauwelijks tot niet te wachten...
Ik heb inderdaad echt het gevoel dat het ergens anders mis gaat. Het is altijd traag, zelfs op een snelle WiFi verbinding. Bij wijze van spreken kan ik 5 keer een andere artikel laden in de tijd dat het openklappen van één reactie gelukt is. 8)7
@hylke94 heeft gelijk. Momenteel worden de ingeklapte reacties synchroon ingeladen wat, zeker in het geval van een minder stabiele dataverbinding, voor time-outs kan zorgen. Deze request Asynchoon maken staat nog op onze ToDo lijst :)
Waarom niet alle reacties per pagina laden en met js een toggle maken in/uitgeklapt. Die paar kb voor de -1 reacties wegen niks itt een dataverbinding opzetten, content laden en de data toevoegen aan de DOM. Zijn allemaal overbodige stappen, meteen inladen is vrijwel onmerkbaar, zeker als je alle html gzipped
Dit zou idd niet veel uit moeten maken op de totale laadtijd van de pagina. En het scheelt weer time-outs bij het laden van verborgen reacties.

Het kan toch ook nooit veel werk zijn om de AJAX-requests asynchroon te maken? In Jquery (gebruiken jullie dus niet ;-)) is het een kwestie van één boolean op true zetten en het werkt...
Dan zou je haast zeggen dat het aan de telefoon ligt. Dat hij niet goed om kan gaan met Javascript.
Maar ik heb hier ook een Nexus 5 en gebruik Chrome Bèta. En hier gaat het allemaal prima.
Dit heb ik ook. Selecteer vaak op de +2 reacties, maar dan wil je wel eens de reactie erboven ook uitklappen. Dat gaat dan zo traag dat je vaak nog een keer drukt en dus alles inklapt...

Nexus 5
Chrome
Wat raar, ik heb ook een Nexus 5 met Chrome maar herken dit probleem niet. Ik heb een cpu meter in mijn taakbalk en die laat zien dat het cpu gebruik niet boven de 20 procent stijgt bij het uitklappen.
Anoniem: 595621 @Cinner8 juni 2014 12:16
Heb ook een Nexus 5, gebruik chrome en ook geen enkel probleem.

@Cinner, die CPU meter is een app zeker? Welke gebruik je?
Ik gebruik al jaren het gratis 'cpu stats' op mijn Android telefoons: https://play.google.com/s...ic%26utm_term%3Dcpu+stats
Ik gebruik ook dezelfde telefoon met Chrome en ik heb geen problemen met het openklappen van reacties. Ik heb het ook even op firefox geprobeerd, daar is duurt het wel langer voordat een reactie wordt getoond als je hem openklapt.
Vreemd, ik gebruik dezelfde telefoon, maar nooit problemen. Overigens gebruik ik Firefox bèta. Probeer eens uit! :) :) :)
Hier hetzelfde probleem, lange laadtijden bij het openen van reacties/menu's in de standaard browser (chrome) op de n5 (1080p).
Probleem is ook herproduceerbaar op een andere telefoon, met dezelfde browser(chrome) op android 4.3 (720p).

Op de blackberry Q10 zijn sowieso de normale laadtijden de pagina minder dan de helft, maar merk je ook heel kort (1/2e) seconden alsof hij even twijfelt of hij m echt moet openen.
Je gebruikt niet toevallig per app modes?
Het instellen van CPU snelheid e.d. specifiek voor een app. Als je hier namelijk een batterij besparend profiel op je brouwser hebt staan dan merk je dat idd erg goed ben ik zelf achter gekomen ... Heb zelf ook een Nexus 5 en gebruik Franco kernel , hij heeft deze per app mode er in zitten, alhoewel deze mode ook los verkrijgbaar is inmiddels via de play store

[Reactie gewijzigd door Gohan040 op 22 juli 2024 14:30]

Als je voor je aan de reacties begint op het -1 symbool drukt in de balk boven de 'volgende pagina' van de reacties, zijn bij mij automatisch alle reacties al uitgeklapt.
Ik blijf het ontzettend jammer vinden dat Tweakers gestopt is met de ontwikkeling van apps. Ik verwacht ook niet meer dat ze dat gaan doen, omdat ze laatst nog paar ontwikkelaars hebben "ontslagen". Tweakers moet eigenlijk een goeie API beschikbaar maken, met deze API kunnen fanatieke tweeakers er mee aan de slag en misschien een leuke app in elkaar schrijven..?

Edit:
Een kleine toevoeging waarom ik het jammer vindt. Een app is sowieso een stuk sneller omdat het native code is en het voordeel van een app is dat bepaalde gegevens in de cash kunnen worden opgeslagen. Deze methode zorgt uiteindelijk voor dat het verbruik van je data bundel lager zal zijn dan dat je de website bezoekt met de browser.

[Reactie gewijzigd door Xieoxer op 22 juli 2024 14:30]

Dat native code sneller is, dat lijkt me wel correct. Overigens vraag ik me wel af: hoeveel sneller? Dus, heb je er effectief last van? Zeker als de website goed ontwikkeld is, waarbij het meeste client-side gedaan wordt, lijkt me dit twijfelachtig.

Je tweede argument, daarvoor geldt iets soortgelijks. Want ook de browser heeft een cache. Statische plaatjes etcetera zullen niet opnieuw worden opgehaald, als het goed is. Dus ik denk dat het effect op je dataverbruik nihil, of in ieder geval veel kleiner is dan je denkt. Sowieso is het bezoeken van een website niet hetgene waar je databundel van op gaat, effectief.
Mee eens. En waarom er nog zo weinig gebruik gemaakt van en/of geexpirimenteerd wordt met html 5 cached apps is mij overigens ook niet duidelijk. http://www.w3schools.com/html/html5_app_cache.asp .
Omdat het in bijna geen enkele browser fatsoenlijk geïmplementeerd is (zeker niet in mobile), waardoor effectief je site gewoon onbruikbaar wordt.
Dat is niet waar, als het niet ondersteund wordt dan wordt er gewoon niet/anders gecachet. Uw app/site blijft gewoon werken. Het enige probleem is dat als er een update is dat users deze niet krijgen omdat alles lokaal op hun device staat.
Je kunt simpelweg een versienummer gebruiken en bij het opstarten controleren wat het laatste versienummer is en dan dingen gaan overschrijven als dit anders is. Dan behoud je caching voor de meeste sessies en heb je maar sporadisch dat je moet updaten. Het updaten van een app vergt meer bandbreedte
Uit de testen die mijn bedrijf gedaan heeft, bleek dat het bijvoorbeeld in Safari & Chrome gewoon soms niet werkt zoals je verwacht. Hierdoor krijg je hele rare quirks, bijvoorbeeld bij het switchen van online naar offline en weer terug. Soms wordt je site dan "onbereikbaar", omdat de browser denkt dat de offline, gecachte versie nog steeds de nieuwste is. De gebruiker kan hier niets tegen doen, want zelfs refreshen levert dan weer de gecachte versie op.
De implementatie in sommige browsers is dus nog niet goed genoeg, waardoor soms gebruikers vast komen te zitten. Vooral vanwege dit punt vind ik het op dit moment onbruikbaar in een productie site.

[Reactie gewijzigd door BCC op 22 juli 2024 14:30]

Bedankt voor je reactie. Nuttig om te weten.
... goed ontwikkeld is ...
Ik heb alle vertrouwen in de ontwikkelaars, maar zodra er UX bij komt kijken ontploft (praktisch) elke specificatie. En in het geval van t.net lees je dat ook terug. Uit mijn eigen ervaring: "Windows 8 style loaders", "iPhone style checkboxes", "Desktop style focus (TAB) gedrag". En tweakers voegt daar de problemen rondom video-playback aan toe.

Een 'klassieke' App heeft als voordeel dat je veel 'ellende' uitbesteed aan de ontwikkelaars van je platform als je het standaardgedrag gebruikt van het platform. De gebruiker is hier ook nog eens gewend en als UX-er hoef je veel minder dingen 'te bedenken'.

Heel persoonlijk: ik zie vaak websites (en t.net is er een van) die (UX-)technisch 'Top' zijn, waar ik amper kritiek kan leveren, waarbij de afwegingen goed gemaakt zijn... maar waar ik als (smartphone) gebruiker gewoon niet echt blij van wordt.
Op een smartphone heb ik amper ruimte, bij een website verlies ik extra ruimte door adresbalken en andere 'controls' en kan ik mijn gewone controls niet meer gebruiken en is het altijd 'zoeken' naar 'hoe is het bedacht'

Kortweg (imho): Kiezen voor een mobiele site ipv. App zet je met 1-0 achter en dan moet je nog beginnen.
Mwoah, het valt reuze mee hoor. Je moet alleen wel weten wat je doet. Zoals je zegt heb je te maken met device implementaties van checkboxes en dropdownlists, maar dat kun je ook afvangen met een eigen stijl en functionaliteit. Beetje zoals jquerymobile dat ook doet, daarbij heb je dat het element verborgen is, maar wel wordt geupdate met wat de GUI aan het doen is. De dropdowns en checkboxes zijn daar gewoon een set divs die op elk platform hetzelfde zijn.

En het voordeel dat je de "ellende" uitbesteed, gaat teniet door het feit dat je dan voor alle platformen weer aparte kennis hebt en je vrijwel niets kunt delen met elkaar omdat het Objective-C vs Java vs .NET is. In feite vind je voor elk platform het wiel opnieuw uit en dat is ook weer niet wat je wilt. Daarom is responsive alleen ook niet genoeg (wat in het artikel ook naar voren komt). Je moet je ook actief focussen op de smartphonegebruikers met de laagste resolutie. Hoe gaan die navigeren, content consumeren en interacteren.

Verder scheelt het enorm veel of je een hybride app gaat maken of een webapp. Die laatste is namelijk wel veel makkelijker omdat je daarbij een veel betere, snellere en correctere site mee kunt weergeven die veel minder snel fouten zal hebben en die je ook nog eens veel makkelijker kunt debuggen.

Ik heb nu een paar Phonegap projecten gedaan en moet zeggen dat het wel beter wordt, maar nog altijd enorm achter loopt op zowel native als webapps. Want je hebt gewoon te maken met een gehandicapte browser. Zeker op oudere devices.
[...]
maar dat kun je ook afvangen met een eigen stijl en functionaliteit.
[...]
En hier sta je dus al met 1-0 achter.
Vanuit UX perspectief wil je zoveel mogelijk dat gebruiker direct begrijpt wat je wilt/hij kan doen. Door eigen stijl en functionaliteit achter bijvoorbeeld checkboxes te bouwen (gekleurde vinkjes, schuifjes, ...) is het maar de vraag of alle gebruikers direct begrijpen wat het is, is het read-only, is het wijzigbaar, is het klikbaar?
Een App heeft standaard componenten waarmee de gebruiker bekend is, of wordt. Wat uniform werkt over verschillende Apps etc.
En het voordeel dat je de "ellende" uitbesteed, gaat teniet door het feit dat je dan voor alle platformen weer aparte kennis hebt en je vrijwel niets kunt delen met elkaar omdat het Objective-C vs Java vs .NET is. In feite vind je voor elk platform het wiel opnieuw uit en dat is ook weer niet wat je wilt.
[...]
Wat jij voorstelt is dat de gebruiker 'dan maar' het wiel opnieuw moet uitvinden, omdat de ontwikkelaar het niet doet.

Dat is een keuze, en heeft veel met budget en capaciteit te maken. Maar dat betekent niet dat de eindgebruiker er daardoor blijer van wordt. Ik (persoonlijk) zou blijer zijn geworden als er een t.net App van vergelijkbare kwaliteit zou zijn geweest, bij de mobiele site had ik al wat 'leer-momentjes'.
... Een app is sowieso een stuk sneller omdat het native code is en het voordeel van een app is dat bepaalde gegevens in de cash kunnen worden opgeslagen. Deze methode zorgt uiteindelijk voor dat het verbruik van je data bundel lager zal zijn dan dat je de website bezoekt met de browser.
Je kan caching in HTML5 ook gebruiken: http://www.sitepoint.com/...-apps-vs-mobile-web-apps/ HTML5 biedt zelfs local database storage aan.
Een ander HTML5 naar app convertor is http://ionicframework.com/ (http://phonegap.com/ en http://cordova.apache.org/ waren al in de reacties aangegeven)

Zeker de moeite waard om eens te bekijken. :Y)
Ionic gebruikt uiteindelijk ook Cordova om apps mee te maken, maar bevat daar bovenop nog een styling framework en wat javascript extenties. Plus dat ze Angular gebruiken als MVC framework. Maar die kun je in principe ook zelf inladen.
En daar is weer Node.js voor nodig. Wat dus al een flink try-and-error-leerproces op zichzelf al is omdat de docs ervan geen een inleiding voor nieuwkomers hebben.
Ik ben zeer blij met het rwd project van Tweakers, even Tweakers in de trein lezen is lekker handig en met het compleet vernaggelde Chromium Webview van Android 4.4+ is de site weer erg bruikbaar. (Google heeft namelijk word wrap eruit gesloopt, een gerucht is dat Google dit doet om web developers naar rwd te sturen, maar ik vind het vooral een bitch move). Resultaat: Comments zijn prima te lezen en ik krijg geen RSI van het constant naar links/rechts scrollen! :)

Ik heb wel een paar vragen bij de beslissingen - zoals jullie het nu doen is het heel simpel om voor andere viewports andere CSSjes in te laden met aangepaste waarden - maar dit kost wel een nieuwe request. Zou het niet sneller/effectiever zijn alles in een enkele CSS te gooien? Als ik Tweakers.net in de Google PageSpeed tool gooi, is dit een van de grotere "ergernissen" van Google. (http://developers.google....nsights/?url=tweakers.net). Ik zie sommige websites zo ver gaan om de hele css in de header van de HTML te gooien, maar dit is waarschijnlijk geen optie voor Tweakers omdat er erg veel pagina's zijn.

Zelf heb ik een soort van homepage met wat links, ik ben onlangs begonnen met het toegankelijk maken van de site voor mijn telefoon en tablets en het valt me toch tegen om alles goed te krijgen. float:left is inderdaad makkelijk voor een enkele layout, maar als je dingen gaat veranderen gooit het roet in het eten. Ook het inladen van externe elemementen is moeilijk - een RSS-feedje van xkcd inladen voor desktop is 1 ding, maar het ding resizen naar mobiele viewports is niet effectief (horizontale strips worden miniscuul) dus heb ik wel besloten om het eruit te laten. Ik ben wel een complete web-amateur, maar het optimaliseren van een grote website voor allerlei formaten aan de hand van puur css en enkele regels javascript is best moeilijk. Daarom: kudos! Persoonlijk heb ik geen klachten, Tweakers.net werkt perfect op mijn telefoon.
Misschien moet je eens kijken naar frameworks als bootstrap, foundation of 960. En dan vooral hoe hun het doen. Daarnaast is het maken van een website altijd zo geweest dat het niet afhankelijk mag zijn van zijn backend. dat wil zeggen, backend en frontend altijd scheiden en proberen zover te gaan dat je een nieuwe ui (een app, website, of programma) er zo voor kan hangen..
Het ding met zulke frameworks is dat ze moeten worden geladen. Ik gebruik jQuery en dat is op zich al een groot iets, al 6x so groot als mijn html/css, dus nog meer toevoegen voor kleine dingen is nogal desastreus. Nog meer omdat dit allemaal op DropBox is gehost en werkend moet zijn op een GPRS verbinding in een bus. Ik moet dus kiezen tussen minimalistisch of mooi, en het liefts beiden. Als het goed is zit in de HTML enkel het scriptje dat RSS feeds fetched wat jQuery nodig heeft, dus die pil zal ik wel moeten slikken.

Het is ook moeilijk om als complete non-webdev/designer simpele "do/don't"s op te zoeken, omdat de meeste tutorials gaan over wat grotere projecten met meerdere dynamisch genenereerde pagina's, en niet een enkele pagina die zo simpel mogelijk wilt zijn.
Ik bedoelde het ook meer als een leuke referentie waarbij je de code kan gebruiken als een voorbeeld. Dit kan je dan vervolgens verwerken in je eigen website.

Maar als het laden van third party scripts zo'n big issue is snap ik niet dat je enkel voor die taak jQuery gebruikt. Waarom ga je niet over op plain javascript? jQuery is nooit iets wat je nodig hebt, maar een hulpmiddel om dingen makkelijker te kunnen doen :P
Het is enkel nodig voor FeedEk, die de RSS feeds inlaadt. Jammer genoeg weet ik geen andere oplossingen die wat simpeler zijn.
Het is het verhaal wat vorig jaar ook bij de Bol-contest was verteld, en zeker leerzaam. Zelf ben ik een aantal vergelijkbare keuzes tegengekomen, en ook wij zijn gaan retrofitten met een aantal breakpoints (eigenlijk maar 1 harde, die bovendien een behoorlijk andere look krijgt, en 1 tussenvorm, een variatie op de oude look met slechts hier en daar een paar aanpassingen.)

Deze uitspraak vond ik erg herkenbaar: "Mijn schermformaat geeft niemand inzicht in mijn intenties of mijn verlangens"
Veel mobile-first observaties gaan ervanuit dat je veel overbodige content kunt schrappen en dat dat ook voor de desktopgebruikers eigenlijk niet zo nodig is. De ervaring leerde echter dat er helemaal niets zomaar geschrapt kon worden, ook niet bij mobile, en dat mensen ongeveer alles willen en ook zeer gecompliceerde zaken uitvoeren op mobiel. (Dwz, IK denk dan als naieve gebruiker dat ik geen uitgebreide verslagen of bv advertenties zou plaatsen en wel even wacht tot ik bij een pc in de buurt ben, maar veel mensen doen dat dus wel.)

Anyway, Tweakers is wat dat betreft beslist een inspiratie. En op jullie scroll-to-top/bottom ben ik helemaal jaloers :)

[Reactie gewijzigd door incaz op 22 juli 2024 14:30]

Ik snapte het verhaal niet helemaal over het niet gebruiken van bestaande frameworks, vanwege laadtijden. Voor jQuery e.d. zijn toch allang cdn's beschikbaar, die de laadtijden drastisch (kunnen) verlagen. Je zou dan eventueel een langere initial load kunnen hebben op tweakers, maar is jullie eigen framework dan zoveel kleiner dan een minified jquery?

Als gebruiker moet ik zeggen dat het nu inderdaad een stuk relaxter werkt op me telefoon.

[Reactie gewijzigd door BlackHawkDesign op 22 juli 2024 14:30]

De request is natuurlijk goed af te vangen met een CDN echter gaat het ons meer om de daadwerkelijk execution times van de JS. Ons framework heeft geen overhead voor browsers die we niet ondersteunen, geen overbodige methodes en opties voor functies die we niet gebruiken en daarnaast hebben we heel specifieke optimalisatie slagen kunnen maken daar het puur voor Tweakers ontwikkeld is. Het zal in de praktijk wellicht geen secondes aan winst opleveren maar alle kleine beetjes helpen ;)
We Are Borg Moderator Wonen & Mobiliteit / General Chat @BlackHawkDesign8 juni 2014 11:09
Dan ben je wel afhankelijk van third party hosters (okee het is google) voor de werking van je website. Ik denk dat een formaat tweakers website dat echt niet wilt
Hoeft niet helemaal, je kan namelijk een combi doen. Dus default via google, by fail eigen versie laten ophalen.
We Are Borg Moderator Wonen & Mobiliteit / General Chat @BlackHawkDesign8 juni 2014 12:34
En hoeveel ms vertraging kost die fallback check?
Je hebt meerdere hosters die dat doen en kunt (met javascript :D ) ook een fallback regelen naar eigen hosting. Toch kun je er wel vanuit gaan dat Google een behoorlijke hoster is die er zelf ook last van heeft als jquery niet werkt. Is vorig jaar overigens een paar uur voorgekomen, maar dit jaar nog niet.
Het is niet heel veel, maar de volledige jquery .js file is één van de grootste delen van de laadtijd van veel websites.
Mja ik zou ook wel wat meer hierover willen zien. Wat is hetgeen wat ze dan niet trekt aan jQuery (of ander framework) waardoor ze een eigen implementatie kiezen. Het zou ze namelijk sieren om wel een bestaande standaard te gebruiken en daar hun eigen invulling bij toe te voegen in de diverse repositories.

Ik vind zelf sites met jQuery veel makkelijker te begrijpen dan sites die nog native javascript gebruiken. Of helemaal als ze een eigen implementatie hebben gemaakt. Dat lijkt me namelijk een manier waarom je site fragieler wordt, want wat gebeurd ermee als je programmeur(s) ermee stoppen?

[Reactie gewijzigd door Martinspire op 22 juli 2024 14:30]

"Javascript om dingen mooier te presenteren"? Dat is volgens mij niet de bedoeling van Javascript.

Ik denk dat jullie beter voor mobile first hadden kunnen geen. Dat betekent inderdaad dat je veel meer moet herschrijven maar dan heb je wel een website die langere tijd meekan. De mobiele site is nu eigenlijk een uitgeklede versie van de volledige website en dat is niet nodig. Vinden jullie het niet zonde dat alle pagina's in de navigatie verborgen zijn achter een onopvallend "hamburger" icoontje? De leesbaarheid van tekst is om mobiel ook niet ideaal, de letters zijn eigenlijk te klein. Verder zijn de filters in de pricewatch nu niet erg gebruiksvriendelijk voor mobiel.

Mochten jullie interesse hebben dan kan ik wat suggesties doen om de daad bij het woord te voegen ;) Graag PM of email
Javascript gebruiken we inderdaad om dingen mooier te presenteren of dit de "bedoeling" van JS is weet ik niet en het maakt me ook niet zoveel uit. JS is voor mij een hulpmiddel om een bepaald probleem op te lossen dat met b.v. CSS niet lukt. Voorbeeld: De filters van de pricewatch hebben we op grade C & D wat uitgebreid met een simpel stukje JS om na het filteren een indicator te tonen met het aantal resultaten. De resultaten zijn op een desktop direct zichtbaar maar op een klein mobieltje niet. Vandaar dat je realtime het aantal gefilterde resultaten inclusief linkje naar die resultaten krijgt. Een stukje wat we dus beter bruikbaar en mooier hebben hemaakt d.m.v. JS.

Mobile first is simpelweg echt geen optie. Tweakers is ontzettend groot met heel veel pagina's en bestaande (frontend) code. Bij het ontwikkelen van Tweakers 7 was er nog geen focus op mobile. Was die er wel geweest, dan was mobile first wellicht een goede optie. Om echter al je front-end code weg te gooien en opnieuw te maken na een net grote overhaul en daarbij wederom je design en usability opnieuw uit denken ging ons echter wat ver.

Waren we gaan werken vanuit een mobile first gedacht was de navigatie in de vorm van een hamburger menu er waarschijnlijk ook gekomen. Er zijn nu eenmaal redelijk veel bestemmingen en het burger pattern is ondertussen een common good bij vrijwel elke eindgebruiker.

Mocht je nog verbeteringen hebben op de manier waarop filters in de pricewatch nu werken horen we die graag! Hier hadden we wilde iedeen over maar die bleken kwa uitvoering zoveel haken en ogen te hebben dat we voor de huidige, relatief simpele oplossing zijn gegaan.
Bedankt voor je reactie!

Javascript is bedoelt voor interactie en als jullie dat voor het updaten van de filters doen is dat top! Ik dacht dat met "mooi" de visuele presentatie wordt bedoeld.

Er zijn de laatste tijd veel artikelen over het negatieve effect van de hamburger icon. Zie hier een overzicht: https://news.layervault.c...y=Hamburger&commit=Search.

Een alternatief voor zo'n menu is nagaan welke onderdelen nou echt belangrijk zijn en welke een plekje op het eerste scherm dat de gebruiker ziet verdienen. Als dat er bijvoorbeeld 3 zijn dan kun je die direct tonen onder of in de header.

Als ik binnenkort tijd heb dan zal ik een opzetje maken voor de filters!
Javascript is een probleem taal mijn inziens op:
- kent geen OOP;
- laat ducktyping toe;

Ducktyping zou je niet moeten willen in een programmeertaal. En OOP is een must als het gaat om grote hoeveelheid code.

Mijn inziens zou er 1 universele webtaal moeten komen die dichter bij echter programmeertalen staan.
Hoezo is de mobiele website een uitgeklede versie? De mobiele website is net zo functioneel als de desktopversie. Wat had er concreet anders geweest aan Tweakers mobile als er was gekozen voor mobile first? En hoezo had de website dan langer meegekund?
Bedankt voor je reactie.

De mobiele website heeft misschien alle functies van de desktop versie, maar is zeker niet net zo functioneel. Dat is omdat de ervaring op mobiel anders is dan desktop en als je functionaliteit gaat kopieëren/overzetten dan komt dat niet tot zijn recht. Vandaar dat er voor mobile first wordt gekozen, goede usability op mobiel en in de praktijk werkt die vaak ook goed op desktop (zie dat apple hun mobile functionaliteit naar de desktop aan het halen is).

Eerlijk gezegd denk ik dat de mobiele versie en houdbaarheidsdatum heeft omdat hij zich qua uiterlijk niet onderscheidt van andere (mobiele) websites. Als mobiele bezoekers nog meer toenemen zul je ze een eigen ervaring willen aanbieden en dan denk ik dat mobile first het handigst is.
ik snap je mening, maar je onderbouwt hem totaal niet. Kan je een concreet verschil aanwijzen waar Tweakers mobile nu in tekort schiet, wat met "mobile first" niet het geval had geweest?

Ik snap dat vanuit ontwikkelperspectief "mobile first" het handigst is, maar dat zou betekenen dat Tweakers geheel opnieuw ontworpen zou moeten worden. Nu is het toch ook gelukt? Waar schiet het rwd nu in tekort?
De manier waarop de content gepresenteerd wordt kan beter geschikt gemaakt worden voor mobiele bezoekers. Aangezien zij minder lang aandacht hebben zal het beter zijn als de artikelen bondiger zijn. Om de aandacht te trekken kunnen in het nieuwsoverzicht al afbeeldingen worden weergeven. De slider mag in ieder geval weg want ik kan me niet voorstellen dat daar iemand echt mee geholpen wordt. De beste reacties kunnen worden uitgelicht en compacter worden weergeven zodat je geen lamme duim krijgt.
Als ik binnenkort tijd heb wil ik een opzetje maken en maak ik er misschien een blog post van!
Anoniem: 167912 8 juni 2014 11:08
Interessant artikel maar ik zit toch met 2 vragen/opmerkingen:
- jquery zou de laadtijd verhogen. het is uiteraard een uitgebreide bibliotheek, maar hier zijn zeer goede oplossingen voor. Gebruik de google of jquery hosted libraries. Eenmaal het ingeladen is (van eender welke website overigens) zit de lib in de cache van het toestel en wordt hij lokaal geladen. Er bestaan bovendien ook technieken om enkel de functies die daadwerkelijk gebruikt worden in een js-file te steken wat uiteraard de laadtijd ook aanzienlijk verkort.
- geen apps: vind ik een vreemde keuze voor een technologie site. Daarbij: als het een probleem is om developers voor android, iphone, windows phone te houden is er nog altijd de mogelijkheid om een framework allà phonegap te gebruiken (met alle voor- en nadelen vandien, dat is een andere discussie). Dan kunnen push notifications plots weer wel.

[Reactie gewijzigd door Anoniem: 167912 op 22 juli 2024 14:30]

Wat betreft een CDN en JS library zie mijn vorige reactie. Geen app is een enorme afweging geweest hier intern en kost simpelweg teveel geld en teveel resources. Phonegap is iets waar we naar gekeken hebben en is (nog steeds) een interesante optie. Desondanks gaat er nog steeds een hoop ontwikkeltijd inzitten en splits je je codebase weer. Dit houd in nieuwe functionaliteiten dubbel ontwikkelen, onderhouden en testen. Daarnaast beschikken we over een responsive versie van Tweakers waarmee de urgentie van een app nog wat verder afgenomen is. Wellicht kijken we in de toekomst nog eens naar een Cordova/Phonegap app maar voorlopig richten we ons op het verder uitwerken en verfijnen van het RWD.
Snap het negatieve commentaar niet...

Ik heb Tweakers als bookmark op mijn homescreen gezet en het werkt nu in principe hetzelde als een app. Alles laadt bij mij super snel zonder enige problemen. Daarnaast ziet het er ook nog erg gelikt uit! Chapeau!
Heb precies hetzelfde gedaan en werkt inderdaad fantastisch. Ik kan me wel voorstellen dat dit voor mensen met een oudere telefoon geen optie is. Het enige wat ik hierbij mis is een refresh knop, op dit moment moet ik in het menu nogmaals op frontpage openen om de nieuwste artikelen te zien.
Anoniem: 126717 @sfschouten8 juni 2014 10:24
Gewoon op de Tweakers text in de kop klikken zorgt voor een refresh. Dat is althans wat ik gebruik.

Op mijn mobiele apparatuur werkt de site als een tierelier, zit nu ook op mijn tablet. Het enige waar ik wat last van heb zijn de notificaties. Het kost vaak meerdere pogingen om ze te zien, en daarna kost het veel tijd om ze als gelezen te markeren.
Anoniem: 126717 @sfschouten8 juni 2014 10:29
Gewoon op de Tweakers text in de kop klikken zorgt voor een refresh. Dat is althans wat ik gebruik.

Op mijn mobiele apparatuur werkt de site als een tierelier, zit nu ook op mijn tablet. Het enige waar ik wat last van heb zijn de notificaties. Het kost vaak meerdere pogingen om ze te zien, en daarna kost het veel tijd om ze als gelezen te markeren.

Edit: En ik heb vaak last van cookie problemen. Bij modereren krijg ik de melding dat ik ingelogd moet zijn, bij plaatsen van een reactie "Het controle-token is niet geldig." Dan moet ik het een paar keer proberen. Net als nu.
Zo heb ik het ook al een tijd en het werkt prima. Leuk artikel en devvers ga zo door!
Anoniem: 282679 8 juni 2014 09:27
Laat ik dan de eerste zijn die positief is.

Site werkt perfect op al mijn devices. Is snel.

Imposant werk jongens.
Helemaal mee eens! Alleen niet alle onderdelen van Tweakers zijn in dezelfde layout te zien (acties etc.) maar verder ben ik van begin af aan heel erg blij geweest met de responsive design!
Mee eens. Ik ben ook erg positief. In het begin was ik wel sceptisch, toegegeven, ik kan niet zo goed tegen veranderingen. :)

Mij grootste probleem met de introductie van TW7 was dat alles te ruimtelijk was opgezet. Ik hou van condensed en niet van onnodige witruimte om designredenen.

Het responsive gedeelte van de site kon ik alleen maar toejuichen. Vooral omdat de app een beetje bagger was. Top dat jullie de tijd hebben genomen om dit verhaal te vertellen over Responsive!!

-geschreven op mn mobiel.
Leuk om te lezen!
Helaas is er nog geen geschikte manier om binnen een responsive website kleinere afbeeldingen te serveren dan in de desktopvariant. Naast het feit dat we hier aan het retrofitten zijn en de afbeeldingen dus al zijn geladen voor een desktopwebsite, heeft de server geen weet van de device en viewport van de eindgebruiker. Er zijn methodes om afbeeldingen afhankelijk van de devicegrade te laden, maar dit heeft weer als nadeel dat het een extra request kost en enkel werkt voor mensen die javascript hebben aanstaan. Downscalen is natuurlijk een optie, maar hierbij wordt nog steeds de volledige afbeelding gedownload en dat kost bandbreedte. Uiteindelijk is hier toch voor gekozen en worden image-galeries en losse afbeeldingen nu met een procentuele breedte weergegeven.
Ik weet niet helemaal hoe jullie structuur in elkaar steekt, maar er is een standaard op komst mbt responsive images die het waard is om in de gaten te houden:
http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/
http://css-tricks.com/vid...guring-responsive-images/

Het argument "en enkel werkt voor mensen die javascript hebben aanstaan" is toch niet meer van deze tijd? In hele specifieke gevallen voor bepaalde doelgroepen kan ik me hier wel in vinden. Maar voor de doelgroep waar Tweakers zich op richt...?
Ook omdat jullie hier een beetje door de mand vallen. Als voorbeeld doet het rechter bovenmenu (profiel controls) het helemaal niet als JS uit staat.

Verder goed bezig geweest met het responsive maken. Is een aardige klus geweest! Respect! :)

[Reactie gewijzigd door JorzoR op 22 juli 2024 14:30]

Die techniek is inderdaad ook bij ons bekend. Helaas is het nog geen standaard en is de ondersteuning momenteel nog niet waar het wezen moet om het ook daadwerkelijk in productie op te kunnen nemen. Op het moment dat deze standaard wel breed ondersteund wordt zullen we er zeker nog eens naar kijken! Verder blijf ik van mening dat de basis van een website, navigatie content als tekst en afbeeldingen etc. voor iedereen beschikbaar moet zijn, ook voor mensen zonder Javascript :)
Van wat ik her en der in diverse reacties heb gelezen, is er een significant deel op tweakers die bewust javascript hebben uitstaan (veelal uit privacy overweging). Daarom is het niet handig om een js-only oplossing aan te leveren.

Probleem met bovenstaande standaard is dat het lang zal duren voordat deze is uitgerold en je dus pas over bv een jaar of 2 echt kunt implementeren.

Ik ben het met je eens dat ze best een mindere ervaring mogen bieden aan gebruikers zonder javascript, maar ook voor oude systemen is het nog lastig omdat het daardoor niet goed gaat werken.
Is er een reden dat jullie @import gebruiken in plaats van inline css? Vanuit performance oogpunt is inline css vaak veel sneller omdat een @import het renderen van de pagina onderbreekt.

Daarnaast zijn @import statements niet compatible met minifying van css, en wordt over het algemeen afgeraden deze te gebruiken.
Ik ga er vanuit, heb dit niet nagekeken, dat Tweakers gebruik maakt van sass of less en daarnaast haar css compiled/minified alvorens het te presenteren aan haar gebruikers..
Mja ik had dan ook eerder SCSS of iets dergelijks verwacht die uiteindelijk gecompileerd wordt. Heb je meteen als voordeel dat je variabelen en functies kunt gebruiken.

Op dit item kan niet meer gereageerd worden.