SlideShare a Scribd company logo
Nano? Pico? Femto? Atto?



Zepto!
  @thomasfuchs



    (cc) 2011 Thomas Fuchs
“real” computer
Fast and stable network connection
Lots of storage
Fast, multi-core CPUs
Hardware-accelerated graphics
Zepto and the rise of the JavaScript Micro-Frameworks
Slow & unstable network connection
Limited storage
Slow CPUs
Hardware acceleration only on iOS
All major JS libs
  where created
before phones had
 web browsers to
write home about.
Zepto and the rise of the JavaScript Micro-Frameworks
Don’t use something
  because it’s popular.

Use stuff because it’s the
 right tool for the job.
Zepto and the rise of the JavaScript Micro-Frameworks
WebKit
Proprietary features
Adoption of features
  from JavaScript
    frameworks
Proprietary features
   are awesome
CSS Selectors
document.querySelectorAll('div.awesome > p')
full featured
              CSS3 selectors

// select all li elements with both "just" and "testing"
classnames
document.querySelectorAll('li.just.testing')

// how many paragraphs?
document.querySelectorAll('p').length

// select even paragraphs
document.querySelectorAll('p:nth-child(2n+1)')
[].slice.apply(nodelist)

           convert to
        JavaScript array



   document.querySelectorAll
   returns a NodeList, not an array
querySelectorAll


Full-featured CSS selectors
No need for external JavaScript libraries
Fast, native implementation

Returns a NodeList, not an array
JSON
JSON.stringify({
   s: 'a string',
   n: 123,
   d: new Date
})
JSON.parse('{"some":"json","test":123}')
Native JSON

Parsing JSON (convert to JS object)
Serializing JS objects to JSON
Fast, native implementation
No problem with security of “eval” as in
some JavaScript-based
implementations
Array iteration
[1,2,3].forEach(alert);
[1,2,3].forEach(alert);




array with three numbers
[1,2,3].forEach(alert);




   forEach is a native function on
 arrays, taking a function argument
[1,2,3].forEach(alert);




          call with window.alert
                   function
[1,2,3].forEach(alert);
[].slice.apply(nodelist).forEach(
    function(element){
      alert(element.innerHTML);
    }
 );



Iterate through all elements found,
  alerting the element’s contents
Array Iteration
Array Iteration

No more for loops required
Array Iteration

No more for loops required
No more for loops required
Array Iteration

No more for loops required
No more for loops required
No more for loops required
Array Iteration

No more for loops required
No more for loops required
No more for loops required
No more for loops required
Array Iteration

No more for loops required
No more for loops required
No more for loops required
No more for loops required
No more for loops required
Mobile JavaScript
  framework?
Why not use
Prototype, jQuery or
 other frameworks?
Some functionality is not
supported or not meaningful
    on mobile devices.



                              resizing & scrolling
                              orientation
                              fixed positioning
                              fonts
                              SVG
More code causes longer download
     and initialization times.
Most of the downloaded code
      isn’t even used.

(there’s no IE 6 to support on
  mobile phones, lucky us)
A lot of the rest of the code is
duplicating features that are
 directly available as native
      implementations.
Goals for a mobile
JavaScript framework
Reduce code size as much as
possible to keep download and
  initialization times down.
Easy to use API—possibly
emulating jQuery because
developers already know it.
Easy to extend and customize—
again, jQuery has a familiar plugin/
       extension mechanism
Ideally, have a fallback mechanism
  in case it’s run on non-WebKit
          mobile browsers.
It’s not so important
   what’s there, but
   what’s not there.
Meet zepto.js
     http://github.com/madrobby/zepto


Target size: 5K
jQuery-compatible API
Uses mobile WebKit features whenever possible
Easily replaceable with jQuery proper if needed
Doesn’t cover all of jQuery (but lots of it!)
31.33K




               4.83K
              Zepto (master)
 jQuery 1.6
Zepto and the rise of the JavaScript Micro-Frameworks
Various special cases
Main use case $(some selector)
this saves ~6k of selector engine code
Zepto and the rise of the JavaScript Micro-Frameworks
make sure dom is a JavaScript array
swap out the
      prototype,
  but leave “length”
