SlideShare a Scribd company logo
JavaScript. High Performance
      Applications

                    21/03/12
                  Dev-Pro. net


                                 1
Javascript. What is it?
•   Everything is a object
•   Class free
•   Typeless syntax
•   No compilation
•   C-like syntax




                                     2
Patterns


General solution to a commonly
  occurring problem. Optimal
 solution to common problem




                                 3
Live design patterns demonstration:
•   Singleton
•   Module
•   Prototype
•   Factory
•   Decorator




                                          4
for loop research




                    5
Local Storage performance

<script>
localStorage.clear();

for(var i = 0; i < 100; i++)
 localStorage.setItem(i, 'Value ' + i);
</script>




                                          6
Jquery VS yourself code




                          7
Jquery VS yourself code




                          8
Node Storage




               9
Node Storage




               10
Regular expressions
<div id="foo" class="a foo bar"></div>
<script>
 Benchmark.prototype.setup = function() {
  var r;
  var element = document.getElementById('foo');
  var reContains = /(?:^| )foo(?: |$)/;

  function dynamicRegExp(node) {
    return RegExp('(?:^| )foo(?: |$)').test(node.className);
  }

  function inlineRegExp(node) {
    return /(?:^| )foo(?: |$)/.test(node.className);
  }

  function storedRegExp(node) {
    return reContains.test(node.className);
  }

  function stringIndexOf(node) {
    return (' ' + node.className + ' ').indexOf(' foo ') > -1;
  }


 };
</script>




                                                                 11
Regular expressions




                      12
prototype chain lookup, cached or not

<script>
 if (!Object.create) {
  Object.create = function(o) {
   function F() {}
   F.prototype = o;
   return new F();
  };}
    var foo = {
  fun: "weee!"
 },
     bar = Object.create(foo),
     baz = Object.create(bar),
     _fun = baz.fun,
     res;
</script>




                                                       13
prototype chain lookup, cached or not




                                        14
Operations which require an implicit primitive-to-
     object cast/conversion will be slower.




                                                     15
Operations which require an implicit primitive-to-
     object cast/conversion will be slower.




                                                     16
undefined void 0 perf
<script>
var undefined;
</script>
<script>
 Benchmark.prototype.setup = function() {
  var r;
  var u;
  var u2;

  var useVoid = function(a) {
   return (a === void 0);
  };

  var useGlobalUndefined = function(a) {
   return (a === undefined);
  };

  var useLocalUndefined = function(a) {
   return (a === u2);
  };

  var useTypeOfUndefined = function(a) {
    return typeof a === 'undefined';
  };
 };
</script>
                                                                    17
undefined void 0 perf




                        18
Switch vs If




               19
JavaScript Unit testing
Jasmine is a behavior-driven development framework for
testing your JavaScript code. It does not depend on any other
JavaScript frameworks. It does not require a DOM. And it has
a clean, obvious syntax so that you can easily write tests.




                                                           20
Jasmine

