SlideShare a Scribd company logo
JavascriptMVC
Another choose of web framework
          Alive C. Kuo
About me
● 2010.01.04 ~ 2012.05.31
  VIVOTEK Inc.,
  software engineer
● 2012.06.01 ~ *
  Mozilla Corp.,
  Front end enigeer
● ~1.5year web application experience
● email: alegnadise@gmail.com
Life is a struggle
● Web application is hard to design and
  implement
● Framework
  ○ Client side
    ■ YUI
    ■ extjs
    ■ backbone
    ■ knockout
    ■ ...
  ○ Server side
    ■ zk
    ■ RoR
    ■ shtml
    ■ ...
jQuery
●   It is a library, not a framework.
●   High performance to DOM scripting
●   Easy to use with method chain
●   http://jquery.com
●   But, there's something we need it lacks..
What jQuery lack
●   Cross plugin communication
●   Ajax gateway
●   Web application management
●   js/css/html files/directories management
●   jQuery,
    will not teach you how to org your (huge)
    web application.
Life is a struggle (CONT.)
● Just survey it.
   ○ Work hard every day.
ExtJS
● http://www.sencha.com/products/extjs/
● The initial version is forked from YUI2.
● PROS
   ○ Beautiful and uniform and windows-like UI styles
● CONS
   ○ Customization is hard to do.
   ○ NO MIT. It is a commercial product.
YUI
● http://developer.yahoo.com/yui/
● PROS
  ○ uniform UI styles
  ○ YQuery is suitable for cross-domain query.
  ○ Many F2E in Yahoo! will maintain it.
● CONS
  ○ Also customization.
backbone.js
● http://documentcloud.github.com/backbone/
● A MVC framework known to Mobile
● PROS
  ○ Resource more than javascripMVC!
● CONS
  ○ Just MVC layer. NO preset UI layer implementation
  ○ Documentation seems difficult to understand.
javascriptMVC
● http://javascriptmvc.com
● PROS
  ○ MIT license
  ○ Clear documentation
  ○ Nearly total solution to build a web application
● CONS
  ○ Less resource in Taiwan
  ○ No preset UI layer implementation
Successful story
Why I choose javascriptMVC finally?
● clientside MVC - Meet my requirement on
  embedded system.
● I just couldn't figure out backbone's
  documentation and example.
Life is a struggle. (CONT.)
● But, I still spend serveral days to read whole
  of its document and its forum.
● Try to understand why and how.
Nice features in javascriptMVC
● Clear models/views/controllers and class
  inheritance
● CRUD Model layer
● Native event delegation
● View with Embedded js
● Fixture
● Library dependancy solution
● Build process
● Less CSS integration
● OpenAjax pubsub
● A basic application/project/product
Case By Case
Struggle and the Way
CSS Struggles - Collision
● a.css
  div.data {
      background-color: red;
  }
● b.css
  div.data {
      background-color: white;
  }
CSS struggles - One Level
Statement/Rule Weight
● div.viewcell > div.plugin span.title span {}
● CSS rule has weights.
● CSS solutions:
  ○ SASS
  ○ Compass
  ○ LessCSS
CSS Super Language
● SASS/Compass
  ○ Mixin, Variable, Sprite helper, Functions, CSS3
    Helpers
  ○ jsfiddle(http://jsfiddle.net) supports SASS!
● LESS
  ○   http://lesscss.org
  ○   Javascript evaluable
  ○   Less feature than SASS
  ○   Both server side(Rhino or Node.js) & client side
      (Need compilation)
LESS
@company_blue: #0186d1;
@focus_width: 100;
div#content {
   div.title {
      background-color: @company_blue;
      &:hover,&:active {
          width: @focus_width;
      }
   }
}
Data Struggle - I don't want to know
the details
● Backend service
  ○   CGI
  ○   fast cgi/wsgi
  ○   URL command
  ○   Dbus
  ○   Gconf
  ○   Web service
  ○   Tunnel message
  ○   JSON/XML
  ○   ...
CRUD
● Create/Read/Update/Delete is most common
  for every kind of data access.
● Implement and wrapper your backend
  service for CRUD.
  ○   DataModel.create()
  ○   DataModel.update()
  ○   DataModel.delete()
  ○   DataModel.read()
$.Model
● CRUD functions, overwrittable
● Event callback whenever data is
  ○   created
  ○   deleted
  ○   updated
  ○   and if you like, custom event on model is creatable.
● DOM embeddable
  ○ <div <%= model %></div>
