SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
MAKING FEP TESTING
…..A PART OF CONTINUOUS INTEGRATION
XYZ – Making FEP testing a part of Continuous Integration
2
Contents
OBJECTIVE.................................................................................................................................................................................. 3
PROBLEM STATEMENT........................................................................................................................................................ 4
TOOLS/TECHNIQUES AVAILABLE FOR AUTOMATING FEP REPORT............................................................... 5
1) BROWSER-PERF .............................................................................................................................................................. 5
2) PERFJANKIE ..................................................................................................................................................................... 6
3) SAUCELABS...................................................................................................................................................................... 7
4) GOOGLE CLOSURE COMPILER....................................................................................................................................... 8
5) SPY JS............................................................................................................................................................................... 9
6) PHANTOMAS..................................................................................................................................................................11
7) WEBPAGETEST-API......................................................................................................................................................12
8) JSHINT + GRUNT..........................................................................................................................................................12
9) PHANTOMJS ..................................................................................................................................................................13
BEST PRACTICES AND CHECKLISTS.............................................................................................................................14
1) SINGLE PAGE APPLICATION........................................................................................................................................14
2) JAVASCRIPT/ JQUERY BEST PRACTICES...................................................................................................................14
MAPPING AVAILABLE TECHNIQUES AGAINST SDLC PHASES ..........................................................................15
REFERENCES...........................................................................................................................................................................16
XYZ – Making FEP testing a part of Continuous Integration
3
Objective
This document intends to make a case out of whether it’s possible to objectify the javascript
performance loopholes at every build – and that too automated.
The usual ones do tend to check for syntax, for best practices, but not many around for checking if
by profiling if JavaScript functions and methods do take longer to execute.
The document tries to list down some options available – and maybe stitch together a combination
of many to serve the need of future XYZ products, for the Site Dev team.
XYZ – Making FEP testing a part of Continuous Integration
4
Problem statement
1. Lesser or almost non-existent documentation of checklists for developers
2. Non adherence to checklists (when provided) due to ever changing team dynamics
3. Lack of automated Code Review process to call out code/development errors
4. Lack of developer skills to understand best (and performing) code practices
XYZ – Making FEP testing a part of Continuous Integration
5
Tools/techniques available for automating FEP report
1) browser-perf
http://nparashuram.com/perfslides/#presentation&10
Install browser-Perf from (NPM)
Run it from the (CMD) or add it to a CI system
like (Jenkins)
 Browser-perf is a NodeJS based tool
 For measuring browser performance metrics (like layout, paint, dom load or frame times)
 For Web pages, Cordova/Phonegap and other Hybrid applications.
 Metrics are measured when scrolling the web page, or during a Checkout workflow defined
using Selenium.
 Tool collects the metrics from sources like about:tracing, Chrome Devtools timeline, IE UI
Responsiveness tab, Xperf, etc.
 Monitor this information regularly by integrating the tool with continuous integration
