The Once And Future Script Loader (v1)

63
The Once and Future Script Loader Kyle Simpson @getify http://getif y.me

description

A look at the history, current state, and hopeful future state of script loading in browsers.

Transcript of The Once And Future Script Loader (v1)

Page 1: The Once And Future Script Loader (v1)

The Once and Future Script

Loader

Kyle Simpson@getify

http://getify.me

Page 2: The Once And Future Script Loader (v1)

where…we were

we are nowwe’re going

next

Page 3: The Once And Future Script Loader (v1)

where…we were

once upon a time, in a browser far, far away…

Page 4: The Once And Future Script Loader (v1)

<script src="…"></script>

where…we were

Page 5: The Once And Future Script Loader (v1)

<script src="…"></script>

where…we were

<script src="…"></script><script src="…"></script><script src="…"></script><script src="…"></script><script src="…"></script> …

Page 6: The Once And Future Script Loader (v1)

Why not just combine all your files?

where…we were

• different pages, different scripts• cacheability• parallel loading• on-demand/lazy-loading

Page 7: The Once And Future Script Loader (v1)

where…we were

<script> tags block. bad. evil.

Page 8: The Once And Future Script Loader (v1)

where…we were

IE7-, FF3-, Chr 1...

Page 9: The Once And Future Script Loader (v1)

where…we were

IE8, FF3.5/3.6, Chr 11-

Page 10: The Once And Future Script Loader (v1)

where…we were

IE9, FF4

Script Loaders

Page 11: The Once And Future Script Loader (v1)

where…we were

What do <script> tags block, and why?

• other <script> tags• other content (loading & rendering)• DOM-ready

Page 12: The Once And Future Script Loader (v1)

where…we were

document.write()

Page 13: The Once And Future Script Loader (v1)

where…we were

document.write()

MustDie!

Page 14: The Once And Future Script Loader (v1)

<script> tags also suck because...

• browser-specific scripts• conditional loading/URLs• event handling

where…we were

Page 15: The Once And Future Script Loader (v1)

So, we need a script loader,

huh?

where…we were

Page 16: The Once And Future Script Loader (v1)

where…we were

The very first script loader?

document.write("<script src='...'></sc"+"ript>");

Page 17: The Once And Future Script Loader (v1)

where…we were

who-tf?

...and still many ad providers, 3rd party widgets, etc.

Page 18: The Once And Future Script Loader (v1)

Other attempts at script loading

where…we were

Page 19: The Once And Future Script Loader (v1)

where…we were

Loading script in <iframe>? ugh.

What about with XHR?

Page 20: The Once And Future Script Loader (v1)

where…we were

Making progress... but not there yet

Page 21: The Once And Future Script Loader (v1)

where…we were

Framework-specific loaders...

...just stink

Page 22: The Once And Future Script Loader (v1)

where…we were

Not for the faint of heart

Page 23: The Once And Future Script Loader (v1)

General Script Loaders (1st gen)

where…we were

Page 24: The Once And Future Script Loader (v1)

where…we were

A general script loader should:

• load any script, not just some, at any time, from anywhere [forget document.write()]

• have performance >= <script> in modern browsers• equivalent behavior in all browsers

Page 25: The Once And Future Script Loader (v1)

where…we were

A general script loader should also:

• avoid: hacks, UA sniffing• feature-detect• have as few exception-cases as possible

Page 26: The Once And Future Script Loader (v1)

where…we were

General script loader feature creep:

• trying to handle document.write()• loading CSS or other resources• "dependency management"• messing with DOM-ready

Page 27: The Once And Future Script Loader (v1)

A young leader?

LABjs

where…we were

Page 28: The Once And Future Script Loader (v1)

LABjs: performance script loader

where…we were

Page 29: The Once And Future Script Loader (v1)

where…we were LABjs: performance

script loader

Page 30: The Once And Future Script Loader (v1)

where…we were

Other early contenders

• nbl• Dominoes• ...

