SlideShare a Scribd company logo
1 of 110
Web Framework Performance
Examples from Django and Rails

QConSF 9th November 2012


gareth rushgrove | morethanseven.net   www.flickr.com/photos/mugley/5013931959/
Watch the video with slide
                         synchronization on InfoQ.com!
                      http://www.infoq.com/presentations
                                 /Django-Rails

       InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
  Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Presented at QCon San Francisco
                          www.qconsf.com
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
 - practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Me
Gareth Rushgrove


gareth rushgrove | morethanseven.net
Curate devopsweekly.com


gareth rushgrove | morethanseven.net
Blog at morethanseven.net


gareth rushgrove | morethanseven.net
Text




Work at UK Government Digital Service


gareth rushgrove | morethanseven.net
I am a Civil Servant


gareth rushgrove | morethanseven.net   http://www.flickr.com/photos/benterrett/6852348725/
Developer, Operations, Product Guy


gareth rushgrove | morethanseven.net
Introduction
(what’s the problem)



                 http://www.flickr.com/photos/iancarroll/5027441664
Slow(er) languages...


gareth rushgrove | morethanseven.net
Slow(er) languages...


gareth rushgrove | morethanseven.net
...don’t mean slow applications


gareth rushgrove | morethanseven.net
...don’t have to mean slow applications


gareth rushgrove | morethanseven.net
Frameworks can help


gareth rushgrove | morethanseven.net
Frameworks can help


gareth rushgrove | morethanseven.net
A real example


gareth rushgrove | morethanseven.net
A sample application


gareth rushgrove | morethanseven.net
49ms
Before


gareth rushgrove | morethanseven.net
6ms
After


gareth rushgrove | morethanseven.net
- Analyze your application
  - Know your framework
  - Cache everywhere
  - Instrument everything
  - Don’t just think about development




This presentation


gareth rushgrove | morethanseven.net
Analyze
(count everything)



                http://www.flickr.com/photos/iancarroll/5027441664
1. From the browser


gareth rushgrove | morethanseven.net
YSlow


gareth rushgrove | morethanseven.net
webpagetest.org


gareth rushgrove | morethanseven.net
2. From the code


gareth rushgrove | morethanseven.net
Django debug toolbar


gareth rushgrove | morethanseven.net
Django debug toolbar


gareth rushgrove | morethanseven.net
Django debug toolbar


gareth rushgrove | morethanseven.net
Django debug toolbar


gareth rushgrove | morethanseven.net
Profiling middleware


gareth rushgrove | morethanseven.net
rack-mini-profiler


gareth rushgrove | morethanseven.net
rack-mini-profiler details


gareth rushgrove | morethanseven.net
Rack Insight


gareth rushgrove | morethanseven.net
Rack Insight


gareth rushgrove | morethanseven.net
Rails footnotes


gareth rushgrove | morethanseven.net
New Relic development mode


gareth rushgrove | morethanseven.net
3. Logs


gareth rushgrove | morethanseven.net
Request log analyzer


gareth rushgrove | morethanseven.net
┃           Mean ┃ StdDev ┃                 Min ┃     Max ┃    95 %tile ┃
      ┃        0.16s ┃                 0.26s ┃   0.01s ┃   1.74s ┃ 0.01s-1.08s ┃




Request log analyzer details


gareth rushgrove | morethanseven.net
Django timelog


gareth rushgrove | morethanseven.net
Know your
  framework
(use the parts you need)


                   http://www.flickr.com/photos/iancarroll/5027441664
1. Disable what you don’t need


gareth rushgrove | morethanseven.net
require "rails/all"

     in config/application.rb



Don’t import rails


gareth rushgrove | morethanseven.net
require "action_controller/railtie"
      require "rails/test_unit/railtie"
      require "sprockets/railtie"

     in config/application.rb



Just the bits you need


gareth rushgrove | morethanseven.net
MIDDLEWARE_CLASSES = (
         'django.middleware.common.CommonMiddleware',
         'django.contrib.sessions.middleware.SessionMiddleware',
         'django.middleware.csrf.CsrfViewMiddleware',
         'django.contrib.auth.middleware.AuthenticationMiddleware',
         'django.contrib.messages.middleware.MessageMiddleware',
     )

     in settings.py




Django middleware