systems.
https://github.com/axemclion/browser-perf
Screenshots for Browser-perf
From https://gist.github.com/axemclion/8620794
XYZ – Making FEP testing a part of Continuous Integration
6
2) perfjankie
http://nparashuram.com/perfslides/#presentation&10
Add perfjankie task into (GRUNT) build process.
All data and HTML/JS for the graphs are saved
in (CouchDB).
PerfJankie uses browser-perf to measure browser rendering performance metrics and tabulate
the results in a CouchDB database. It is a node module available as perfjankie and can be integrated
into any continuous integration system.
https://www.npmjs.org/package/perfjankie
Screenshot for perfjankie
From http://blog.nparashuram.com/2014/06/perfslides-demo-app-to-show-that.html
XYZ – Making FEP testing a part of Continuous Integration
7
3) SauceLabs
https://saucelabs.com/javascript/?dmr=0801f3fc4276057257c2237525fc69da0a6063f5d84aa20548a87bd
da763
Get better test coverage
Reliable access to the browsers you need, with 99.5% uptime. Test your JavaScript on 350+
browsers/OS platforms on mobile and web.
Run your existing tests
Convenient REST API runs your existing unit tests in the cloud. Integrate JavaScript unit testing
with your CI system.
Test details and history
Cross-browser testing made easier. See all your JavaScript test results conveniently organized by
browser, and access historical results any time.
https://docs.saucelabs.com/tutorials/js-unit-testing/
https://github.com/axemclion/grunt-saucelabs (Grunt Plugin)
(contd..)
Screenshots for SauceLabs usage
From http://blog.revolunet.com/blog/2013/12/05/unit-testing-angularjs-directive/
XYZ – Making FEP testing a part of Continuous Integration
8
4) Google Closure Compiler
https://developers.google.com/closure/
The Closure Compiler is a tool for making JavaScript download and run faster. It is a true compiler
for JavaScript. Instead of compiling from a source language to machine code, it compiles from
JavaScript to better JavaScript. It parses your JavaScript, analyzes it, removes dead code and
rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns
about common JavaScript pitfalls.
http://www.normalesup.org/~simonet/soft/ow/eclipse-closure-javascript.en.html (Eclipse Plugin)
https://www.npmjs.org/package/grunt-google-closure-compiler (Grunt Plugin)
https://github.com/gmarty/grunt-closure-compiler (Grunt Plugin)
Screenshots for Google Closure Compiler
From https://developers.google.com/speed/articles/compressing-javascript
XYZ – Making FEP testing a part of Continuous Integration
9
5) Spy JS
http://spy-js.com/
Architecturally spy-js is a web application powered by node.js web server and browser client. How
it works: browser/system with the page that you’d like to trace scripts for is configured to connect
to proxy server (which is node.js app). Node server acts as a proxy and retrieves the page and other
requested resources by originally requested URLs. If the resource is a JavaScript, server modifies it
before sending it back to browser. The modification doesn’t affect your code logic and is just code
instrumentation instructions to perform execution tracing. When modified JavaScript code executes
in browser, it sends runtime information back to server that processes it and sends it to spy-js UI,
where you can see occurring events with details almost in a real-time.
http://blog.jetbrains.com/webstorm/2014/08/tracing-debugging-and-profiling-node-js-with-spy-js/
Screenshots for SpyJS
From https://github.com/spy-js/spy-js
XYZ – Making FEP testing a part of Continuous Integration
10
From http://spy-js.com/
XYZ – Making FEP testing a part of Continuous Integration
11
6) Phantomas
https://www.npmjs.org/package/phantomas
Phantomas is a PhantomJS-based web performance metrics collector.
It features,
 modular approach - each metric is generated by a separate "module"
 phantomas "core" acts as an events emitter that each module can hook into
 in-depth metrics such as: number of events bound via jQuery, calls to window.writeor
complex and duplicated CSS selectors (via analyze-css)
 JSON and CSV as available output formats for easy integration with automated reporting /
monitoring tools
 easy integration with Continuous Integration tools via TAP format and assertions handling
 metrics can be sent via StatsD or stored in elasticsearch
 easy integration with other nodejs projects via CommonJS module (see API docs)
 metrics can be emitted from JavaScript code of the page phantomas is run against (thanks to
helper functions available in window.__phantomas)
 device profiles allow phantomas to emulate mobile or tablet (by setting a proper user agent
and viewport)
 ability to run phantomas using WebKit (PhantomJS) or Gecko (SlimerJS) engine
(experimental)
https://www.npmjs.org/package/grunt-phantomas (Grunt Plugin)
This grunt plugin executes phantomas and visualizes the returned metrics in a generated
index.html. It keeps track of history, so it can be set up to check reports after every deployment of
your site. To learn how to setup history tracking in different CI systems read the OPTIONS section.
Screenshots for Phantomas
From http://stefanjudis.github.io/phantomas-custom-metrics-tryout/metrics/
XYZ – Making FEP testing a part of Continuous Integration
12
7) Webpagetest-api
https://github.com/marcelduran/webpagetest-api
WebPageTest API Wrapper is a NPM package that wraps WebPageTest API for NodeJS as a module
and a command-line tool.
WebPageTest API Wrapper provides a simple seamless way to integrate WebPageTest with
Continuous Integration tools. The dedicated page is provided at,
https://github.com/marcelduran/webpagetest-api/wiki/Test-Specs
8) JSHint + Grunt
https://github.com/gruntjs/grunt-contrib-jshint
XYZ – Making FEP testing a part of Continuous Integration
13
JSHint is a code quality tool. It can help debug JS and catch any little mistakes being made.
It can also do lots of nice things like tell you when you have unused variables.
# examples/grunt/jshint
$ npm install
# usage
$ grunt watch
# show all errors without stopping
$ grunt watch --force
http://www.impossiblesiebel.com/2014/09/open-ui-grunt-and-jshint.html
Screenshots for JShint
From http://embersherpa.com/articles/introduction-to-ember-app-kit/
9) PhantomJS
http://phantomjs.org/
 Headless instance of WebKit
 Phantom does everything a webkit browser can do, except there's no monitor.