● Validation in data model layer
Plugin/Widget/UI component
Struggle
● None loosely coupled.
● No cross function communication.
● DOM renew and event rebind
  ○ a long long string in your javascript like
    ■ $('#div').html('<div class="event"><span class="
        name"></span><span class="icon"
        ></span></div>')
$.Controller features
● OpenAjax PubSub
  ○ Not jQuery.pubsub, but the similar thing they could
    do.
● DOM manipulation is delegated to $.View()
● Native event delegation
  ○ jQuery.on()
  ○ 'button#save click': function(el, ev){
    }
● FAST!
$.View features
● Seperate HTML from your javascript codes.
● Reusable, cachable
● Logic (javascript) in HTML
  ○ http://embeddedjs.com
  ○ <ul>
      <% for(var i=0; i<supplies.length; i++) {%
      >
      <li><%= supplies[i] %></li>
      <% } %>
      </ul>
Library struggle - dependancy
● Case
    ○ jQuery.scrollbars(http://www.aplweb.co.uk/blog/js/scrollbars-v2/) depends on
      the following libraries
       ■ jQuery
       ■ jQuery.event.drag
       ■ jQuery.resize
       ■ mousehold
       ■ mousewheel
    ○ So, hardcode in your <head>.
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
 <script src="http://threedubmedia.googlecode.com/files/jquery.event.drag-2.0.min.js"></script>
 <script src="http://github.com/cowboy/jquery-resize/raw/v1.1/jquery.ba-resize.min.js"></script>
 <script src="http://remysharp.com/demo/mousehold.js"></script>
 <script src="https://raw.github.com/brandonaaron/jquery-mousewheel/master/jquery.mousewheel.js"></script>
Library struggle (CONT.)
● When your web application grows, more
  and more external libraries is used.
● The result will be a non-maintainable
  <head/>
StealJS
● Library dependancy solution
  ○ Part of stealJS is something like requireJS.
  ○ By concurrent ajax request.
  ○ steal('jquery').then
    ('jquery/ui','jquery/event/mousewheel').then('./lol.css',
    function(){
        //....
    });
● Code generator
  ○ ./js jquery/templates/controller A.B.C
● Compile scripts
● (Customizable) build process
Ajax struggle
● You can do nothing without server. Do you?
● Multi ajax request solution
Deferred Model
● Since jQuery 1.5, ajax is implemented as a
  deferred object.
● Models CRUD support deferred operation.
● $.fixture
  ○ Create a deferred instead of sending
    XMLHttpRequest to the server, but to the function
    you preferred.
Form operation
● Using formParams(), retrieve data from a
  form is easier.
● You do not to collect value one by one input.
The end?
● No, you will face problems if you want to
  start building a large web application using
  javascriptMVC.
● So how could I organize my application?
Next Topic:
● Let's rock on JavascriptMVC
  ○   How to start coding with JavascriptMVC?
  ○   What JavascriptMVC document lacks
  ○   A framework based on JavascriptMVC
  ○   Some common rules.
  ○   An example
Javascript is beautiful.
Let's use it to get the world better.
Ad

More Related Content

What's hot (20)

An Abusive Relationship with AngularJS
An Abusive Relationship with AngularJSAn Abusive Relationship with AngularJS
An Abusive Relationship with AngularJS
Mario Heiderich
 
NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1
Tomislav Capan
 
Full stack java script development
Full stack java script developmentFull stack java script development
Full stack java script development
Tomislav Capan
 
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web SitesDrupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
Jean-Baptiste Guerraz
 
Isomorphic React + Flux at Yahoo
Isomorphic React + Flux at YahooIsomorphic React + Flux at Yahoo
Isomorphic React + Flux at Yahoo
Itia Chang
 
The Bleeding Edge
The Bleeding EdgeThe Bleeding Edge
The Bleeding Edge
jClarity
 
Web worker
Web workerWeb worker
Web worker
Nitin Giri
 
Vanjs backbone-powerpoint
Vanjs backbone-powerpointVanjs backbone-powerpoint
Vanjs backbone-powerpoint
Michael Yagudaev
 
JavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de DatosJavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de Datos
philogb
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
Hariharan Ganesan
 
The Appy Hour
The Appy HourThe Appy Hour
The Appy Hour
BigRock India
 
まよいの墓(WebVR編)
まよいの墓(WebVR編)まよいの墓(WebVR編)
まよいの墓(WebVR編)
KatsuyaENDOH
 
New paradigms
New paradigmsNew paradigms
New paradigms
Borja A. Espejo García
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
Shailendra Chauhan
 
Javascript Update May 2013
Javascript Update May 2013Javascript Update May 2013
Javascript Update May 2013
RameshNair6
 
Incremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend DevelopmentIncremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend Development
Akihiro Ikezoe
 
Webpack
WebpackWebpack
Webpack
Jozef Spisiak
 
Fastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp RochesterFastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Imran Sayed
 
Introduction to webGL
Introduction to webGLIntroduction to webGL
Introduction to webGL
志鴻 詹
 
New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011
philogb
 
An Abusive Relationship with AngularJS
An Abusive Relationship with AngularJSAn Abusive Relationship with AngularJS
An Abusive Relationship with AngularJS
Mario Heiderich
 
NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1
Tomislav Capan
 
Full stack java script development
Full stack java script developmentFull stack java script development
Full stack java script development
Tomislav Capan
 
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web SitesDrupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
Jean-Baptiste Guerraz
 
Isomorphic React + Flux at Yahoo
Isomorphic React + Flux at YahooIsomorphic React + Flux at Yahoo
Isomorphic React + Flux at Yahoo
Itia Chang
 
The Bleeding Edge
The Bleeding EdgeThe Bleeding Edge
The Bleeding Edge
jClarity
 
JavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de DatosJavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de Datos
philogb
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
Hariharan Ganesan
 
まよいの墓(WebVR編)
まよいの墓(WebVR編)まよいの墓(WebVR編)
まよいの墓(WebVR編)
KatsuyaENDOH
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
Shailendra Chauhan
 
Javascript Update May 2013
Javascript Update May 2013Javascript Update May 2013
Javascript Update May 2013
RameshNair6
 
Incremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend DevelopmentIncremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend Development
Akihiro Ikezoe
 
Fastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp RochesterFastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Imran Sayed
 
Introduction to webGL
Introduction to webGLIntroduction to webGL
Introduction to webGL
志鴻 詹
 
New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011
philogb
 

Viewers also liked (7)

#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013
daf182
 
[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio Competing[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio Competing
Alive Kuo
 
FXOS Window management 101
FXOS Window management 101FXOS Window management 101
FXOS Window management 101
Alive Kuo
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
Alive Kuo
 
FirefoxOS Window Management
FirefoxOS Window ManagementFirefoxOS Window Management
FirefoxOS Window Management
Alive Kuo
 
Firefox OS Window management 201
Firefox OS Window management 201Firefox OS Window management 201
Firefox OS Window management 201
Alive Kuo
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
LinkedIn
 
#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013
daf182
 
[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio Competing[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio Competing
Alive Kuo
 
FXOS Window management 101
FXOS Window management 101FXOS Window management 101
FXOS Window management 101
Alive Kuo
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
Alive Kuo
 
FirefoxOS Window Management
FirefoxOS Window ManagementFirefoxOS Window Management
FirefoxOS Window Management
Alive Kuo
 
Firefox OS Window management 201
Firefox OS Window management 201Firefox OS Window management 201
Firefox OS Window management 201
Alive Kuo
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
LinkedIn
 
Ad

Similar to JavascriptMVC: Another choice of web framework (20)

Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan Kraus
Women in Technology Poland
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Tools
barciszewski
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
Women in Technology Poland
 
HTML5 New Features and Resources
HTML5 New Features and ResourcesHTML5 New Features and Resources
HTML5 New Features and Resources
Ron Reiter
 
Dust.js
Dust.jsDust.js
Dust.js
Yevgeniy Brikman
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
Igalia
 
Front-End Developer's Career Roadmap
Front-End Developer's Career RoadmapFront-End Developer's Career Roadmap
Front-End Developer's Career Roadmap
WebStackAcademy
 
In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you scream
Mario Heiderich
 
Building Real-World Dojo Web Applications
Building Real-World Dojo Web ApplicationsBuilding Real-World Dojo Web Applications
Building Real-World Dojo Web Applications
Andrew Ferrier
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JSFestUA
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
Vlad Fedosov
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
David Amend
 
Drupalcamp performance
Drupalcamp performanceDrupalcamp performance
Drupalcamp performance
Frontkom
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPages
Teamstudio
 
PyGrunn2013 High Performance Web Applications with TurboGears
PyGrunn2013  High Performance Web Applications with TurboGearsPyGrunn2013  High Performance Web Applications with TurboGears
PyGrunn2013 High Performance Web Applications with TurboGears
Alessandro Molina
 
Developing high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web workerDeveloping high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web worker
Suresh Patidar
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications Performance
Santex Group
 
Nicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JSNicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JS
JavaScript Meetup HCMC
 
jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013
dmethvin
 
jQuery - Chapter 1 - Introduction
 jQuery - Chapter 1 - Introduction jQuery - Chapter 1 - Introduction
jQuery - Chapter 1 - Introduction
WebStackAcademy
 
Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan Kraus
Women in Technology Poland
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Tools
barciszewski
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
Women in Technology Poland
 
HTML5 New Features and Resources
HTML5 New Features and ResourcesHTML5 New Features and Resources
HTML5 New Features and Resources
Ron Reiter
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
Igalia
 
Front-End Developer's Career Roadmap
Front-End Developer's Career RoadmapFront-End Developer's Career Roadmap
Front-End Developer's Career Roadmap
WebStackAcademy
 
In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you scream
Mario Heiderich
 
Building Real-World Dojo Web Applications
Building Real-World Dojo Web ApplicationsBuilding Real-World Dojo Web Applications
Building Real-World Dojo Web Applications
Andrew Ferrier
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JSFestUA
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
Vlad Fedosov
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
David Amend
 
Drupalcamp performance
Drupalcamp performanceDrupalcamp performance
Drupalcamp performance
Frontkom
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPages
Teamstudio
 
PyGrunn2013 High Performance Web Applications with TurboGears
PyGrunn2013  High Performance Web Applications with TurboGearsPyGrunn2013  High Performance Web Applications with TurboGears
PyGrunn2013 High Performance Web Applications with TurboGears
Alessandro Molina
 
Developing high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web workerDeveloping high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web worker
Suresh Patidar
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications Performance
Santex Group
 
jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013
dmethvin
 
jQuery - Chapter 1 - Introduction
 jQuery - Chapter 1 - Introduction jQuery - Chapter 1 - Introduction
jQuery - Chapter 1 - Introduction
WebStackAcademy
 
Ad

Recently uploaded (20)

Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Salesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docxSalesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docx
José Enrique López Rivera
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your UsersAutomation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Lynda Kane
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Salesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docxSalesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docx
José Enrique López Rivera
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your UsersAutomation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Lynda Kane
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 

JavascriptMVC: Another choice of web framework

  • 1. JavascriptMVC Another choose of web framework Alive C. Kuo
  • 2. About me ● 2010.01.04 ~ 2012.05.31 VIVOTEK Inc., software engineer ● 2012.06.01 ~ * Mozilla Corp., Front end enigeer ● ~1.5year web application experience ● email: [email protected]
  • 3. Life is a struggle ● Web application is hard to design and implement ● Framework ○ Client side ■ YUI ■ extjs ■ backbone ■ knockout ■ ... ○ Server side ■ zk ■ RoR ■ shtml ■ ...
  • 4. jQuery ● It is a library, not a framework. ● High performance to DOM scripting ● Easy to use with method chain ● http://jquery.com ● But, there's something we need it lacks..
  • 5. What jQuery lack ● Cross plugin communication ● Ajax gateway ● Web application management ● js/css/html files/directories management ● jQuery, will not teach you how to org your (huge) web application.
  • 6. Life is a struggle (CONT.) ● Just survey it. ○ Work hard every day.
  • 7. ExtJS ● http://www.sencha.com/products/extjs/ ● The initial version is forked from YUI2. ● PROS ○ Beautiful and uniform and windows-like UI styles ● CONS ○ Customization is hard to do. ○ NO MIT. It is a commercial product.
  • 8. YUI ● http://developer.yahoo.com/yui/ ● PROS ○ uniform UI styles ○ YQuery is suitable for cross-domain query. ○ Many F2E in Yahoo! will maintain it. ● CONS ○ Also customization.
  • 9. backbone.js ● http://documentcloud.github.com/backbone/ ● A MVC framework known to Mobile ● PROS ○ Resource more than javascripMVC! ● CONS ○ Just MVC layer. NO preset UI layer implementation ○ Documentation seems difficult to understand.
  • 10. javascriptMVC ● http://javascriptmvc.com ● PROS ○ MIT license ○ Clear documentation ○ Nearly total solution to build a web application ● CONS ○ Less resource in Taiwan ○ No preset UI layer implementation
  • 12. Why I choose javascriptMVC finally? ● clientside MVC - Meet my requirement on embedded system. ● I just couldn't figure out backbone's documentation and example.
  • 13. Life is a struggle. (CONT.) ● But, I still spend serveral days to read whole of its document and its forum. ● Try to understand why and how.
  • 14. Nice features in javascriptMVC ● Clear models/views/controllers and class inheritance ● CRUD Model layer ● Native event delegation ● View with Embedded js ● Fixture ● Library dependancy solution ● Build process ● Less CSS integration ● OpenAjax pubsub ● A basic application/project/product
  • 15. Case By Case Struggle and the Way
  • 16. CSS Struggles - Collision ● a.css div.data { background-color: red; } ● b.css div.data { background-color: white; }
  • 17. CSS struggles - One Level Statement/Rule Weight ● div.viewcell > div.plugin span.title span {} ● CSS rule has weights. ● CSS solutions: ○ SASS ○ Compass ○ LessCSS
  • 18. CSS Super Language ● SASS/Compass ○ Mixin, Variable, Sprite helper, Functions, CSS3 Helpers ○ jsfiddle(http://jsfiddle.net) supports SASS! ● LESS ○ http://lesscss.org ○ Javascript evaluable ○ Less feature than SASS ○ Both server side(Rhino or Node.js) & client side (Need compilation)
  • 19. LESS @company_blue: #0186d1; @focus_width: 100; div#content { div.title { background-color: @company_blue; &:hover,&:active { width: @focus_width; } } }
  • 20. Data Struggle - I don't want to know the details ● Backend service ○ CGI ○ fast cgi/wsgi ○ URL command ○ Dbus ○ Gconf ○ Web service ○ Tunnel message ○ JSON/XML ○ ...
  • 21. CRUD ● Create/Read/Update/Delete is most common for every kind of data access. ● Implement and wrapper your backend service for CRUD. ○ DataModel.create() ○ DataModel.update() ○ DataModel.delete() ○ DataModel.read()
  • 22. $.Model ● CRUD functions, overwrittable ● Event callback whenever data is ○ created ○ deleted ○ updated ○ and if you like, custom event on model is creatable. ● DOM embeddable ○ <div <%= model %></div> ● Validation in data model layer
  • 23. Plugin/Widget/UI component Struggle ● None loosely coupled. ● No cross function communication. ● DOM renew and event rebind ○ a long long string in your javascript like ■ $('#div').html('<div class="event"><span class=" name"></span><span class="icon" ></span></div>')
  • 24. $.Controller features ● OpenAjax PubSub ○ Not jQuery.pubsub, but the similar thing they could do. ● DOM manipulation is delegated to $.View() ● Native event delegation ○ jQuery.on() ○ 'button#save click': function(el, ev){ } ● FAST!
  • 25. $.View features ● Seperate HTML from your javascript codes. ● Reusable, cachable ● Logic (javascript) in HTML ○ http://embeddedjs.com ○ <ul> <% for(var i=0; i<supplies.length; i++) {% > <li><%= supplies[i] %></li> <% } %> </ul>
  • 26. Library struggle - dependancy ● Case ○ jQuery.scrollbars(http://www.aplweb.co.uk/blog/js/scrollbars-v2/) depends on the following libraries ■ jQuery ■ jQuery.event.drag ■ jQuery.resize ■ mousehold ■ mousewheel ○ So, hardcode in your <head>. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script src="http://threedubmedia.googlecode.com/files/jquery.event.drag-2.0.min.js"></script> <script src="http://github.com/cowboy/jquery-resize/raw/v1.1/jquery.ba-resize.min.js"></script> <script src="http://remysharp.com/demo/mousehold.js"></script> <script src="https://raw.github.com/brandonaaron/jquery-mousewheel/master/jquery.mousewheel.js"></script>
  • 27. Library struggle (CONT.) ● When your web application grows, more and more external libraries is used. ● The result will be a non-maintainable <head/>
  • 28. StealJS ● Library dependancy solution ○ Part of stealJS is something like requireJS. ○ By concurrent ajax request. ○ steal('jquery').then ('jquery/ui','jquery/event/mousewheel').then('./lol.css', function(){ //.... }); ● Code generator ○ ./js jquery/templates/controller A.B.C ● Compile scripts ● (Customizable) build process
  • 29. Ajax struggle ● You can do nothing without server. Do you? ● Multi ajax request solution
  • 30. Deferred Model ● Since jQuery 1.5, ajax is implemented as a deferred object. ● Models CRUD support deferred operation. ● $.fixture ○ Create a deferred instead of sending XMLHttpRequest to the server, but to the function you preferred.
  • 31. Form operation ● Using formParams(), retrieve data from a form is easier. ● You do not to collect value one by one input.
  • 32. The end? ● No, you will face problems if you want to start building a large web application using javascriptMVC. ● So how could I organize my application?
  • 33. Next Topic: ● Let's rock on JavascriptMVC ○ How to start coding with JavascriptMVC? ○ What JavascriptMVC document lacks ○ A framework based on JavascriptMVC ○ Some common rules. ○ An example
  • 34. Javascript is beautiful. Let's use it to get the world better.