gareth rushgrove | morethanseven.net
INSTALLED_APPS = (
         'django.contrib.auth',
         'django.contrib.contenttypes',
         'django.contrib.sessions',
         'django.contrib.sites',
         'django.contrib.messages',
         'django.contrib.staticfiles',
     )

     in settings.py




Django installed apps


gareth rushgrove | morethanseven.net
2. Know your ORM


gareth rushgrove | morethanseven.net
Django select_related()


gareth rushgrove | morethanseven.net
queryset = Release.objects.all()

     11 SQL Queries


N+1 problem


gareth rushgrove | morethanseven.net
queryset = Release.objects.select_related()

     1 SQL Query


Joins to the rescue


gareth rushgrove | morethanseven.net
Active Record Include


gareth rushgrove | morethanseven.net
Release.all

     11 SQL Queries


N+1 problem


gareth rushgrove | morethanseven.net
Release.includes(:app).all

     1 SQL Query


Joins to the rescue


gareth rushgrove | morethanseven.net
<link         href="/assets/application.css?body=1" ...
    <link         href="/assets/apps.css?body=1" ...
    <link         href="/assets/bootstrap_and_overrides.css?body=1" ...
    <link         href="/assets/releases.css?body=1" ...
    <link         href="/assets/sample.css?body=1" ...
    <link         href="/assets/scaffolds.css?body=1" ...

    to this

    <link href="/assets/application.css" ...




3. Asset compilation in HTML


gareth rushgrove | morethanseven.net
h1 {
       padding-top: 40px;
   }
   /*!
     * Bootstrap v2.2.1
     *
     * Copyright 2012 Twitter, Inc
     * Licensed under the Apache License v2.0
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Designed and built with all the love in the world @twitter by @mdo and
   @fat.
     */
   article, aside, details, figcaption, figure, footer, header, hgroup, nav,
   section {
       display: block;
   }

   to this

   h1{padding-top:40px}
   article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{displ
   ay:block}



Asset compilation in CSS


gareth rushgrove | morethanseven.net
# Enable the asset pipeline
     config.assets.enabled = true

     # Version of your assets
     config.assets.version = '1.0'

     in config/application.rb


     # compress assets
     config.assets.compress = true

     # Don’t expands the lines which load the assets
     config.assets.debug = false

     in config/environments/production.rb




Asset compilation configuration


gareth rushgrove | morethanseven.net
4. Different runtimes


gareth rushgrove | morethanseven.net
Different runtimes - JRuby


gareth rushgrove | morethanseven.net
Different runtimes - PyPy


gareth rushgrove | morethanseven.net
require 'test_helper'
     require 'rails/performance_test_help'

     class ReleaseTest < ActionDispatch::PerformanceTest
       self.profile_options = { :runs => 10,
                                :metrics => [:wall_time]}

       def test_release_index
         get '/releases'
       end
     end

     in test/performance/releases_test.rb


5. Performance tests


gareth rushgrove | morethanseven.net
rake test:benchmark
    Started
    ReleaseTest#test_release_index (110 ms warmup)
               wall_time: 6 ms

    Finished in 0.551815 seconds.

    1 tests, 0 assertions, 0 failures, 0 errors, 0 skips




Rails benchmarker


gareth rushgrove | morethanseven.net
Cache
(everything)



               http://www.flickr.com/photos/iancarroll/5027441664
1. Built-in caching support


gareth rushgrove | morethanseven.net
Great documentation 1


gareth rushgrove | morethanseven.net
Great documentation 2


gareth rushgrove | morethanseven.net
2. ORM Caching


gareth rushgrove | morethanseven.net
CACHES = {
      'default' : dict(
        BACKEND = 'johnny.backends.memcached.MemcachedCache'
        LOCATION = ['127.0.0.1:11211'],
        JOHNNY_CACHE = True,
      )
    }

    MIDDLEWARE_CLASSES = (
      'johnny.middleware.LocalStoreClearMiddleware',
      'johnny.middleware.QueryCacheMiddleware',
    ) + MIDDLEWARE_CLASSES

    in test/performance/releases_test.rb


Johnny Cache


gareth rushgrove | morethanseven.net
First request 4 Queries


gareth rushgrove | morethanseven.net
Subsequent requests 0 Queries


