SlideShare ist ein Scribd-Unternehmen logo
1 von 49
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

Weitere ähnliche Inhalte

Was ist angesagt?

Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012
Anton Arhipov
 
Java EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSFJava EE 6 CDI Integrates with Spring & JSF
Java EE 6 CDI Integrates with Spring & JSF
Jiayun Zhou
 

Was ist angesagt? (20)

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

Andere mochten auch

Dalvik Vm &amp; Jit
Dalvik Vm &amp; JitDalvik Vm &amp; Jit
Dalvik Vm &amp; Jit
Ankit Somani
 
Веб 2.0 (блоги)
Веб 2.0 (блоги)Веб 2.0 (блоги)
Веб 2.0 (блоги)
Evgeniya Kulyk
 
Js in Automotive - JS.everywhere(2013)
Js in Automotive - JS.everywhere(2013)Js in Automotive - JS.everywhere(2013)
Js in Automotive - JS.everywhere(2013)
Alexandre Morgaut
 
State of the art: Server-side JavaScript - MoscowJS
State of the art: Server-side JavaScript - MoscowJSState of the art: Server-side JavaScript - MoscowJS
State of the art: Server-side JavaScript - MoscowJS
Alexandre Morgaut
 

Andere mochten auch (12)

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

Ähnlich wie Js tacktalk team dev js testing performance

把鐵路開進視窗裡
把鐵路開進視窗裡把鐵路開進視窗裡
把鐵路開進視窗裡
Wei Jen Lu
 
Unit Testing RPG with JUnit
Unit Testing RPG with JUnitUnit Testing RPG with JUnit
Unit Testing RPG with JUnit
Greg.Helton
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Engine
catherinewall
 

Ähnlich wie Js tacktalk team dev js testing performance (20)

Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)
 
In the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: GradleIn the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: Gradle
 
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA Testers
 
Angular JS in 2017
Angular JS in 2017Angular JS in 2017
Angular JS in 2017
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
Eric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build systemEric Lafortune - The Jack and Jill build system
Eric Lafortune - The Jack and Jill build system
 
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
 
把鐵路開進視窗裡
把鐵路開進視窗裡把鐵路開進視窗裡
把鐵路開進視窗裡
 
Unit Testing RPG with JUnit
Unit Testing RPG with JUnitUnit Testing RPG with JUnit
Unit Testing RPG with JUnit
 
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
Make it test-driven with CDI!
Make it test-driven with CDI!Make it test-driven with CDI!
Make it test-driven with CDI!
 
Run alone: a standalone application attempt by Gabriel Sor
Run alone: a standalone application attempt by Gabriel SorRun alone: a standalone application attempt by Gabriel Sor
Run alone: a standalone application attempt by Gabriel Sor
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Engine
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
 
Useful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmUseful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvm
 
Gitlab and Lingvokot
Gitlab and LingvokotGitlab and Lingvokot
Gitlab and Lingvokot
 

Mehr von Артем Захарченко (8)

Frontend performance metrics
Frontend performance metricsFrontend performance metrics
Frontend performance metrics
 
dataflow.pptx
dataflow.pptxdataflow.pptx
dataflow.pptx
 
Background js
Background jsBackground js
Background js
 
Fullstack javascript. Isomorphic apps
Fullstack javascript. Isomorphic appsFullstack javascript. Isomorphic apps
Fullstack javascript. Isomorphic apps
 
Performance optimisation in javascript
Performance optimisation in javascriptPerformance optimisation in javascript
Performance optimisation in javascript
 
Build your own multistack JS startup
Build your own multistack JS startupBuild your own multistack JS startup
Build your own multistack JS startup
 
WebRTC in production
WebRTC in productionWebRTC in production
WebRTC in production
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 

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