SlideShare ist ein Scribd-Unternehmen logo
1 von 35
HIGH PERFORMANCE
ON DRUPAL 7 - AN
ANATOMY OF A SITE

Kalle Varisvirta
Technology Director
Designing for high
performance
 The process is usually the same for major
  refactoring and building a new site for high
  performance
 It’s always easier to replace an existing site,
  because you have real data
 Creating a high performance site on some
  estimations from a customer might get you
  pretty far away from the actual needed solution
Designing for high
performance
 For this session, we’ll imagine a situation where
  we have an existing site with actual data
  available
 The recent case where we were working with
  this kind of a design was exactly that: a well
  matured site (running sine 1998!) going to be
  reincarnated for the fourth time
SO, WE HAVE A
PERFORMANCE PROBLEM
First look: identify the
problem
 When a site is not performing well, it can be
  caused by numerous different reasons
 Analyze it
   Profile under load
   Look at the logs
   Look at the server loads under load
First look: identify the
problem
 Make sure you’re not hitting some simple
  bottleneck
   Too many running services on a single hardware
   A crazy database query killing the site
   Broken router causing 3 sec delay to every request
    (seen that, for real)
   And many, many others
Problem identified
 When you’ve arrived to the conclusion that you
  actually have too much volume, then figure out
  of what?
   Too much content? I’ve seen 12 million nodes plus
    60 million comments on a single installation, that’s a
    lot.
   Too many requests per second? Make sure they are
    page requests. Statics can be easily fixed, look at
    cache headers, aggregation, Varnish, Nginx, CDNs.
Problem identified
 Too many Drupal page requests per second?
   Anonymous?
      If anonymous, it’s usually easy to fix, as long as it’s
       cacheable. We’ll go into the whole “cacheable” thing later.
      If it’s cacheable, look at page cache, Boost, Varnish, CDNs.
   Logged in?
      Drupal cache is turning off, and the calls are bypassing all
       the caches
      This usually is a more difficult problem to solve
Problem identified: too
many logged in users
There’s still one case that’s pretty common and still
easy enough to solve:


  logged in users with small amount of
          personalized content
 (small in percentage of the CPU cost of building the page in Drupal)
Problem identified: too
many logged in users

                                     logged in as
                                         user


                                      highlights:
  content area: common content for     common
             everybody


                                     your friends’
                                       favorites
Problem identified: too
many logged in users
 Let’s make a couple pre-requisite conditions
   You’re running on your own environment
   You have Varnish configured in front of the Drupal
    site
   You have some skills in programming with Drupal


  You got all of this? Ok, let’s
  continue.
it’s time for

CACHE
CONTROL
drupal.org/project/cache_control
What’s Cache Control
 It’s similar to ESI module with some benefits
 It’s mainly directed to cache blocks or block-like
  content on the page
 It needs some programming usually
 When dealing with an optimal problem for it, it’s
  the optimal solution and will make your site
  faster by magnitudes
DRUPAL     User first gets the common page
               for everybody from Varnish

               Then a javascript routine checks
               whether the user is logged in or
VARNISH        not

               The javascript either makes the
               hidden for-anonymous content
       USER    visible or fetches this user’s
     BROWSER   content with a ajax request
Problem identified: too
many logged in users

                                     logged in as
                                       login box
                                          user


                                      highlights:
  content area: common content for     common
             everybody


                                     your friends’
                                      staff picks
                                       favorites
Benefits of Cache Control
 Burdens the back-end significantly less due to
  only loading the needed parts
 Loads multiple blocks and/or areas with a single
  request
 Gives the user something to look at while
  loading the hard parts of the page – and it does
  make the site feel faster
 Plays well with some other modules, like
  captcha etc.
What about ESI
 ESI (Edge Side Includes) is a partial loading
  technique supported by Varnish and some CDNs,
  e.g. Akamai
 It basically makes Varnish do the partial page
  loading
   Varnish first fetches the common version from cache
   Then it looks though the page to see any ESI markup
   Then it loads all the ESI marked parts of the page from
    cache or from the Drupal
How is Cache Control
different than ESI
 ESI needs to wait until the whole page is loaded
  before giving anything to the user
 ESI loads all the portions of the page (still in D7,
  this might change in D8) in separate http
  requests, thus burdening the server with even
  more bootstraps than without any cache
