modern web development

95
Modern web development

Upload: robert-nyman

Post on 08-May-2015

3.607 views

Category:

Technology


1 download

DESCRIPTION

Talks about the best practices in web development regarding semantics, accessibility, SEO and performance.

TRANSCRIPT

Page 1: Modern Web Development

Modern web development

Page 2: Modern Web Development
Page 3: Modern Web Development

• Web standards

• Semantics

• Separating layers

• Unobtrusive JavaScript

• Performance

Page 4: Modern Web Development

Web standards

Page 5: Modern Web Development
Page 6: Modern Web Development

What are web standards?

Page 7: Modern Web Development

There aren’t any Web Standards, only Recommendations

Page 8: Modern Web Development

“A W3C Recommendation is a specification or set of guidelines that, after extensive consensus-building, has received the endorsement of W3C Members and the Director. W3C recommends the wide deployment of its Recommendations.”

– W3C

Page 9: Modern Web Development

• Valid HTML/XHTML code

• Semantically correct code

• Separation of content, presentation and interaction

Page 10: Modern Web Development

DOCTYPEs decide rendering mode

Page 11: Modern Web Development

• Quirks Mode

• Standards Mode (HTML 5: No Quirks Mode)

• Almost Standards Mode (HTML 5: "Limited Quirks Mode")

• IE 7 Mode ("mostly" a frozen copy of the mode that was the standards mode in IE7)

• XML ModeFor the application/xhtml+xml Content-Type (not available in Internet Explorer)

Page 12: Modern Web Development

• Strict doctypes render Standards Mode

• Transitional XHTML doctypes render Almost Standards Mode

• Other/No doctypes render Quirks Mode

Page 13: Modern Web Development

Activating Browser Modes with Doctype

Page 14: Modern Web Development

Semantics

Page 15: Modern Web Development

“I have a dream for the Web [in which computers] become capable of analyzing all the data on the Web – the content, links, and transactions between people and computers.”

– Tim Berners-Lee, 1999

Page 16: Modern Web Development

• Use meaningful names and elements

• Applies to all code

Page 17: Modern Web Development

<table cellspacing="0" cellpadding="0"> <tr>

<td class="heading">SWDC</td>

</tr>

<tr>

<td>Content</td>

</tr>

</table>

Page 18: Modern Web Development

<div class="heading">SWDC</div>

<div class="content">Content</div>

Page 19: Modern Web Development

<h1>SWDC</h1>

<p>Content</p>

Page 20: Modern Web Development

<h2 class="h3">News</h2>

Page 21: Modern Web Development

<h2 class="additional-content">News</h2>

Page 22: Modern Web Development

<div class="additional-content">

<h2>News</h2>

</div>

Page 23: Modern Web Development

<div class="left">

Navigation

</div>

<div class="right">

Content

</div>

Page 24: Modern Web Development

<div class="navigation">

Navigation

</div>

<div class="main-content">

Content

</div>

Page 25: Modern Web Development

Separating layers

Page 26: Modern Web Development

• HTML (content)

• CSS (presentation)

• JavaScript (interaction)

Page 27: Modern Web Development

Why separating layers?

Page 28: Modern Web Development

• Code maintainability

• Overview

• Structure

• Performance

Page 29: Modern Web Development

<div style="color: red">

Very important

</div>

Page 30: Modern Web Development

<div class="important">

Very important

</div>

Page 31: Modern Web Development

Unobtrusive JavaScript

Page 32: Modern Web Development
Page 33: Modern Web Development

• No JavaScript code in the HTML code

• No inline events on elements

• Progressive enhancement

Page 34: Modern Web Development

<a href="javascript:doStuff()"> Magic</a>

Page 35: Modern Web Development

<a href="#" onclick="doStuff(); return false"> Magic</a>

Page 36: Modern Web Development

<a href="stuff.html" onclick="doStuff(); return false"> Magic</a>

Page 37: Modern Web Development

<a href="stuff.html" class="magic"> Magic</a>

Page 38: Modern Web Development

window.onload = function () {

var magic = getElementsByClassName("magic");

for (var i=0, l=magic.length; i<l; i++) {

magic.onclick = function () {

doStuff();

return false;

};

}

};

Page 39: Modern Web Development

JavaScript-dependent elements should be generated with JavaScript

Page 40: Modern Web Development

var link = document.createElement("a");

link.innerHTML = "Get more content";

link.onclick = function () {

// JavaScript magic

};

document.body.appendChild(link);

Page 41: Modern Web Development

Why it should work without JavaScript

Page 42: Modern Web Development

A little case study of Sony Ericsson

Page 43: Modern Web Development

JavaScript available

Page 44: Modern Web Development

No JavaScript

Page 45: Modern Web Development

<!-- SonyEricsson logo code -->

<div id="selogo" class="floatleft" onclick="document.location.href='/cws/home?lc=sv&cc=se';" style="cursor: pointer;"> <img src="/cws/images/spacer.gif" style="height: 30px; width: 155px;" alt="Sony Ericsson"/>

</div>

Page 46: Modern Web Development

JavaScript available

Page 47: Modern Web Development

No JavaScript

Page 48: Modern Web Development

Google result

Page 49: Modern Web Development

Performance

Page 50: Modern Web Development

• CSS sprites

• Image optimizing

• gzip

• Expires headers

• ETags

• Deployment configuration