gareth rushgrove | morethanseven.net
class Release < ActiveRecord::Base
     acts_as_cached
     after_save :expire_cache
     attr_accessible :app_id
     belongs_to :app

     def self.recent
       includes(:app).al
     end
    end




Cache-fu


gareth rushgrove | morethanseven.net
class Release < ActiveRecord::Base
     acts_as_cached
     after_save :expire_cache
     attr_accessible :app_id
     belongs_to :app

     def self.recent
       includes(:app).al
     end
    end




Add cache behaviour


gareth rushgrove | morethanseven.net
@releases = Release.cached(:recent)




Get cached content


gareth rushgrove | morethanseven.net
First request 2 Queries


gareth rushgrove | morethanseven.net
Subsequent requests 0 Queries


gareth rushgrove | morethanseven.net
http://www.mnot.net/cache_docs/




3. HTTP is your friend


gareth rushgrove | morethanseven.net
from django.views.decorators.cache import cache_control

    @cache_control(public=True, max_age=3600)




HTTP headers


gareth rushgrove | morethanseven.net
class ReleasesController < ApplicationController

         def index
           expires_in 60.minute, :public => true


    in app/controllers/releases_controller.rb




HTTP headers


gareth rushgrove | morethanseven.net
INSTALLED_APPS = INSTALLED_APPS + (
      'varnishapp',
    )

    VARNISH_MANAGEMENT_ADDRS = (
      'localhost:6082',
    )

    VARNISH_WATCHED_MODELS = ('app.release',)

    in settings.py




django-varnish configuration


gareth rushgrove | morethanseven.net
django-varnish admin


gareth rushgrove | morethanseven.net
Instrument
(monitor all the things)



                   http://www.flickr.com/photos/iancarroll/5027441664
MIDDLEWARE_CLASSES = MIDDLEWARE_CLASSES + (
       'django_statsd.middleware.GraphiteRequestTimingMiddleware',
       'django_statsd.middleware.GraphiteMiddleware',
     )

     STATSD_PATCHES = [
       'django_statsd.patches.db',
       'django_statsd.patches.cache',
     ]

     INSTALLED_APPS = INSTALLED_APPS + (
       'django_statsd',
     )

     from settings.py




django-statsd


gareth rushgrove | morethanseven.net
django-statsd on debug toolbar


gareth rushgrove | morethanseven.net
MIDDLEWARE_CLASSES = (
       'django_mmstats.middleware.MmStatsMiddleware',
     )

     import stats
     MMSTATS_CLASS = stats.DjangoStats

     from settings.py


     from django_mmstats.base import BaseDjangoStats

     class DjangoStats(BaseDjangoStats):
         """Add mmstats fields here, just like Django models!"""

     from stats.py




django-mmstats


gareth rushgrove | morethanseven.net
mmash


gareth rushgrove | morethanseven.net
librato-rails


gareth rushgrove | morethanseven.net
Not just in
development
(measure in production)


                  http://www.flickr.com/photos/iancarroll/5027441664
1. Logs (again)


gareth rushgrove | morethanseven.net
Logster


gareth rushgrove | morethanseven.net
Lograge


gareth rushgrove | morethanseven.net
Started GET "/" for 127.0.0.1 at 2012-03-10 14:28:14 +0100
     Processing by HomeController#index as HTML
       Rendered text template within layouts/application (0.0ms)
       Rendered layouts/_assets.html.erb (2.0ms)
       Rendered layouts/_top.html.erb (2.6ms)
       Rendered layouts/_about.html.erb (0.3ms)
       Rendered layouts/_google_analytics.html.erb (0.4ms)
     Completed 200 OK in 79ms (Views: 78.8ms | ActiveRecord: 0.0ms)

     to this

     GET /jobs/833552.json format=json action=jobs#show status=200
     duration=58.33 view=40.43 db=15.26




Lograge


gareth rushgrove | morethanseven.net
Logstash


gareth rushgrove | morethanseven.net
LOGRAGE %{WORD:method}%{SPACE}%{DATA}%
     {SPACE}action=%{WORD:controller}#%
     {WORD:action}%{SPACE}status=%{INT:status}%
     {SPACE}duration=%{NUMBER:duration}%{SPACE}
     view=%{NUMBER:view}(%{SPACE}db=%
     {NUMBER:db})?%{GREEDYDATA}