HEY… HOW ABOUT THAT
USER GENERATED
CONTENT THAT MAKES
VARNISH PURGE
EVERYTHING ALL THE
TIME?
Different problem
 As stated, Cache Control works well for specific
  problems, but that also is in trouble when the
  Varnish cache gets purged all the time
 That usually happens on a really UGC (User
  Generated Content) oriented site
Different problem: UGC
When a single page on a site gets new content
every 2-30 seconds
 Caching is of no use, purging multiple pages on
  that rate makes no sense
 You need that data to have a way of refreshing
  even more frequently
 And we’re still talking about a page that doesn’t
  update after it has loaded (so no Socket.IO stuff
  on this slide deck, sorry)
Different problem: UGC

                                      logged in as
                                          user

  content area: common content for
             everybody                 highlights:
                                        common
  and this is getting updates every
             30 seconds
                                      your friends’
                                        favorites
Solution: A new cache
layer
 We add a new, fast-paced cache layer on the
  page
 We’ll try to purge and reload that cache as fast a
  humanly possible in Drupal
 We’ll minimize our efforts on the backend
Solution: A new cache
layer
 Let’s load the whole page from Varnish and the
  refresh the fast-paged part with javascript
 To minimize the load on the backend, skip the
  theming layer and just load JSON
 Sound good?
Solution: A new cache
layer
 Until you realize you have to theme everything in
  the Javascript and that’s not fun
 Even if you use a javascript templating engine,
  you still have to keep your themes up to date in
  two places
Let’s pull out

front
themer
drupal.org/project/front_themer
Front themer
 When theming in Javascript, Front themer
  makes your life a bit easier
 It allows you to map your Drupal theme’s theme
  implementations to very simple Javascript
  versions
 It’s designed to help out with simple elements,
  such as boxes and lists
 It might need you to tweak your theming
  functions a bit to make them work better with it
Solution: A new cache
layer
 And the back-end?
 Exove has a module coming out to help get
  grouped and cached JSON outputs fast from
  Views
 It’s not something to be used for integrations but
  just for the faster cache layer
 Going to be released during this fall with a site
  using it
 Until that, just use Views and Views datasource
SO, WAIT A MINUTE

THESE ARE ALL HACKS,
RIGHT?
Not quite.
Drupal doing high
performance
 You can’t really use Drupal for high performance
  out of the box
 Hacks, or actually extensions are needed and if
  done as proper contribs, are safe and
  convenient to use
 Drupal has been made extensible for this exact
  reason, it can be made better by extending it
What would we like to see
in Drupal 8
 We’d like to see a real JSON output from
  Drupal, preferably by piece by piece content
 We’d also like to see a thinner bootstrap with
  lazy-loading for pretty much everything
 REST interface for doing more stuff in the front,
  e.g. with JS frameworks
You can see a pattern here. This is all
covered by the WSSCI and Scotch
iniatives. We’re waiting for Drupal 8 to
be a lot better.

And Cache Control is going to rock on Drupal 8.
and there are always going to be hacks
to get Drupal to do more
THANK YOU FOR YOUR
TIME


PS. We’re hiring. www.exove.fi/careers

Weitere ähnliche Inhalte

Was ist angesagt?

Hyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris ZachariasHyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris ZachariasChristopher Zacharias
 
An introduction to configuring Domino for Docker
An introduction to configuring Domino for DockerAn introduction to configuring Domino for Docker
An introduction to configuring Domino for DockerGabriella Davis
 
Improving Your Domino Designer Experience
Improving Your Domino Designer ExperienceImproving Your Domino Designer Experience
Improving Your Domino Designer ExperienceJulian Robichaux
 
Week 05 Web, App and Javascript_Brandon, S.H. Wu
Week 05 Web, App and Javascript_Brandon, S.H. WuWeek 05 Web, App and Javascript_Brandon, S.H. Wu
Week 05 Web, App and Javascript_Brandon, S.H. WuAppUniverz Org
 
An Introduction to Configuring Domino for Docker
An Introduction to Configuring Domino for DockerAn Introduction to Configuring Domino for Docker
An Introduction to Configuring Domino for DockerGabriella Davis
 
What's New in Notes, Sametime and Verse On-Premises
What's New in Notes, Sametime and Verse On-PremisesWhat's New in Notes, Sametime and Verse On-Premises
What's New in Notes, Sametime and Verse On-PremisesGabriella Davis
 
What is Node.js? (ICON UK)
What is Node.js? (ICON UK)What is Node.js? (ICON UK)
What is Node.js? (ICON UK)Tim Davis
 