It CAN produce visual pages on command.
 It's an indispensable tool for automating tasks that require loading up a web page and doing
something (screenshots, window resizes, clicking things, etc)
XYZ – Making FEP testing a part of Continuous Integration
14
Best Practices and checklists
1) Single Page Application
Target-SPA-BesPrax.
docx
This (constantly evolving) document lists down the best practices
for Single Page Applications
2) JavaScript/ JQuery Best Practices
Target-JS-Best-Pract
ices.docx
This document lists down the best practices for basic JS and JQuery
development.
XYZ – Making FEP testing a part of Continuous Integration
15
Mapping available Techniques against SDLC phases
XYZ – Making FEP testing a part of Continuous Integration
16
References
1. http://4waisenkinder.de/blog/2013/12/22/how-to-measure-frontend-performance-with-
phantomas-and-grunt/
2. http://aaron.jorb.in/blog/2012/07/automating-your-front-end-development-workflow/
3. http://blog.maxcdn.com/behind-scenes-tools-maxcdn-com/
4. http://blog.revolunet.com/blog/2013/12/05/unit-testing-angularjs-directive/
5. http://calendar.perfplanet.com/2013/phantomas/
6. http://embersherpa.com/articles/introduction-to-ember-app-kit/
7. http://fourword.fourkitchens.com/article/automated-frontend-tools
8. http://fourword.fourkitchens.com/article/performance-design-budget-and-test
9. http://internetmarketing-readme.pricemaniacs.com/category/website-performance/
10. http://isobar-idev.github.io/code-standards/
11. http://jeremyckahn.github.io/blog/2012/07/01/treating-javascript-like-a-30-year-old-
language/
12. http://nparashuram.com/perfslides/
13. http://rupl.github.io/frontend-ops
14. http://rupl.github.io/frontend-perf
15. http://rupl.github.io/frontend-testing
16. http://spy-js.com/why.html
17. http://updates.html5rocks.com/2013/11/The-Landscape-Of-Front-end-Development-
Automation-Slides
18. http://www.slideshare.net/ArtemGovorov/spyjs
19. http://www.smashingmagazine.com/2013/06/11/front-end-ops/
20. https://austin2014.drupal.org/session/automated-frontend-testing
21. https://gist.github.com/axemclion/8620794
22. https://github.com/axemclion/browser-perf
23. https://github.com/axemclion/perfjankie/
24. https://hacks.mozilla.org/2012/12/fantastic-front-end-performance-part-1-concatenate-
compress-cache-a-node-js-holiday-season-part-4/
25. https://www.npmjs.org/package/browser-perf
26. https://github.com/marcelduran/webpagetest-api

Mais conteúdo relacionado

Mais procurados

Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Ver...
Towards Flink 2.0:  Unified Batch & Stream Processing - Aljoscha Krettek, Ver...Towards Flink 2.0:  Unified Batch & Stream Processing - Aljoscha Krettek, Ver...
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Ver...Flink Forward
 
Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Schalk Cronjé
 
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...Puppet
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰KAI CHU CHUNG
 
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...Puppet
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionSchalk Cronjé
 
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeGDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeKAI CHU CHUNG
 
When third parties stop being polite... and start getting real
When third parties stop being polite... and start getting realWhen third parties stop being polite... and start getting real
When third parties stop being polite... and start getting realCharles Vazac
 
Android Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyondAndroid Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyondRamon Ribeiro Rabello
 
Angular Extreme Performance - V2
Angular Extreme Performance - V2Angular Extreme Performance - V2
Angular Extreme Performance - V2Gustavo Costa
 
Are We Fast Yet? HTML & Javascript Performance - UtahJS
Are We Fast Yet? HTML & Javascript Performance - UtahJSAre We Fast Yet? HTML & Javascript Performance - UtahJS
Are We Fast Yet? HTML & Javascript Performance - UtahJSTrevor Linton
 