Page 31: The Once And Future Script Loader (v1)

where…we were

What was wrong with LABjs (&

others)?• ugly source code• lots of hacks• exception cases• brittle (not future proof)

Page 32: The Once And Future Script Loader (v1)

where…we were

LABjs 2.0

• nicer source code• future proof feature detects• fewer exception cases• better performance

http://github.com/getify/LABjs/tree/master/next

Page 33: The Once And Future Script Loader (v1)

Anyone can write a loader!

where…we are now

(and many devs have)

Page 34: The Once And Future Script Loader (v1)

where…we are now

https://spreadsheets0.google.com/spreadsheet/ccc?key=tDdcrv9wNQRCNCRCflWxhYQ

Page 35: The Once And Future Script Loader (v1)

Loaders are competing more on

APIs than on features or performance

where…we are now

Page 36: The Once And Future Script Loader (v1)

But, can their

functionality be trusted?

where…we are now

Page 37: The Once And Future Script Loader (v1)

where…we are now

Testing is much harder than you (and

they!) probably realize

Page 38: The Once And Future Script Loader (v1)

where…we are now

"Browser support" is not a universally

agreed upon measurement

Page 39: The Once And Future Script Loader (v1)

where…we are now

Exception cases are either ignored or overlooked, more than they admit

Page 40: The Once And Future Script Loader (v1)

where…we are now

Functionality based heavily on hacks and browser sniffs, not

feature detects

Page 41: The Once And Future Script Loader (v1)

where…we are now

End users have no clue, they trust what

the docs say

Page 42: The Once And Future Script Loader (v1)

Appears friendly and

civilized

where…we are now

Page 43: The Once And Future Script Loader (v1)

Actually ugly and

dangerous

where…we are now

Page 44: The Once And Future Script Loader (v1)

What happens

now?

where…we're going next

Page 45: The Once And Future Script Loader (v1)

Competition is good, only if community is educated on what to

look for

where…we're going next

Page 46: The Once And Future Script Loader (v1)

http://PickALoader.com

where…we're going next

Page 47: The Once And Future Script Loader (v1)

The browser doesn't yet give us what

today's web needs for script loading

where…we're going next

Page 48: The Once And Future Script Loader (v1)

Co-opetition is much healthier for the future of script

loading

where…we're going next

Page 49: The Once And Future Script Loader (v1)

Only script loaders which participate in defining the future

will survive

where…we're going next

Page 50: The Once And Future Script Loader (v1)

W3C, WHATWG

where…we're going next

http://wiki.whatwg.org/wiki/Category:Proposals

Page 51: The Once And Future Script Loader (v1)

async=false

where…we're going next

http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order

Page 52: The Once And Future Script Loader (v1)

We'll accomplish more if we work together

where…we're going next

Page 53: The Once And Future Script Loader (v1)

Advanced Script

Loading

where…we're going next

Page 54: The Once And Future Script Loader (v1)

Preloading

where…we're going next

(deferred execution)

Page 55: The Once And Future Script Loader (v1)

Modules

where…we're going next

(CommonJS, AMD, etc)

Page 56: The Once And Future Script Loader (v1)

Native Modules

where…we're going next

(ES-Harmony?)

Page 57: The Once And Future Script Loader (v1)

"Script Loader of my

dreams"

where…we're going next

Page 58: The Once And Future Script Loader (v1)
Page 59: The Once And Future Script Loader (v1)

True Preloading

where…we're going next

http://wiki.whatwg.org/wiki/Script_Execution_Control

Page 60: The Once And Future Script Loader (v1)

IE4+ ftw?

where…we're going next

Page 61: The Once And Future Script Loader (v1)

What else...?

where…we're going next

Page 62: The Once And Future Script Loader (v1)

And now for something completely different...

Questions?

Page 63: The Once And Future Script Loader (v1)

http://

pickaloader.com Kyle Simpson

@getifyhttp://getify.

me

http://labjs.com

http://wiki.whatwg.org/wiki/Category:Proposals