10 things you can do to speed up your web app today 2016
10 things you can do to speed up your web app today 201610 things you can do to speed up your web app today 2016
10 things you can do to speed up your web app today 2016Chris Love
 
Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0Microsoft Mobile Developer
 
IBM Connect 2016 - Break out of the Box
IBM Connect 2016 - Break out of the BoxIBM Connect 2016 - Break out of the Box
IBM Connect 2016 - Break out of the BoxKarl-Henry Martinsson
 
An Introduction To Docker
An Introduction To  DockerAn Introduction To  Docker
An Introduction To DockerGabriella Davis
 
Front end performance optimization
Front end performance optimizationFront end performance optimization
Front end performance optimizationStevie T
 
Twitter - Architecture and Scalability lessons
Twitter - Architecture and Scalability lessonsTwitter - Architecture and Scalability lessons
Twitter - Architecture and Scalability lessonsAditya Rao
 
An Introduction To The DMARC SMTP Validation Requirements
An Introduction To The DMARC SMTP Validation RequirementsAn Introduction To The DMARC SMTP Validation Requirements
An Introduction To The DMARC SMTP Validation RequirementsGabriella Davis
 
Ajax Patterns : Periodic Refresh & Multi Stage Download
Ajax Patterns : Periodic Refresh & Multi Stage DownloadAjax Patterns : Periodic Refresh & Multi Stage Download
Ajax Patterns : Periodic Refresh & Multi Stage DownloadEshan Mudwel
 
HTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoHTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoGabriella Davis
 

Was ist angesagt? (20)

Hyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris ZachariasHyperlight Websites - Chris Zacharias
Hyperlight Websites - Chris Zacharias
 
An introduction to configuring Domino for Docker
An introduction to configuring Domino for DockerAn introduction to configuring Domino for Docker
An introduction to configuring Domino for Docker
 
Improving Your Domino Designer Experience
Improving Your Domino Designer ExperienceImproving Your Domino Designer Experience
Improving Your Domino Designer Experience
 
Week 05 Web, App and Javascript_Brandon, S.H. Wu
Week 05 Web, App and Javascript_Brandon, S.H. WuWeek 05 Web, App and Javascript_Brandon, S.H. Wu
Week 05 Web, App and Javascript_Brandon, S.H. Wu
 
An Introduction to Configuring Domino for Docker
An Introduction to Configuring Domino for DockerAn Introduction to Configuring Domino for Docker
An Introduction to Configuring Domino for Docker
 
Domino Adminblast
Domino AdminblastDomino Adminblast
Domino Adminblast
 
What's New in Notes, Sametime and Verse On-Premises
What's New in Notes, Sametime and Verse On-PremisesWhat's New in Notes, Sametime and Verse On-Premises
What's New in Notes, Sametime and Verse On-Premises
 
What is Node.js? (ICON UK)
What is Node.js? (ICON UK)What is Node.js? (ICON UK)
What is Node.js? (ICON UK)
 
10 things you can do to speed up your web app today 2016
10 things you can do to speed up your web app today 201610 things you can do to speed up your web app today 2016
10 things you can do to speed up your web app today 2016
 
Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0
 
IBM Connect 2016 - Break out of the Box
IBM Connect 2016 - Break out of the BoxIBM Connect 2016 - Break out of the Box
IBM Connect 2016 - Break out of the Box
 
An Introduction To Docker
An Introduction To  DockerAn Introduction To  Docker
An Introduction To Docker
 
Break out of The Box - Part 2
Break out of The Box - Part 2Break out of The Box - Part 2
Break out of The Box - Part 2
 
AD102 - Break out of the Box
AD102 - Break out of the BoxAD102 - Break out of the Box
AD102 - Break out of the Box
 
Front end performance optimization
Front end performance optimizationFront end performance optimization
Front end performance optimization
 
Ajax
AjaxAjax
Ajax
 
Twitter - Architecture and Scalability lessons
Twitter - Architecture and Scalability lessonsTwitter - Architecture and Scalability lessons
Twitter - Architecture and Scalability lessons
 
An Introduction To The DMARC SMTP Validation Requirements
An Introduction To The DMARC SMTP Validation RequirementsAn Introduction To The DMARC SMTP Validation Requirements
An Introduction To The DMARC SMTP Validation Requirements
 