Logstash plus lograge


gareth rushgrove | morethanseven.net
LOGRAGE %{WORD:method}%{SPACE}%{DATA}%
     {SPACE}action=%{WORD:controller}#%
     {WORD:action}%{SPACE}status=%{INT:status}%
     {SPACE}duration=%{NUMBER:duration}%{SPACE}
     view=%{NUMBER:view}(%{SPACE}db=%
     {NUMBER:db})?%{GREEDYDATA}




Rails performance data


gareth rushgrove | morethanseven.net
output {
       statsd {
          host => "localhost"
          tags => [ "lograge" ]
          timing => [ "<%= @title %>.%{controller}.%{action}.%
            {method}.duration", "%{duration}" ]
       }
       statsd {
          host => “localhost”
          tags => [ "lograge" ]
          timing => [ "<%= @title %>.%{controller}.%{action}.%
            {method}.view", "%{view}" ]
       }
     }




Output to statsd


gareth rushgrove | morethanseven.net
2. Metrics


gareth rushgrove | morethanseven.net
Ganglia


gareth rushgrove | morethanseven.net
Graphite


gareth rushgrove | morethanseven.net
Riemann


gareth rushgrove | morethanseven.net
New Relic newrelic.com


gareth rushgrove | morethanseven.net
Librato Metrics metrics.librato.com


gareth rushgrove | morethanseven.net
Conclusions
(if all you remember is)



                   http://www.flickr.com/photos/iancarroll/5027441664
Tooling helps. A lot.


gareth rushgrove | morethanseven.net
- A debug toolbar
  - Transparent caching support
  - Hooks for instrumentation
  - Configurable logging




Your framework should have


gareth rushgrove | morethanseven.net
If not... build them


gareth rushgrove | morethanseven.net
Share everything


gareth rushgrove | morethanseven.net
The End
www.flickr.com/photos/snugglepup/



Thanks for the amazing photos


gareth rushgrove | morethanseven.net             http://flickr.com/photos/psd/102332391/
Questions?


gareth rushgrove | morethanseven.net   http://flickr.com/photos/psd/102332391/

More Related Content

Viewers also liked

The Role of the CTO in a Growing Organization
The Role of the CTO in a Growing OrganizationThe Role of the CTO in a Growing Organization
The Role of the CTO in a Growing OrganizationRoger Smith
 
The Role of CTO: A Rantifesto
The Role of CTO: A RantifestoThe Role of CTO: A Rantifesto
The Role of CTO: A RantifestoCamille Fournier
 
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQLFrom Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQLKonstantin Gredeskoul
 
CTO vs. VP of Engineering
CTO vs. VP of EngineeringCTO vs. VP of Engineering
CTO vs. VP of Engineeringbcantrill
 
Strategic management at APPLE Inc.
Strategic management at APPLE Inc.Strategic management at APPLE Inc.
Strategic management at APPLE Inc.raboz
 
Prototyping invision vs axure
Prototyping invision vs axurePrototyping invision vs axure
Prototyping invision vs axureAndrii Rusakov
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Viewers also liked (8)

The Role of the CTO in a Growing Organization
The Role of the CTO in a Growing OrganizationThe Role of the CTO in a Growing Organization
The Role of the CTO in a Growing Organization
 
The Role of CTO: A Rantifesto
The Role of CTO: A RantifestoThe Role of CTO: A Rantifesto
The Role of CTO: A Rantifesto
 
Cto meetup Berlin
Cto meetup BerlinCto meetup Berlin
Cto meetup Berlin
 
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQLFrom Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
 
CTO vs. VP of Engineering
CTO vs. VP of EngineeringCTO vs. VP of Engineering
CTO vs. VP of Engineering
 
Strategic management at APPLE Inc.
Strategic management at APPLE Inc.Strategic management at APPLE Inc.
Strategic management at APPLE Inc.
 
Prototyping invision vs axure
Prototyping invision vs axurePrototyping invision vs axure
Prototyping invision vs axure
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

More from C4Media

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileC4Media
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like OwnersC4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideC4Media
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDC4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine LearningC4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerC4Media
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleC4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeC4Media
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereC4Media
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing ForC4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data EngineeringC4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
 

More from C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Recently uploaded

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Recently uploaded (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

Web Framework Performance - Examples from Django and Rails