Testing - Selenium? Rich-Clients? Containers?
Testing - Selenium? Rich-Clients? Containers?Testing - Selenium? Rich-Clients? Containers?
Testing - Selenium? Rich-Clients? Containers?Tobias Schneck
 

Mais procurados (16)

sed.pdf
sed.pdfsed.pdf
sed.pdf
 
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Ver...
Towards Flink 2.0:  Unified Batch & Stream Processing - Aljoscha Krettek, Ver...Towards Flink 2.0:  Unified Batch & Stream Processing - Aljoscha Krettek, Ver...
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Ver...
 
Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016Idiomatic Gradle Plugin Writing - GradleSummit 2016
Idiomatic Gradle Plugin Writing - GradleSummit 2016
 
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
 
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
 
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeGDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
When third parties stop being polite... and start getting real
When third parties stop being polite... and start getting realWhen third parties stop being polite... and start getting real
When third parties stop being polite... and start getting real
 
Android Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyondAndroid Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyond
 
JCatapult
JCatapultJCatapult
JCatapult
 
Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発Springを用いた社内ライブラリ開発
Springを用いた社内ライブラリ開発
 
Angular Extreme Performance - V2
Angular Extreme Performance - V2Angular Extreme Performance - V2
Angular Extreme Performance - V2
 
Are We Fast Yet? HTML & Javascript Performance - UtahJS
Are We Fast Yet? HTML & Javascript Performance - UtahJSAre We Fast Yet? HTML & Javascript Performance - UtahJS
Are We Fast Yet? HTML & Javascript Performance - UtahJS
 
Testing - Selenium? Rich-Clients? Containers?
Testing - Selenium? Rich-Clients? Containers?Testing - Selenium? Rich-Clients? Containers?
Testing - Selenium? Rich-Clients? Containers?
 

Semelhante a Front End performance as a Continuous Integration - Part1

Continuous Integration using Cruise Control
Continuous Integration using Cruise ControlContinuous Integration using Cruise Control
Continuous Integration using Cruise Controlelliando dias
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Appschrisb206 chrisb206
 
OpenStack Murano introduction
OpenStack Murano introductionOpenStack Murano introduction
OpenStack Murano introductionVictor Zhang
 
JavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In DepthJavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In DepthDanno Ferrin
 
Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016Canturk Isci
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidenceJohn Congdon
 
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaArvind Kumar G.S
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with exampleshadabgilani
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...Fwdays
 
Smp agentry app_development
Smp agentry app_developmentSmp agentry app_development
Smp agentry app_developmentGanesh Kumar
 
Dive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceDive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceOleksii Prohonnyi
 
Managing Your Runtime With P2
Managing Your Runtime With P2Managing Your Runtime With P2
Managing Your Runtime With P2Pascal Rapicault
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material designSrinadh Kanugala
 
Technical Tips: Visual Regression Testing and Environment Comparison with Bac...
Technical Tips: Visual Regression Testing and Environment Comparison with Bac...Technical Tips: Visual Regression Testing and Environment Comparison with Bac...
Technical Tips: Visual Regression Testing and Environment Comparison with Bac...Building Blocks
 
Jenkins users meetup plugins overview
Jenkins users meetup plugins overviewJenkins users meetup plugins overview
Jenkins users meetup plugins overviewCamblor Frédéric
 
Ibm urban code_deploy_v6_lab-workbook
Ibm urban code_deploy_v6_lab-workbookIbm urban code_deploy_v6_lab-workbook
Ibm urban code_deploy_v6_lab-workbookBalipalliGayathri
 

Semelhante a Front End performance as a Continuous Integration - Part1 (20)

Continuous Integration using Cruise Control
Continuous Integration using Cruise ControlContinuous Integration using Cruise Control
Continuous Integration using Cruise Control
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
 
OpenStack Murano introduction
OpenStack Murano introductionOpenStack Murano introduction
OpenStack Murano introduction
 
JavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In DepthJavaOne 2009 BOF-5189 Griffon In Depth
JavaOne 2009 BOF-5189 Griffon In Depth
 
Griffon Presentation
Griffon PresentationGriffon Presentation
Griffon Presentation
 
Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016
 
Release with confidence
Release with confidenceRelease with confidence
Release with confidence
 
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and Grafana
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with example
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
 
Smp agentry app_development
Smp agentry app_developmentSmp agentry app_development
Smp agentry app_development
 