describe("isLeapYear", function() {
it("2004 should be leap year", function() {
          expect(isLeapYear(2004)).toBeTruthy();
          expect(isLeapYear(2004)).toEqual(true);
           });




                                                    21
Jasmine Matchers




                   22
JS-test Driver




                 23
JS-test Driver




                 24
JS test driver




                 25
YUI test framework




                     26
YUI test framework. Examples




                               27
BUILDING
 NATIVE APPS WITH
Titanium Mobile


                    28
What if you could create
apps using JavaScript?




                           29
Titanium Mobile

                  30
Titanium Mobile
Build Fully Native iPhone Apps




                                 31
32
JavaScript on the the sofa




                             33
34
35
36
JS & Gradle
assembly, minimizing, deploy




                               37
Why do I need automatic assembly
and deploy?

             Sooner or later any JS project
             grows, the amount and
             frequency of commits
             increase, and the
             solution is already out
             dozen JS files that need to be
             collect, and to minimize for
             the load on the server.

                                              38
What is a Gradle?
System assembly
which tries
to combine
all the advantages of Ant,
Maven, Ivy, and
present what
come out with Groovy.


                             39
I have a plan!
      1. Briefly about install Gradle
      2. Creating a build - a script that:
            ● connect the selected files and JS
      minimize them with Closure Compiler;
            ● flood min version of the FTP;
            ● Check the script on the practice;



                                             40
How to install?
1. Downloading a fresh package
                 http://gradle.org/downloads
2. Unpack the disk and add
subdirectory bin in path

3. Check the installation by entering gradle to
the console



                                                  41
JS plug-in for Gradle

There exists an Gradle two plug-in, both based
for GCC, but differ in the rules of the assembly:


https://launchpad.net/gradle-jsli
https://github.com/eriwen/gradle-js-plugin



                                                    42
Writing gradle script
In the root folder, create a new project
file and call it core.gradle

It is assumed that the working directory script
($ {projectDir}) is a subfolder SRP




                                                  43
Check the availability of plug-in set out in
the Maven repository
If there is no
buildscript {
         repositories {
                   mavenCentral()
         }
         dependencies {
         //Install plugin from Maven Repo
         classpath 'com.eriwen:gradle-js-plugin:0.3'
         }
}

 And use it
apply plugin: 'js'
                                                       44
Task plug-in bonding,
inputs and outputs asking
combineJs {
     file1 = fileTree(dir: "${projectDir}/src/Core",
     includes: ['Framework/core.js'])
     file2 = fileTree(dir: "${projectDir}/src/Core",
     includes: ['Framework/strings.js'])
     inputs.files file1 + file2
     outputs.file file("$
     {projectDir}/min/corecombined.js")
}

                                                       45
Plug-in task minification

minifyJs {
  inputs.files fileTree(dir: "${projectDir}/min",
  include: "corecombined.js")
  outputs.file file("${projectDir}/min/core.min.js")
}



                                                 46
Upload to FTP
To use the Ant deploy TASK, which
describe in a separate file - deploycore.xml.

Content you might deploycore.xml
view / copy of the articles
pixelscommander.com

In gradle script call Ant TASK:
ant.importBuild 'deploycore.xml'
                                                47
Finally, call the script gradle
           from the console

gradle -b= core.gradle combineJs minifyJs




                 Questions?
                                        48
Thank you for your attention!


          Presenter:
          Zakharchenko Artem



                                49

More Related Content

PDF
Gradle in 45min
PDF
Everything as a code
PDF
Using the Groovy Ecosystem for Rapid JVM Development
PDF
Scala, Functional Programming and Team Productivity
PDF
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...
PDF
Gradle talk, Javarsovia 2010
PDF
Hyper-pragmatic Pure FP testing with distage-testkit
PDF
Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle in 45min
Everything as a code
Using the Groovy Ecosystem for Rapid JVM Development
Scala, Functional Programming and Team Productivity
distage: Purely Functional Staged Dependency Injection; bonus: Faking Kind Po...
Gradle talk, Javarsovia 2010
Hyper-pragmatic Pure FP testing with distage-testkit
Gradle For Beginners (Serbian Developer Conference 2013 english)

What's hot (20)

PDF
ScalaUA - distage: Staged Dependency Injection
PDF
Izumi 1.0: Your Next Scala Stack
PDF
Enter the gradle
PDF
We Are All Testers Now: The Testing Pyramid and Front-End Development
PDF
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
PDF
Javascript TDD with Jasmine, Karma, and Gulp
PPTX
Jenkins Evolutions - JEEConf 2012
PDF
Idiomatic gradle plugin writing
PDF
Basic Gradle Plugin Writing
PDF
Integration tests: use the containers, Luke!
PDF
Better Code: Concurrency
PDF
Automated acceptance test
ODP
Gradle: The Build System you have been waiting for!
PDF
Making the most of your gradle build - Greach 2017
PDF
Making the most of your gradle build - Gr8Conf 2017
PPTX
Java Libraries You Can’t Afford to Miss
PDF
Java EE 6 CDI Integrates with Spring & JSF
PPTX
Gradle,the new build system for android
PDF
淺談 Groovy 與 AWS 雲端應用開發整合
ScalaUA - distage: Staged Dependency Injection
Izumi 1.0: Your Next Scala Stack
Enter the gradle
We Are All Testers Now: The Testing Pyramid and Front-End Development
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Javascript TDD with Jasmine, Karma, and Gulp
Jenkins Evolutions - JEEConf 2012
Idiomatic gradle plugin writing
Basic Gradle Plugin Writing
Integration tests: use the containers, Luke!
Better Code: Concurrency
Automated acceptance test
Gradle: The Build System you have been waiting for!
Making the most of your gradle build - Greach 2017
Making the most of your gradle build - Gr8Conf 2017
Java Libraries You Can’t Afford to Miss
Java EE 6 CDI Integrates with Spring & JSF
Gradle,the new build system for android
淺談 Groovy 與 AWS 雲端應用開發整合
Ad

Viewers also liked (12)

PPTX
Dalvik Vm &amp; Jit
PPT
Веб 2.0 (блоги)
PDF
Js in Automotive - JS.everywhere(2013)
KEY
ParisJS meetup 8 - june 2011
PDF
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
PDF
Александр Кашеверов — Коротко про WEB: HTML, CSS, JS.
PDF
Git Version Control System
KEY
State of the art: Server-side JavaScript - MoscowJS
PDF
What is version control software and why do you need it?
PPT
Develop webservice in PHP
PDF
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
PDF
DOM Scripting Toolkit - jQuery
Dalvik Vm &amp; Jit
Веб 2.0 (блоги)
Js in Automotive - JS.everywhere(2013)
ParisJS meetup 8 - june 2011
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Александр Кашеверов — Коротко про WEB: HTML, CSS, JS.
Git Version Control System
State of the art: Server-side JavaScript - MoscowJS
What is version control software and why do you need it?
Develop webservice in PHP
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
DOM Scripting Toolkit - jQuery
Ad

Similar to Js tacktalk team dev js testing performance (20)

PDF
Node.js #digpen presentation
PDF
Server Side Javascript
PDF
Expert JavaScript Programming
PDF
Javascript Dependency Management
PDF
Using RequireJS for Modular JavaScript Code
PDF
Choosing Javascript Libraries to Adopt for Development
PDF
JavaScript Intro
PDF
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"
PDF
Jslab rssh: JS as language platform
PDF
State of the art: Server-Side JavaScript - dejeuner fulljs
PPTX
Cross-platform development on mobile devices
PPTX
OGDC2012 Cross-Platform Development On Mobile Devices_Mr.Takaaki Mizuno_DeNA
PPTX
A few good JavaScript development tools
PDF
Angular Weekend
PDF
Continuous Integration for front-end JavaScript
KEY
State of the art - server side JavaScript - web-5 2012
KEY
AMD - Why, What and How
PDF
Splash
KEY
Single Page Applications - Desert Code Camp 2012
PDF
A New Baseline for Front-End Devs
Node.js #digpen presentation
Server Side Javascript
Expert JavaScript Programming
Javascript Dependency Management
Using RequireJS for Modular JavaScript Code
Choosing Javascript Libraries to Adopt for Development
JavaScript Intro
JSLab.Руслан Шевченко."JavaScript как платформа компиляции"
Jslab rssh: JS as language platform
State of the art: Server-Side JavaScript - dejeuner fulljs
Cross-platform development on mobile devices
OGDC2012 Cross-Platform Development On Mobile Devices_Mr.Takaaki Mizuno_DeNA
A few good JavaScript development tools
Angular Weekend
Continuous Integration for front-end JavaScript
State of the art - server side JavaScript - web-5 2012
AMD - Why, What and How
Splash
Single Page Applications - Desert Code Camp 2012
A New Baseline for Front-End Devs

More from Артем Захарченко (8)

PDF
Frontend performance metrics
PDF
Fullstack javascript. Isomorphic apps
PDF
Performance optimisation in javascript
PDF
Build your own multistack JS startup
PDF
WebRTC in production
PPTX
Frontend performance metrics
Fullstack javascript. Isomorphic apps
Performance optimisation in javascript
Build your own multistack JS startup
WebRTC in production

Js tacktalk team dev js testing performance

  • 1. JavaScript. High Performance Applications 21/03/12 Dev-Pro. net 1
  • 2. Javascript. What is it? • Everything is a object • Class free • Typeless syntax • No compilation • C-like syntax 2
  • 3. Patterns General solution to a commonly occurring problem. Optimal solution to common problem 3
  • 4. Live design patterns demonstration: • Singleton • Module • Prototype • Factory • Decorator 4
  • 6. Local Storage performance <script> localStorage.clear(); for(var i = 0; i < 100; i++) localStorage.setItem(i, 'Value ' + i); </script> 6
  • 11. Regular expressions <div id="foo" class="a foo bar"></div> <script> Benchmark.prototype.setup = function() { var r; var element = document.getElementById('foo'); var reContains = /(?:^| )foo(?: |$)/; function dynamicRegExp(node) { return RegExp('(?:^| )foo(?: |$)').test(node.className); } function inlineRegExp(node) { return /(?:^| )foo(?: |$)/.test(node.className); } function storedRegExp(node) { return reContains.test(node.className); } function stringIndexOf(node) { return (' ' + node.className + ' ').indexOf(' foo ') > -1; } }; </script> 11
  • 13. prototype chain lookup, cached or not <script> if (!Object.create) { Object.create = function(o) { function F() {} F.prototype = o; return new F(); };} var foo = { fun: "weee!" }, bar = Object.create(foo), baz = Object.create(bar), _fun = baz.fun, res; </script> 13
  • 14. prototype chain lookup, cached or not 14
  • 15. Operations which require an implicit primitive-to- object cast/conversion will be slower. 15
  • 16. Operations which require an implicit primitive-to- object cast/conversion will be slower. 16
  • 17. undefined void 0 perf <script> var undefined; </script> <script> Benchmark.prototype.setup = function() { var r; var u; var u2; var useVoid = function(a) { return (a === void 0); }; var useGlobalUndefined = function(a) { return (a === undefined); }; var useLocalUndefined = function(a) { return (a === u2); }; var useTypeOfUndefined = function(a) { return typeof a === 'undefined'; }; }; </script> 17
  • 18. undefined void 0 perf 18
  • 20. JavaScript Unit testing Jasmine is a behavior-driven development framework for testing your JavaScript code. It does not depend on any other JavaScript frameworks. It does not require a DOM. And it has a clean, obvious syntax so that you can easily write tests. 20
  • 21. Jasmine describe("isLeapYear", function() { it("2004 should be leap year", function() { expect(isLeapYear(2004)).toBeTruthy(); expect(isLeapYear(2004)).toEqual(true); }); 21
  • 27. YUI test framework. Examples 27
  • 28. BUILDING NATIVE APPS WITH Titanium Mobile 28
  • 29. What if you could create apps using JavaScript? 29
  • 31. Titanium Mobile Build Fully Native iPhone Apps 31
  • 32. 32
  • 33. JavaScript on the the sofa 33
  • 34. 34
  • 35. 35
  • 36. 36
  • 37. JS & Gradle assembly, minimizing, deploy 37
  • 38. Why do I need automatic assembly and deploy? Sooner or later any JS project grows, the amount and frequency of commits increase, and the solution is already out dozen JS files that need to be collect, and to minimize for the load on the server. 38
  • 39. What is a Gradle? System assembly which tries to combine all the advantages of Ant, Maven, Ivy, and present what come out with Groovy. 39
  • 40. I have a plan! 1. Briefly about install Gradle 2. Creating a build - a script that: ● connect the selected files and JS minimize them with Closure Compiler; ● flood min version of the FTP; ● Check the script on the practice; 40
  • 41. How to install? 1. Downloading a fresh package http://gradle.org/downloads 2. Unpack the disk and add subdirectory bin in path 3. Check the installation by entering gradle to the console 41
  • 42. JS plug-in for Gradle There exists an Gradle two plug-in, both based for GCC, but differ in the rules of the assembly: https://launchpad.net/gradle-jsli https://github.com/eriwen/gradle-js-plugin 42
  • 43. Writing gradle script In the root folder, create a new project file and call it core.gradle It is assumed that the working directory script ($ {projectDir}) is a subfolder SRP 43
  • 44. Check the availability of plug-in set out in the Maven repository If there is no buildscript { repositories { mavenCentral() } dependencies { //Install plugin from Maven Repo classpath 'com.eriwen:gradle-js-plugin:0.3' } } And use it apply plugin: 'js' 44
  • 45. Task plug-in bonding, inputs and outputs asking combineJs { file1 = fileTree(dir: "${projectDir}/src/Core", includes: ['Framework/core.js']) file2 = fileTree(dir: "${projectDir}/src/Core", includes: ['Framework/strings.js']) inputs.files file1 + file2 outputs.file file("$ {projectDir}/min/corecombined.js") } 45
  • 46. Plug-in task minification minifyJs { inputs.files fileTree(dir: "${projectDir}/min", include: "corecombined.js") outputs.file file("${projectDir}/min/core.min.js") } 46
  • 47. Upload to FTP To use the Ant deploy TASK, which describe in a separate file - deploycore.xml. Content you might deploycore.xml view / copy of the articles pixelscommander.com In gradle script call Ant TASK: ant.importBuild 'deploycore.xml' 47
  • 48. Finally, call the script gradle from the console gradle -b= core.gradle combineJs minifyJs Questions? 48
  • 49. Thank you for your attention! Presenter: Zakharchenko Artem 49