and other properties
   intact, uses the
     proprietary
 __proto__ property
Z.prototype is pointing to $.fn which holds all
  methods that are used on found elements
Reusing array methods, works because
     we have an array-like object
this is an array-like of resulting nodes
 and a Zepto object at the same time
insertAdjacentElement is IE-
proprietary, but supported by WebKit




  (doesn’t work on Firefox!)
Zepto.js
    http://github.com/madrobby/zepto


CSS Selectors and DOM manipulation
Ajax including x-domain JSONP
Events (including touch events)
Polyfills and bug fixes for older WebKits
Modular (can leave out events, xhr, etc.)
WebKit only! (with focus on mobile)
Zepto and the rise of the JavaScript Micro-Frameworks
Zepto and the rise of the JavaScript Micro-Frameworks
/
m.checkers.com
Zepto and the rise of the JavaScript Micro-Frameworks
Zepto and the rise of the JavaScript Micro-Frameworks
One more thing…
scriptaculous
Prototype.js
jQuery
mootools
Micro-Frameworks




                   you/users are the rebels
                   —the ewoks are helping
                   you achieve your goals
Zepto and the rise of the JavaScript Micro-Frameworks
Classic frameworks

Do all things and do it ok-ish
Force you into an API
Not modular/not modular enough
25k+ minified & gzipped
Many extensions are now available
in the DOM or JavaScript
Micro-Frameworks
      (are awesome!)
do one thing and do it really well
smaller than 5k, minified & gzipped
use directly or loosely coupled
Small is beautiful
easier to understand code & fork
downloads and runs faster
fewer bugs (less code!)
…and you’ll learn how
JavaScript REALLY works
{{ mustache }} ~ 1.5k
Lawnchair ~ 2.0k
Backbone.js ~ 3.9k
But how do I know
 what’s out there?
microjs.com
Add your own!
github.com/madrobby/
     microjs.com
Questions?
  @thomasfuchs

More Related Content

PDF
[143]Inside fuse deview 2016
PDF
Why and how Pricing Assistant migrated from Celery to RQ - Paris.py #2
PPTX
ProtoPie with Electron
PPTX
Introduction to node.js GDD
PDF
Best node js course
KEY
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
PPTX
Node js Introduction
PPTX
Introduction to Node js
[143]Inside fuse deview 2016
Why and how Pricing Assistant migrated from Celery to RQ - Paris.py #2
ProtoPie with Electron
Introduction to node.js GDD
Best node js course
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Node js Introduction
Introduction to Node js

What's hot (20)

PPTX
Node.js, for architects - OpenSlava 2013
ODP
Introduction to Python Celery
PPT
Introduction to node.js aka NodeJS
PPTX
Node js for beginners
PPTX
Nodejs getting started
PPTX
Angular 2 Migration - JHipster Meetup 6
PDF
JavaScript Web Workers
PDF
Node, express & sails
PDF
Web workers
PDF
Introduction to REST API with Node.js
PDF
Use Node.js to create a REST API
PDF
Super combinators
PDF
Test your Javascript! v1.1
PPTX
Deploy Node.js application in Heroku using Eclipse
PDF
Back to the future: Isomorphic javascript applications
PDF
Data processing with celery and rabbit mq
PPT
No Va Taig April 7 2010
PDF
The current state of web
PPTX
webworkers
ZIP
Introduction to Google App Engine
Node.js, for architects - OpenSlava 2013
Introduction to Python Celery
Introduction to node.js aka NodeJS
Node js for beginners
Nodejs getting started
Angular 2 Migration - JHipster Meetup 6
JavaScript Web Workers
Node, express & sails
Web workers
Introduction to REST API with Node.js
Use Node.js to create a REST API
Super combinators
Test your Javascript! v1.1
Deploy Node.js application in Heroku using Eclipse
Back to the future: Isomorphic javascript applications
Data processing with celery and rabbit mq
No Va Taig April 7 2010
The current state of web
webworkers
Introduction to Google App Engine
Ad

Viewers also liked (11)