Dive into Angular, part 5: Experience
Dive into Angular, part 5: ExperienceDive into Angular, part 5: Experience
Dive into Angular, part 5: Experience
 
Managing Your Runtime With P2
Managing Your Runtime With P2Managing Your Runtime With P2
Managing Your Runtime With P2
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material design
 
Glimpse of Loops Vs Set
Glimpse of Loops Vs SetGlimpse of Loops Vs Set
Glimpse of Loops Vs Set
 
Webapp2 2.2
Webapp2 2.2Webapp2 2.2
Webapp2 2.2
 
Technical Tips: Visual Regression Testing and Environment Comparison with Bac...
Technical Tips: Visual Regression Testing and Environment Comparison with Bac...Technical Tips: Visual Regression Testing and Environment Comparison with Bac...
Technical Tips: Visual Regression Testing and Environment Comparison with Bac...
 
Jenkins users meetup plugins overview
Jenkins users meetup plugins overviewJenkins users meetup plugins overview
Jenkins users meetup plugins overview
 
Exploring Maven SVN GIT
Exploring Maven SVN GITExploring Maven SVN GIT
Exploring Maven SVN GIT
 
Ibm urban code_deploy_v6_lab-workbook
Ibm urban code_deploy_v6_lab-workbookIbm urban code_deploy_v6_lab-workbook
Ibm urban code_deploy_v6_lab-workbook
 

Último

Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456KiaraTiradoMicha
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 

Último (20)

Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 