Ajax Patterns : Periodic Refresh & Multi Stage Download
Ajax Patterns : Periodic Refresh & Multi Stage DownloadAjax Patterns : Periodic Refresh & Multi Stage Download
Ajax Patterns : Periodic Refresh & Multi Stage Download
 
HTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoHTTP - The Other Face Of Domino
HTTP - The Other Face Of Domino
 

Andere mochten auch

Implementing High Performance Drupal Sites
Implementing High Performance Drupal SitesImplementing High Performance Drupal Sites
Implementing High Performance Drupal SitesShri Kumar
 
High Performance Drupal
High Performance DrupalHigh Performance Drupal
High Performance DrupalChapter Three
 
How we build a startup with Drupal
How we build a startup with DrupalHow we build a startup with Drupal
How we build a startup with DrupalPavel Prischepa
 
Scaling Microsites for the Enterprise with Drupal Gardens
Scaling Microsites for the Enterprise with Drupal GardensScaling Microsites for the Enterprise with Drupal Gardens
Scaling Microsites for the Enterprise with Drupal GardensAcquia
 
Turbinando Drupal com Redis
Turbinando Drupal com RedisTurbinando Drupal com Redis
Turbinando Drupal com RedisDaniel Santos
 
Building enterprise high availability application with drupal
Building enterprise high availability application with drupalBuilding enterprise high availability application with drupal
Building enterprise high availability application with drupalRatnesh kumar, CSM
 
Drupal High Availability High Performance 2012
Drupal High Availability High Performance 2012Drupal High Availability High Performance 2012
Drupal High Availability High Performance 2012Amazee Labs
 
Highly available Drupal on a Raspberry Pi cluster
Highly available Drupal on a Raspberry Pi clusterHighly available Drupal on a Raspberry Pi cluster
Highly available Drupal on a Raspberry Pi clusterJeff Geerling
 
Enterprise Drupal Application & Hosting Infrastructure Level Monitoring
Enterprise Drupal Application & Hosting Infrastructure Level MonitoringEnterprise Drupal Application & Hosting Infrastructure Level Monitoring
Enterprise Drupal Application & Hosting Infrastructure Level MonitoringDaniel Kanchev
 
ProTips for Staying Sane while Working from Home
ProTips for Staying Sane while Working from Home ProTips for Staying Sane while Working from Home
ProTips for Staying Sane while Working from Home Jeff Geerling
 
Ansible + Drupal: A Fortuitous DevOps Match
Ansible + Drupal: A Fortuitous DevOps MatchAnsible + Drupal: A Fortuitous DevOps Match
Ansible + Drupal: A Fortuitous DevOps MatchJeff Geerling
 
Amazon Web Services Building Blocks for Drupal Applications and Hosting
Amazon Web Services Building Blocks for Drupal Applications and HostingAmazon Web Services Building Blocks for Drupal Applications and Hosting
Amazon Web Services Building Blocks for Drupal Applications and HostingAcquia
 

Andere mochten auch (14)

Implementing High Performance Drupal Sites
Implementing High Performance Drupal SitesImplementing High Performance Drupal Sites
Implementing High Performance Drupal Sites
 
High Performance Drupal
High Performance DrupalHigh Performance Drupal
High Performance Drupal
 
How we build a startup with Drupal
How we build a startup with DrupalHow we build a startup with Drupal
How we build a startup with Drupal
 
Scaling Microsites for the Enterprise with Drupal Gardens
Scaling Microsites for the Enterprise with Drupal GardensScaling Microsites for the Enterprise with Drupal Gardens
Scaling Microsites for the Enterprise with Drupal Gardens
 
Turbinando Drupal com Redis
Turbinando Drupal com RedisTurbinando Drupal com Redis
Turbinando Drupal com Redis
 
Drupal In The Cloud
Drupal In The CloudDrupal In The Cloud
Drupal In The Cloud
 
Building enterprise high availability application with drupal
Building enterprise high availability application with drupalBuilding enterprise high availability application with drupal
Building enterprise high availability application with drupal
 
Drupal High Availability High Performance 2012
Drupal High Availability High Performance 2012Drupal High Availability High Performance 2012
Drupal High Availability High Performance 2012
 
Highly available Drupal on a Raspberry Pi cluster
Highly available Drupal on a Raspberry Pi clusterHighly available Drupal on a Raspberry Pi cluster
Highly available Drupal on a Raspberry Pi cluster
 