PDF
Javascript Framework Acessibiliity Review
PDF
Offline Mode - Web Applications Offline
PPTX
ECMA5 approach to building JavaScript frameworks with Anzor Bashkhaz
PDF
Create a landing page
PDF
Metaprogramming JavaScript
PDF
Paweł Danielewski, Jak wygenerować 56% konwersji na Landing Page i 193.000 zł...
PDF
Creating responsive landing pages using LeadSquared
PDF
WebApps e Frameworks Javascript
PDF
50 Landing Page Best Practices
PDF
Unobtrusive JavaScript with jQuery
PDF
Writing Efficient JavaScript
Javascript Framework Acessibiliity Review
Offline Mode - Web Applications Offline
ECMA5 approach to building JavaScript frameworks with Anzor Bashkhaz
Create a landing page
Metaprogramming JavaScript
Paweł Danielewski, Jak wygenerować 56% konwersji na Landing Page i 193.000 zł...
Creating responsive landing pages using LeadSquared
WebApps e Frameworks Javascript
50 Landing Page Best Practices
Unobtrusive JavaScript with jQuery
Writing Efficient JavaScript
Ad

Similar to Zepto and the rise of the JavaScript Micro-Frameworks (20)

PPT
GWT is Smarter Than You
PPT
Ajax with DWR
ODP
Griffon: Re-imaging Desktop Java Technology
PPT
J Query
PPTX
Playframework + Twitter Bootstrap
PDF
Full Stack React Workshop [CSSC x GDSC]
PPT
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
PDF
node.js 실무 - node js in practice by Jesang Yoon
PDF
Ionic framework one day training
PPTX
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
PPTX
Starting with jQuery
PDF
Cannibalising The Google App Engine
PDF
WebNet Conference 2012 - Designing complex applications using html5 and knock...
PPTX
Javascript Frameworks Comparison
PDF
Fewd week4 slides
PPTX
Flu3nt highlights
PPTX
J Query The Write Less Do More Javascript Library
PPTX
JavaScript on the server - Node.js
PPT
jQuery with javascript training by Technnovation Labs
PPT
The Theory Of The Dom
GWT is Smarter Than You
Ajax with DWR
Griffon: Re-imaging Desktop Java Technology
J Query
Playframework + Twitter Bootstrap
Full Stack React Workshop [CSSC x GDSC]
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
node.js 실무 - node js in practice by Jesang Yoon
Ionic framework one day training
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Starting with jQuery
Cannibalising The Google App Engine
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Javascript Frameworks Comparison
Fewd week4 slides
Flu3nt highlights
J Query The Write Less Do More Javascript Library
JavaScript on the server - Node.js
jQuery with javascript training by Technnovation Labs
The Theory Of The Dom

More from Thomas Fuchs (9)

PDF
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
PDF
I Can't Believe It's Not Flash
PDF
Prototype & Scriptaculous
PDF
Extreme JavaScript Performance
PDF
Textorize
PDF
Adventures In JavaScript Testing
PDF
Ruby On Rails Introduction
KEY
Twistori Tech
PDF
Rich and Snappy Apps (No Scaling Required)
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
I Can't Believe It's Not Flash
Prototype & Scriptaculous
Extreme JavaScript Performance
Textorize
Adventures In JavaScript Testing
Ruby On Rails Introduction
Twistori Tech
Rich and Snappy Apps (No Scaling Required)

Recently uploaded (20)

PDF
cuic standard and advanced reporting.pdf
PPT
Teaching material agriculture food technology
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
KodekX | Application Modernization Development
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Big Data Technologies - Introduction.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Cloud computing and distributed systems.
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
cuic standard and advanced reporting.pdf
Teaching material agriculture food technology
NewMind AI Monthly Chronicles - July 2025
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
KodekX | Application Modernization Development
Chapter 3 Spatial Domain Image Processing.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Unlocking AI with Model Context Protocol (MCP)
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
MYSQL Presentation for SQL database connectivity
Big Data Technologies - Introduction.pptx
Review of recent advances in non-invasive hemoglobin estimation
Cloud computing and distributed systems.
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Encapsulation theory and applications.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Per capita expenditure prediction using model stacking based on satellite ima...

Zepto and the rise of the JavaScript Micro-Frameworks