Page 51: Modern Web Development

CSS Sprites

Page 52: Modern Web Development

• Combine several images into one

• Position through CSS

Page 53: Modern Web Development
Page 54: Modern Web Development

.save {

background: url(sprite.png) no-repeat 0 0;

}

.delete {

background: url(sprite.png) no-repeat 0 -100px;

}

.info {

background: url(sprite.png) no-repeat 0 -200px;

}

Page 55: Modern Web Development

Upload images, get sprite and CSS:

CSS Sprite Generator

Page 56: Modern Web Development

Image optimizing

Page 58: Modern Web Development

• Combines many open-source optimizers

• Lossless compression

• Removing superfluous metadata

Page 60: Modern Web Development

DN.se start page:

Could save 370 kb/unique page load

Has 1 186 730 unique visitors/week

370 * 1 186 730 ≈ per week!418 GB

Page 61: Modern Web Development

smusher

• Commandline through smush.it API for whole folders

Page 62: Modern Web Development

Smush.it now part of YSlow for Firebug

Page 64: Modern Web Development

# Alternative 1

AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/x-javascript

# Alternative 2

SetOutputFilter DEFLATEDeflateFilterNote ratioSetEnvIfNoCase Request_URI \.(?:gif|jpe?g|PNG)$ \ no-gzip dont-varySetEnvIfNoCase Request_URI \ \.(?:exe|t?gz|zip|bz2|sit|rar)$ \ no-gzip dont-varySetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

Page 66: Modern Web Development

# Alternative 1

ExpiresActive OnExpiresByType text/css "access plus 3 days"ExpiresByType application/x-javascript "access plus 3 days"ExpiresByType image/gif "access plus 3 days"ExpiresByType image/png "access plus 3 days"ExpiresByType image/jpeg "access plus 3 days"

# Alternative 2

ExpiresActive OnExpiresDefault "access plus 3 days

Page 67: Modern Web Development

Setting/removing ETags:

• Apache: FileETag MTime Sizealternatively FileETag none

• For IIS: Mdutil.exe

Page 68: Modern Web Development

JavaScript deployment:

• Concatenating

• Minifying

Page 69: Modern Web Development

Concatenating:

• cat jquery.js base.js > all.js

• Concatenate Text Files using C#

Page 75: Modern Web Development

Tools

Page 81: Modern Web Development

Obstacles

Page 82: Modern Web Development

Redmond...

Page 83: Modern Web Development

Acid2 Test

Page 84: Modern Web Development

• 31 October 2005: Safari 2.0.2

• 28 March 2006: Konqueror 3.5.2

• 20 June 2006: Opera 9.0

• 17 June 2008: Mozilla Firefox 3.0

• 19 March 2009: Internet Explorer 8

Page 85: Modern Web Development

Acid3 Test

Page 86: Modern Web Development

• DOM Level 2 Traversal (subtests 1-6)

• DOM Level 2 Range (subtests 7-11)

• Content-Type: image/png; text/plain (subtest 14, 15)

• <object> handling and HTTP status codes (subtest 16)

• DOM Level 2 Core (subtests 17, 21)

• DOM Level 2 Events (subtests 17, 30-32)

• CSS Selectors (subtests 33-40)

• DOM Level 2 Style (subtest 45)

• DOM Level 2 HTML (subtest 60)

• DOM Level 2 Views

• ECMAScript GC (subtests 26-27)

• Unicode 5.0 UTF-16 (subtest 68)

• Unicode 5.0 UTF-8 (subtest 70)

• HTML 4.0 Transitional (subtest 71)

• HTML 4.01 Strict

• SVG 1.1 (subtests 74, 78)

• SVG 1.1 Fonts (subtests 77, 79)

• SMIL 2.1 (subtests 75-76)

• ECMAScript Conformance (subtests 81-96)

• Data URI scheme (subtest 97)

• XHTML 1.0 Strict (subtest 98)

• HTTP 1.1 Protocol

Page 87: Modern Web Development

• Safari 3.2.3: 77/100 4 beta: 100/100

• Chrome 1.0: 79/100 2 beta: 100/100

• Opera 9.64: 85/100 10 beta: 100/100

• Firefox 3.0.10: 71/100 3.5 beta: 94/100

• Internet Explorer 8: 20/100 No beta

Page 88: Modern Web Development

Doctypes & rendering

Page 90: Modern Web Development
Page 92: Modern Web Development
Page 94: Modern Web Development

• Web standards

• Semantics

• Separating layers

• Unobtrusive JavaScript

• Performance

Summary

Page 95: Modern Web Development

Robert [email protected]

robertnyman.com

Images:

http://www.flickr.com/photos/mringlein/316476217/

http://blog.tmcnet.com/blog/tom-keating/movabletype/movable-type-vs-wordpress-war-heats-up.asp

http://www.yardbarker.com/other_sports/articles/LIST_BEST_Players_to_ever_wear_the_number/292924

http://jimberkin.wordpress.com/2007/09/19/yet-another-reason-i-hate-lawyers/

http://share-sports.3ds.com/2008/03/31/philippe-fuchs-tunes-workouts-for-better-results-with-heart-rate-variability-monitoring/

http://hsivonen.iki.fi/doctype/ie8-mode.png

http://www.stalepopcorn.co.uk/competitions/win-stuff-the-neverending-story-on-dvd/