Enterprise Drupal Application & Hosting Infrastructure Level Monitoring
Enterprise Drupal Application & Hosting Infrastructure Level MonitoringEnterprise Drupal Application & Hosting Infrastructure Level Monitoring
Enterprise Drupal Application & Hosting Infrastructure Level Monitoring
 
ProTips for Staying Sane while Working from Home
ProTips for Staying Sane while Working from Home ProTips for Staying Sane while Working from Home
ProTips for Staying Sane while Working from Home
 
Ansible + Drupal: A Fortuitous DevOps Match
Ansible + Drupal: A Fortuitous DevOps MatchAnsible + Drupal: A Fortuitous DevOps Match
Ansible + Drupal: A Fortuitous DevOps Match
 
Amazon Web Services Building Blocks for Drupal Applications and Hosting
Amazon Web Services Building Blocks for Drupal Applications and HostingAmazon Web Services Building Blocks for Drupal Applications and Hosting
Amazon Web Services Building Blocks for Drupal Applications and Hosting
 
Growth Hacking
Growth HackingGrowth Hacking
Growth Hacking
 

Ähnlich wie High Performance on Drupal 7

High Performance Sites with Drupal and Cache Control Module
High Performance Sites with Drupal and Cache Control ModuleHigh Performance Sites with Drupal and Cache Control Module
High Performance Sites with Drupal and Cache Control ModuleExove
 
DrupalCampLA 2011 - Drupal frontend-optimizing
DrupalCampLA 2011 - Drupal frontend-optimizingDrupalCampLA 2011 - Drupal frontend-optimizing
DrupalCampLA 2011 - Drupal frontend-optimizingAshok Modi
 
Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...
Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...
Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...Adam Khan
 
Intro to advanced web development
Intro to advanced web developmentIntro to advanced web development
Intro to advanced web developmentStevie T
 
Using Docker in the Real World
Using Docker in the Real WorldUsing Docker in the Real World
Using Docker in the Real WorldTim Haak
 
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
AD113  Speed Up Your Applications w/ Nginx and PageSpeedAD113  Speed Up Your Applications w/ Nginx and PageSpeed
AD113 Speed Up Your Applications w/ Nginx and PageSpeededm00se
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQLKonstantin Gredeskoul
 
Improving Drupal Performances
Improving Drupal PerformancesImproving Drupal Performances
Improving Drupal PerformancesVladimir Ilic
 
DrupalCampLA 2011: Drupal backend-performance
DrupalCampLA 2011: Drupal backend-performanceDrupalCampLA 2011: Drupal backend-performance
DrupalCampLA 2011: Drupal backend-performanceAshok Modi
 
Node JS Express : Steps to Create Restful Web App
Node JS Express : Steps to Create Restful Web AppNode JS Express : Steps to Create Restful Web App
Node JS Express : Steps to Create Restful Web AppEdureka!
 
Drupal caching
Drupal cachingDrupal caching
Drupal cachingExove
 