Front End performance as a Continuous Integration - Part1

  • 1. MAKING FEP TESTING …..A PART OF CONTINUOUS INTEGRATION
  • 2. XYZ – Making FEP testing a part of Continuous Integration 2 Contents OBJECTIVE.................................................................................................................................................................................. 3 PROBLEM STATEMENT........................................................................................................................................................ 4 TOOLS/TECHNIQUES AVAILABLE FOR AUTOMATING FEP REPORT............................................................... 5 1) BROWSER-PERF .............................................................................................................................................................. 5 2) PERFJANKIE ..................................................................................................................................................................... 6 3) SAUCELABS...................................................................................................................................................................... 7 4) GOOGLE CLOSURE COMPILER....................................................................................................................................... 8 5) SPY JS............................................................................................................................................................................... 9 6) PHANTOMAS..................................................................................................................................................................11 7) WEBPAGETEST-API......................................................................................................................................................12 8) JSHINT + GRUNT..........................................................................................................................................................12 9) PHANTOMJS ..................................................................................................................................................................13 BEST PRACTICES AND CHECKLISTS.............................................................................................................................14 1) SINGLE PAGE APPLICATION........................................................................................................................................14 2) JAVASCRIPT/ JQUERY BEST PRACTICES...................................................................................................................14 MAPPING AVAILABLE TECHNIQUES AGAINST SDLC PHASES ..........................................................................15 REFERENCES...........................................................................................................................................................................16
  • 3. XYZ – Making FEP testing a part of Continuous Integration 3 Objective This document intends to make a case out of whether it’s possible to objectify the javascript performance loopholes at every build – and that too automated. The usual ones do tend to check for syntax, for best practices, but not many around for checking if by profiling if JavaScript functions and methods do take longer to execute. The document tries to list down some options available – and maybe stitch together a combination of many to serve the need of future XYZ products, for the Site Dev team.
  • 4. XYZ – Making FEP testing a part of Continuous Integration 4 Problem statement 1. Lesser or almost non-existent documentation of checklists for developers 2. Non adherence to checklists (when provided) due to ever changing team dynamics 3. Lack of automated Code Review process to call out code/development errors 4. Lack of developer skills to understand best (and performing) code practices
  • 5. XYZ – Making FEP testing a part of Continuous Integration 5 Tools/techniques available for automating FEP report 1) browser-perf http://nparashuram.com/perfslides/#presentation&10 Install browser-Perf from (NPM) Run it from the (CMD) or add it to a CI system like (Jenkins)  Browser-perf is a NodeJS based tool  For measuring browser performance metrics (like layout, paint, dom load or frame times)  For Web pages, Cordova/Phonegap and other Hybrid applications.  Metrics are measured when scrolling the web page, or during a Checkout workflow defined using Selenium.  Tool collects the metrics from sources like about:tracing, Chrome Devtools timeline, IE UI Responsiveness tab, Xperf, etc.  Monitor this information regularly by integrating the tool with continuous integration systems. https://github.com/axemclion/browser-perf Screenshots for Browser-perf From https://gist.github.com/axemclion/8620794
  • 6. XYZ – Making FEP testing a part of Continuous Integration 6 2) perfjankie http://nparashuram.com/perfslides/#presentation&10 Add perfjankie task into (GRUNT) build process. All data and HTML/JS for the graphs are saved in (CouchDB). PerfJankie uses browser-perf to measure browser rendering performance metrics and tabulate the results in a CouchDB database. It is a node module available as perfjankie and can be integrated into any continuous integration system. https://www.npmjs.org/package/perfjankie Screenshot for perfjankie From http://blog.nparashuram.com/2014/06/perfslides-demo-app-to-show-that.html
  • 7. XYZ – Making FEP testing a part of Continuous Integration 7 3) SauceLabs https://saucelabs.com/javascript/?dmr=0801f3fc4276057257c2237525fc69da0a6063f5d84aa20548a87bd da763 Get better test coverage Reliable access to the browsers you need, with 99.5% uptime. Test your JavaScript on 350+ browsers/OS platforms on mobile and web. Run your existing tests Convenient REST API runs your existing unit tests in the cloud. Integrate JavaScript unit testing with your CI system. Test details and history Cross-browser testing made easier. See all your JavaScript test results conveniently organized by browser, and access historical results any time. https://docs.saucelabs.com/tutorials/js-unit-testing/ https://github.com/axemclion/grunt-saucelabs (Grunt Plugin) (contd..) Screenshots for SauceLabs usage From http://blog.revolunet.com/blog/2013/12/05/unit-testing-angularjs-directive/
  • 8. XYZ – Making FEP testing a part of Continuous Integration 8 4) Google Closure Compiler https://developers.google.com/closure/ The Closure Compiler is a tool for making JavaScript download and run faster. It is a true compiler for JavaScript. Instead of compiling from a source language to machine code, it compiles from JavaScript to better JavaScript. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls. http://www.normalesup.org/~simonet/soft/ow/eclipse-closure-javascript.en.html (Eclipse Plugin) https://www.npmjs.org/package/grunt-google-closure-compiler (Grunt Plugin) https://github.com/gmarty/grunt-closure-compiler (Grunt Plugin) Screenshots for Google Closure Compiler From https://developers.google.com/speed/articles/compressing-javascript
  • 9. XYZ – Making FEP testing a part of Continuous Integration 9 5) Spy JS http://spy-js.com/ Architecturally spy-js is a web application powered by node.js web server and browser client. How it works: browser/system with the page that you’d like to trace scripts for is configured to connect to proxy server (which is node.js app). Node server acts as a proxy and retrieves the page and other requested resources by originally requested URLs. If the resource is a JavaScript, server modifies it before sending it back to browser. The modification doesn’t affect your code logic and is just code instrumentation instructions to perform execution tracing. When modified JavaScript code executes in browser, it sends runtime information back to server that processes it and sends it to spy-js UI, where you can see occurring events with details almost in a real-time. http://blog.jetbrains.com/webstorm/2014/08/tracing-debugging-and-profiling-node-js-with-spy-js/ Screenshots for SpyJS From https://github.com/spy-js/spy-js
  • 10. XYZ – Making FEP testing a part of Continuous Integration 10 From http://spy-js.com/
  • 11. XYZ – Making FEP testing a part of Continuous Integration 11 6) Phantomas https://www.npmjs.org/package/phantomas Phantomas is a PhantomJS-based web performance metrics collector. It features,  modular approach - each metric is generated by a separate "module"  phantomas "core" acts as an events emitter that each module can hook into  in-depth metrics such as: number of events bound via jQuery, calls to window.writeor complex and duplicated CSS selectors (via analyze-css)  JSON and CSV as available output formats for easy integration with automated reporting / monitoring tools  easy integration with Continuous Integration tools via TAP format and assertions handling  metrics can be sent via StatsD or stored in elasticsearch  easy integration with other nodejs projects via CommonJS module (see API docs)  metrics can be emitted from JavaScript code of the page phantomas is run against (thanks to helper functions available in window.__phantomas)  device profiles allow phantomas to emulate mobile or tablet (by setting a proper user agent and viewport)  ability to run phantomas using WebKit (PhantomJS) or Gecko (SlimerJS) engine (experimental) https://www.npmjs.org/package/grunt-phantomas (Grunt Plugin) This grunt plugin executes phantomas and visualizes the returned metrics in a generated index.html. It keeps track of history, so it can be set up to check reports after every deployment of your site. To learn how to setup history tracking in different CI systems read the OPTIONS section. Screenshots for Phantomas From http://stefanjudis.github.io/phantomas-custom-metrics-tryout/metrics/
  • 12. XYZ – Making FEP testing a part of Continuous Integration 12 7) Webpagetest-api https://github.com/marcelduran/webpagetest-api WebPageTest API Wrapper is a NPM package that wraps WebPageTest API for NodeJS as a module and a command-line tool. WebPageTest API Wrapper provides a simple seamless way to integrate WebPageTest with Continuous Integration tools. The dedicated page is provided at, https://github.com/marcelduran/webpagetest-api/wiki/Test-Specs 8) JSHint + Grunt https://github.com/gruntjs/grunt-contrib-jshint
  • 13. XYZ – Making FEP testing a part of Continuous Integration 13 JSHint is a code quality tool. It can help debug JS and catch any little mistakes being made. It can also do lots of nice things like tell you when you have unused variables. # examples/grunt/jshint $ npm install # usage $ grunt watch # show all errors without stopping $ grunt watch --force http://www.impossiblesiebel.com/2014/09/open-ui-grunt-and-jshint.html Screenshots for JShint From http://embersherpa.com/articles/introduction-to-ember-app-kit/ 9) PhantomJS http://phantomjs.org/  Headless instance of WebKit  Phantom does everything a webkit browser can do, except there's no monitor. It CAN produce visual pages on command.  It's an indispensable tool for automating tasks that require loading up a web page and doing something (screenshots, window resizes, clicking things, etc)
  • 14. XYZ – Making FEP testing a part of Continuous Integration 14 Best Practices and checklists 1) Single Page Application Target-SPA-BesPrax. docx This (constantly evolving) document lists down the best practices for Single Page Applications 2) JavaScript/ JQuery Best Practices Target-JS-Best-Pract ices.docx This document lists down the best practices for basic JS and JQuery development.
  • 15. XYZ – Making FEP testing a part of Continuous Integration 15 Mapping available Techniques against SDLC phases
  • 16. XYZ – Making FEP testing a part of Continuous Integration 16 References 1. http://4waisenkinder.de/blog/2013/12/22/how-to-measure-frontend-performance-with- phantomas-and-grunt/ 2. http://aaron.jorb.in/blog/2012/07/automating-your-front-end-development-workflow/ 3. http://blog.maxcdn.com/behind-scenes-tools-maxcdn-com/ 4. http://blog.revolunet.com/blog/2013/12/05/unit-testing-angularjs-directive/ 5. http://calendar.perfplanet.com/2013/phantomas/ 6. http://embersherpa.com/articles/introduction-to-ember-app-kit/ 7. http://fourword.fourkitchens.com/article/automated-frontend-tools 8. http://fourword.fourkitchens.com/article/performance-design-budget-and-test 9. http://internetmarketing-readme.pricemaniacs.com/category/website-performance/ 10. http://isobar-idev.github.io/code-standards/ 11. http://jeremyckahn.github.io/blog/2012/07/01/treating-javascript-like-a-30-year-old- language/ 12. http://nparashuram.com/perfslides/ 13. http://rupl.github.io/frontend-ops 14. http://rupl.github.io/frontend-perf 15. http://rupl.github.io/frontend-testing 16. http://spy-js.com/why.html 17. http://updates.html5rocks.com/2013/11/The-Landscape-Of-Front-end-Development- Automation-Slides 18. http://www.slideshare.net/ArtemGovorov/spyjs 19. http://www.smashingmagazine.com/2013/06/11/front-end-ops/ 20. https://austin2014.drupal.org/session/automated-frontend-testing 21. https://gist.github.com/axemclion/8620794 22. https://github.com/axemclion/browser-perf 23. https://github.com/axemclion/perfjankie/ 24. https://hacks.mozilla.org/2012/12/fantastic-front-end-performance-part-1-concatenate- compress-cache-a-node-js-holiday-season-part-4/ 25. https://www.npmjs.org/package/browser-perf 26. https://github.com/marcelduran/webpagetest-api