Cache is keeping you from reaching the full potential as a developer (word ca...
Cache is keeping you from reaching the full potential as a developer (word ca...Cache is keeping you from reaching the full potential as a developer (word ca...
Cache is keeping you from reaching the full potential as a developer (word ca...Thomas Audunhus
 
Performance on the Yahoo! Homepage
Performance on the Yahoo! HomepagePerformance on the Yahoo! Homepage
Performance on the Yahoo! HomepageNicholas Zakas
 
Building performance into the new yahoo homepage presentation
Building performance into the new yahoo  homepage presentationBuilding performance into the new yahoo  homepage presentation
Building performance into the new yahoo homepage presentationmasudakram
 
Front-End Modernization for Mortals
Front-End Modernization for MortalsFront-End Modernization for Mortals
Front-End Modernization for Mortalscgack
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernizationdevObjective
 

Ähnlich wie High Performance on Drupal 7 (20)

High Performance Sites with Drupal and Cache Control Module
High Performance Sites with Drupal and Cache Control ModuleHigh Performance Sites with Drupal and Cache Control Module
High Performance Sites with Drupal and Cache Control Module
 
DrupalCampLA 2011 - Drupal frontend-optimizing
DrupalCampLA 2011 - Drupal frontend-optimizingDrupalCampLA 2011 - Drupal frontend-optimizing
DrupalCampLA 2011 - Drupal frontend-optimizing
 
Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...
Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...
Between a SPA and a JAMstack: Building Web Sites with Nuxt/Vue, Strapi and wh...
 
Intro to advanced web development
Intro to advanced web developmentIntro to advanced web development
Intro to advanced web development
 
Using Docker in the Real World
Using Docker in the Real WorldUsing Docker in the Real World
Using Docker in the Real World
 
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
AD113  Speed Up Your Applications w/ Nginx and PageSpeedAD113  Speed Up Your Applications w/ Nginx and PageSpeed
AD113 Speed Up Your Applications w/ Nginx and PageSpeed
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL
 
23 Ways To Speed Up WordPress
23 Ways To Speed Up WordPress23 Ways To Speed Up WordPress
23 Ways To Speed Up WordPress
 
Improving Drupal Performances
Improving Drupal PerformancesImproving Drupal Performances
Improving Drupal Performances
 
DrupalCampLA 2011: Drupal backend-performance
DrupalCampLA 2011: Drupal backend-performanceDrupalCampLA 2011: Drupal backend-performance
DrupalCampLA 2011: Drupal backend-performance
 
Node JS Express : Steps to Create Restful Web App
Node JS Express : Steps to Create Restful Web AppNode JS Express : Steps to Create Restful Web App
Node JS Express : Steps to Create Restful Web App
 
Show Me The Cache!
Show Me The Cache!Show Me The Cache!
Show Me The Cache!
 
Drupal caching
Drupal cachingDrupal caching
Drupal caching
 
Cache is keeping you from reaching the full potential as a developer (word ca...
Cache is keeping you from reaching the full potential as a developer (word ca...Cache is keeping you from reaching the full potential as a developer (word ca...
Cache is keeping you from reaching the full potential as a developer (word ca...
 
Performance on the Yahoo! Homepage
Performance on the Yahoo! HomepagePerformance on the Yahoo! Homepage
Performance on the Yahoo! Homepage
 
Web Optimisation
Web OptimisationWeb Optimisation
Web Optimisation
 
Building performance into the new yahoo homepage presentation
Building performance into the new yahoo  homepage presentationBuilding performance into the new yahoo  homepage presentation
Building performance into the new yahoo homepage presentation
 
Front-End Modernization for Mortals
Front-End Modernization for MortalsFront-End Modernization for Mortals
Front-End Modernization for Mortals
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernization
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernization
 

Mehr von Exove

Data security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problemsData security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problemsExove
 
Provisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – ExoveProvisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – ExoveExove
 
Advanced custom fields in Wordpress
Advanced custom fields in WordpressAdvanced custom fields in Wordpress
Advanced custom fields in WordpressExove
 
Introduction to Robot Framework – Exove
Introduction to Robot Framework – ExoveIntroduction to Robot Framework – Exove
Introduction to Robot Framework – ExoveExove
 
Jenkins and visual regression – Exove
Jenkins and visual regression – ExoveJenkins and visual regression – Exove
Jenkins and visual regression – ExoveExove
 
Server-side React with Headless CMS – Exove
Server-side React with Headless CMS – ExoveServer-side React with Headless CMS – Exove
Server-side React with Headless CMS – ExoveExove
 
WebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – ExoveWebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – ExoveExove
 
Diversity in recruitment
Diversity in recruitmentDiversity in recruitment
Diversity in recruitmentExove
 
Saavutettavuus liiketoimintana
Saavutettavuus liiketoimintanaSaavutettavuus liiketoimintana
Saavutettavuus liiketoimintanaExove
 
Saavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistustaSaavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistustaExove
 
Mitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisälläänMitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisälläänExove
 
Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8Exove
 
GDPR for developers
GDPR for developersGDPR for developers
GDPR for developersExove
 
Managing Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with DrupalManaging Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with DrupalExove
 
Life with digital services after GDPR
Life with digital services after GDPRLife with digital services after GDPR
Life with digital services after GDPRExove
 
GDPR - no beginning no end
GDPR - no beginning no endGDPR - no beginning no end
GDPR - no beginning no endExove
 
Developing truly personalised experiences
Developing truly personalised experiencesDeveloping truly personalised experiences
Developing truly personalised experiencesExove
 
Customer Experience and Personalisation
Customer Experience and PersonalisationCustomer Experience and Personalisation
Customer Experience and PersonalisationExove
 
Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...Exove
 
Dataohjattu asiakaskokemus
Dataohjattu asiakaskokemusDataohjattu asiakaskokemus
Dataohjattu asiakaskokemusExove
 

Mehr von Exove (20)

Data security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problemsData security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problems
 
Provisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – ExoveProvisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – Exove
 
Advanced custom fields in Wordpress
Advanced custom fields in WordpressAdvanced custom fields in Wordpress
Advanced custom fields in Wordpress
 
Introduction to Robot Framework – Exove
Introduction to Robot Framework – ExoveIntroduction to Robot Framework – Exove
Introduction to Robot Framework – Exove
 
Jenkins and visual regression – Exove
Jenkins and visual regression – ExoveJenkins and visual regression – Exove
Jenkins and visual regression – Exove
 
Server-side React with Headless CMS – Exove
Server-side React with Headless CMS – ExoveServer-side React with Headless CMS – Exove
Server-side React with Headless CMS – Exove
 
WebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – ExoveWebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – Exove
 
Diversity in recruitment
Diversity in recruitmentDiversity in recruitment
Diversity in recruitment
 
Saavutettavuus liiketoimintana
Saavutettavuus liiketoimintanaSaavutettavuus liiketoimintana
Saavutettavuus liiketoimintana
 
Saavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistustaSaavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistusta
 
Mitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisälläänMitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisällään
 
Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8
 
GDPR for developers
GDPR for developersGDPR for developers
GDPR for developers
 
Managing Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with DrupalManaging Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with Drupal
 
Life with digital services after GDPR
Life with digital services after GDPRLife with digital services after GDPR
Life with digital services after GDPR
 
GDPR - no beginning no end
GDPR - no beginning no endGDPR - no beginning no end
GDPR - no beginning no end
 
Developing truly personalised experiences
Developing truly personalised experiencesDeveloping truly personalised experiences
Developing truly personalised experiences
 
Customer Experience and Personalisation
Customer Experience and PersonalisationCustomer Experience and Personalisation
Customer Experience and Personalisation
 
Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...
 
Dataohjattu asiakaskokemus
Dataohjattu asiakaskokemusDataohjattu asiakaskokemus
Dataohjattu asiakaskokemus
 

Kürzlich hochgeladen

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 

Kürzlich hochgeladen (20)

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 

High Performance on Drupal 7

  • 1. HIGH PERFORMANCE ON DRUPAL 7 - AN ANATOMY OF A SITE Kalle Varisvirta Technology Director
  • 2. Designing for high performance  The process is usually the same for major refactoring and building a new site for high performance  It’s always easier to replace an existing site, because you have real data  Creating a high performance site on some estimations from a customer might get you pretty far away from the actual needed solution
  • 3. Designing for high performance  For this session, we’ll imagine a situation where we have an existing site with actual data available  The recent case where we were working with this kind of a design was exactly that: a well matured site (running sine 1998!) going to be reincarnated for the fourth time
  • 4. SO, WE HAVE A PERFORMANCE PROBLEM
  • 5. First look: identify the problem  When a site is not performing well, it can be caused by numerous different reasons  Analyze it  Profile under load  Look at the logs  Look at the server loads under load
  • 6. First look: identify the problem  Make sure you’re not hitting some simple bottleneck  Too many running services on a single hardware  A crazy database query killing the site  Broken router causing 3 sec delay to every request (seen that, for real)  And many, many others
  • 7. Problem identified  When you’ve arrived to the conclusion that you actually have too much volume, then figure out of what?  Too much content? I’ve seen 12 million nodes plus 60 million comments on a single installation, that’s a lot.  Too many requests per second? Make sure they are page requests. Statics can be easily fixed, look at cache headers, aggregation, Varnish, Nginx, CDNs.
  • 8. Problem identified  Too many Drupal page requests per second?  Anonymous?  If anonymous, it’s usually easy to fix, as long as it’s cacheable. We’ll go into the whole “cacheable” thing later.  If it’s cacheable, look at page cache, Boost, Varnish, CDNs.  Logged in?  Drupal cache is turning off, and the calls are bypassing all the caches  This usually is a more difficult problem to solve
  • 9. Problem identified: too many logged in users There’s still one case that’s pretty common and still easy enough to solve: logged in users with small amount of personalized content (small in percentage of the CPU cost of building the page in Drupal)
  • 10. Problem identified: too many logged in users logged in as user highlights: content area: common content for common everybody your friends’ favorites
  • 11. Problem identified: too many logged in users  Let’s make a couple pre-requisite conditions  You’re running on your own environment  You have Varnish configured in front of the Drupal site  You have some skills in programming with Drupal You got all of this? Ok, let’s continue.
  • 13. What’s Cache Control  It’s similar to ESI module with some benefits  It’s mainly directed to cache blocks or block-like content on the page  It needs some programming usually  When dealing with an optimal problem for it, it’s the optimal solution and will make your site faster by magnitudes
  • 14. DRUPAL User first gets the common page for everybody from Varnish Then a javascript routine checks whether the user is logged in or VARNISH not The javascript either makes the hidden for-anonymous content USER visible or fetches this user’s BROWSER content with a ajax request
  • 15. Problem identified: too many logged in users logged in as login box user highlights: content area: common content for common everybody your friends’ staff picks favorites
  • 16.
  • 17. Benefits of Cache Control  Burdens the back-end significantly less due to only loading the needed parts  Loads multiple blocks and/or areas with a single request  Gives the user something to look at while loading the hard parts of the page – and it does make the site feel faster  Plays well with some other modules, like captcha etc.
  • 18. What about ESI  ESI (Edge Side Includes) is a partial loading technique supported by Varnish and some CDNs, e.g. Akamai  It basically makes Varnish do the partial page loading  Varnish first fetches the common version from cache  Then it looks though the page to see any ESI markup  Then it loads all the ESI marked parts of the page from cache or from the Drupal
  • 19. How is Cache Control different than ESI  ESI needs to wait until the whole page is loaded before giving anything to the user  ESI loads all the portions of the page (still in D7, this might change in D8) in separate http requests, thus burdening the server with even more bootstraps than without any cache
  • 20. HEY… HOW ABOUT THAT USER GENERATED CONTENT THAT MAKES VARNISH PURGE EVERYTHING ALL THE TIME?
  • 21. Different problem  As stated, Cache Control works well for specific problems, but that also is in trouble when the Varnish cache gets purged all the time  That usually happens on a really UGC (User Generated Content) oriented site
  • 22. Different problem: UGC When a single page on a site gets new content every 2-30 seconds  Caching is of no use, purging multiple pages on that rate makes no sense  You need that data to have a way of refreshing even more frequently  And we’re still talking about a page that doesn’t update after it has loaded (so no Socket.IO stuff on this slide deck, sorry)
  • 23. Different problem: UGC logged in as user content area: common content for everybody highlights: common and this is getting updates every 30 seconds your friends’ favorites
  • 24. Solution: A new cache layer  We add a new, fast-paced cache layer on the page  We’ll try to purge and reload that cache as fast a humanly possible in Drupal  We’ll minimize our efforts on the backend
  • 25. Solution: A new cache layer  Let’s load the whole page from Varnish and the refresh the fast-paged part with javascript  To minimize the load on the backend, skip the theming layer and just load JSON  Sound good?
  • 26. Solution: A new cache layer  Until you realize you have to theme everything in the Javascript and that’s not fun  Even if you use a javascript templating engine, you still have to keep your themes up to date in two places
  • 28. Front themer  When theming in Javascript, Front themer makes your life a bit easier  It allows you to map your Drupal theme’s theme implementations to very simple Javascript versions  It’s designed to help out with simple elements, such as boxes and lists  It might need you to tweak your theming functions a bit to make them work better with it
  • 29. Solution: A new cache layer  And the back-end?  Exove has a module coming out to help get grouped and cached JSON outputs fast from Views  It’s not something to be used for integrations but just for the faster cache layer  Going to be released during this fall with a site using it  Until that, just use Views and Views datasource
  • 30. SO, WAIT A MINUTE THESE ARE ALL HACKS, RIGHT? Not quite.
  • 31. Drupal doing high performance  You can’t really use Drupal for high performance out of the box  Hacks, or actually extensions are needed and if done as proper contribs, are safe and convenient to use  Drupal has been made extensible for this exact reason, it can be made better by extending it
  • 32. What would we like to see in Drupal 8  We’d like to see a real JSON output from Drupal, preferably by piece by piece content  We’d also like to see a thinner bootstrap with lazy-loading for pretty much everything  REST interface for doing more stuff in the front, e.g. with JS frameworks
  • 33. You can see a pattern here. This is all covered by the WSSCI and Scotch iniatives. We’re waiting for Drupal 8 to be a lot better. And Cache Control is going to rock on Drupal 8.
  • 34. and there are always going to be hacks to get Drupal to do more
  • 35. THANK YOU FOR YOUR TIME PS. We’re hiring. www.exove.fi/careers