SlideShare a Scribd company logo
Custom Coded Projects
Marko Heijnen - WordPress Meetup Novi Sad
“There is no such thing as too many plugins but
there can be too much code and functionality”
Dilbert to the rescue
What should I choose for
this feature?
Performance
Performance
• Out of the box solutions can come with a higher
performance penalty
• This goes more for themes then plugins
• This because themes want to do more then you
need, this to have a wider target group
My sites vs WPSerbia
Comparison
• Everything is hosted on the same infrastructure
• Caching is the same which is Batcache/Redis
• My sites do use Elasticsearch
My server setup
Thumbor
Public
Memcached
Elasticsearch
MariaDB
Micro services
Webserver 1
Webserver 2
Private
Loadbalancer
My sites
WPSerbia
Comparison
• Average of ~150ms vs ~300ms
• Spikes of my sites are caused by network traffic for
WPCentral
• Spikes from WPSerbia are caused by Jetpack
Comparison
• Browser time is 3.3s vs 5.77 (hard to tell an average)
• My site is almost fully custom coded
• Even does some complex stuff with WPCentral
• WPSerbia isn’t that bad performing at all
• It has more images but it’s also local targeted
GTMetrix
New Relic loads later
GTMetrix
WPSerbia - good
• It does load the images through Jetpack Photon
• Server infrastructure is good
• Not to many plugins
WPSerbia - can be better
• There are still some wrong http links in it (redirects)
• Stricter page caching
• Images are directly loaded (no lazy loading)
• Custom code Twitter widget (17 calls)
• Has a theme that also has helper plugins (widgets)
which includes small stylesheets which could have
been combined with the theme
Worst case scenario
Worst case scenario
• One project with international traffic
• Dedicated server in Germany
• Theme from Themeforest with Visual Composer
• Browser time with spikes to ~30s`
Improved version
• Created a new parent/child theme
• Stripped all options away
• Some additional performance and bug fixes
• Spikes are now ~10s and went to ~8s
• Not bad at all if you look at the overhead of trackers
• And keep in mind this is fully loaded time
Improved version
• Still no caching in place
• This was on a longer roadmap
• It was already switched to PHP7
Trackers (can) suck
Time
Time
• There are qualitative plugins out there
• Say for forms you would choose Gravity Forms,
Contact Form 7, Ninja Forms etc
• For search you could choose SearchWP, FacetWP
or ElasticPress
• And more use cases where you have options
• So no reason to build everything yourself
Search
• Can become complicated very easy
• Depending on your requirements something
custom or SearchWP/FacetWP can work for you
• Using Elasticsearch would have created additional
development time due to plugin support
• Elasticsearch can save time when complex search
is required like fuzzy or partial matching
Custom coded projects
Why FacetWP
• It was relative easy to implement
• It saved up a considerable time of development
• It did create additional effort due to client demands
• It saved the client a big chunk of their budget
Cost
Cost
• For ElasticPress (Elasticsearch) you would need
specific hosting or a VPS
• Also most likely a new VPS is needed going for $10
• So decisions you make aren’t only initial cost
• Still going for something as ElasticPress could save
up cost as your webserver could perform better
Quality
WPCentral
• Showing download history
• Showing version usage history
• List all locales and their current state (being updated)
• Showing contributors data (work in progress)
• Getting checksums for plugins & themes
• Parsing all commits of WordPress (work in progress)
How it worked
• A lot of data handling by wp_remote_get
• Scrapping profiles.WordPress.org to read data
• Multiple API calls to api.WordPress.org
• Combine data so it can be presented
Remote calls are bad!!!
It’s not a front-end issue
The solution
Microservices
• Microservices are small, autonomous services that
work together
• Small, and Focused on Doing One Thing Well
Benefits
• If WordPress breaks, the services still keep running
• Offload functionality from WordPress
• High level separation
• Ease of Deployment
• Different services can use different programming
languages
Benefits
• Scale services that require more resources
• In general they have an (REST) API
• Reusable
• Other microservices could call the service to run a
task
How it works now
• All logic in WordPress is gone and simple pipes the
calls
• Still enough remote calls but to a local server
• All calls are still being cached by WordPress
• Less code in WordPress means less notable
breakage
How it works now
• Several small Node.js services
• All API based so easy to reuse
• Cronjobs are now actual cronjobs
• The node services handles things way faster
• Pushing new updates has become easier
What happens with

poor quality
Poor quality
• Put your own standard on a project you took over
• Specially when it doesn’t add any value
• Quick fixes over the place because of cost
• Copy/pasted previous theme and put new
functionality in there without removing unused ones
• Having random functionality that slows down the
site without any benefit
Client project
• I had several clients in the past that call me for
small fixes
• Last case was having several session_start() calls
when using Varnish
• Included functionality that wasn't used which was
the main bottleneck
• Also having additional page caching through
WordPress
What went wrong
• Multiple caches could speed up a bit but the
changes are high that it will not
• sessions/cookies are dangerous when using
Varnish and it’s better to not use it at all
• A client made changes without having enough
knowledge what the negative impact could be
Conclusion
Conclusion
• Custom coding a theme is well worth the effort
• It doesn’t need to cost as much time
• Inform your customers about the decisions the
want to make.
• Thing outside the box with microservices next to
WordPress
Marko Heijnen
• Founder of CodeKitchen
• Core contributor for WordPress of 15
releases
• 1 of the organizers for WordCamp
Belgrade
• Plugin developer of Tabify Edit
Screen, Site Manager etc
Marko Heijnen
@MarkoHeijnen
info@markoheijnen.com
https://markoheijnen.com

More Related Content

What's hot (20)

Strong Consistency in Databases. What does it actually guarantee? - Andy Goo...
 Strong Consistency in Databases. What does it actually guarantee? - Andy Goo... Strong Consistency in Databases. What does it actually guarantee? - Andy Goo...
Strong Consistency in Databases. What does it actually guarantee? - Andy Goo...
DevOpsDays Tel Aviv
 
Microservices Design and Best Practices on AWS
Microservices Design and Best Practices on AWSMicroservices Design and Best Practices on AWS
Microservices Design and Best Practices on AWS
Arif Amirani
 
Javascript for Wep Apps
Javascript for Wep AppsJavascript for Wep Apps
Javascript for Wep Apps
Michael Puckett
 
Ruby performance - The low hanging fruit
Ruby performance - The low hanging fruitRuby performance - The low hanging fruit
Ruby performance - The low hanging fruit
Bruce Werdschinski
 
ClojureScript: I can't believe this is JavaScript
ClojureScript: I can't believe this is JavaScriptClojureScript: I can't believe this is JavaScript
ClojureScript: I can't believe this is JavaScript
Eric Normand
 
Taming the cost of your first cloud - CCCEU 2014
Taming the cost of your first cloud - CCCEU 2014Taming the cost of your first cloud - CCCEU 2014
Taming the cost of your first cloud - CCCEU 2014
Tim Mackey
 
Cloud patterns
Cloud patternsCloud patterns
Cloud patterns
Nicolas De Loof
 
Best Features of Azure Service Bus
Best Features of Azure Service BusBest Features of Azure Service Bus
Best Features of Azure Service Bus
Daniel Toomey
 
Conf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with StencilConf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with Stencil
TechExeter
 
Performance optimization - JavaScript
Performance optimization - JavaScriptPerformance optimization - JavaScript
Performance optimization - JavaScript
Filip Mares
 
Performance optimization - Advanced techniques
Performance optimization - Advanced techniquesPerformance optimization - Advanced techniques
Performance optimization - Advanced techniques
Filip Mares
 
Solving trust issues at scale - Omer Levi Hevroni
Solving trust issues at scale - Omer Levi HevroniSolving trust issues at scale - Omer Levi Hevroni
Solving trust issues at scale - Omer Levi Hevroni
DevOpsDays Tel Aviv
 
Performance optimization - Basics
Performance optimization - BasicsPerformance optimization - Basics
Performance optimization - Basics
Filip Mares
 
SSDs are Awesome
SSDs are AwesomeSSDs are Awesome
SSDs are Awesome
Barry Abrahamson
 
No More Cowboy Coding: Modern WordPress Development Workflow That Scales
No More Cowboy Coding: Modern WordPress Development Workflow That ScalesNo More Cowboy Coding: Modern WordPress Development Workflow That Scales
No More Cowboy Coding: Modern WordPress Development Workflow That Scales
Tom Howard
 
Serverless testing-serverless-sydney-20181018
Serverless testing-serverless-sydney-20181018Serverless testing-serverless-sydney-20181018
Serverless testing-serverless-sydney-20181018
Rowan Udell
 
BizTalk Server Performance Tips
BizTalk Server Performance TipsBizTalk Server Performance Tips
BizTalk Server Performance Tips
BizTalk360
 
Building a multi-tenant application using 45.000 databases - Henry Been - Cod...
Building a multi-tenant application using 45.000 databases - Henry Been - Cod...Building a multi-tenant application using 45.000 databases - Henry Been - Cod...
Building a multi-tenant application using 45.000 databases - Henry Been - Cod...
Codemotion
 
Henry been database-per-tenant with 50k databases
Henry been   database-per-tenant with 50k databasesHenry been   database-per-tenant with 50k databases
Henry been database-per-tenant with 50k databases
Henry Been
 
Introduction to Django-Celery and Supervisor
Introduction to Django-Celery and SupervisorIntroduction to Django-Celery and Supervisor
Introduction to Django-Celery and Supervisor
Suresh Kumar
 
Strong Consistency in Databases. What does it actually guarantee? - Andy Goo...
 Strong Consistency in Databases. What does it actually guarantee? - Andy Goo... Strong Consistency in Databases. What does it actually guarantee? - Andy Goo...
Strong Consistency in Databases. What does it actually guarantee? - Andy Goo...
DevOpsDays Tel Aviv
 
Microservices Design and Best Practices on AWS
Microservices Design and Best Practices on AWSMicroservices Design and Best Practices on AWS
Microservices Design and Best Practices on AWS
Arif Amirani
 
Ruby performance - The low hanging fruit
Ruby performance - The low hanging fruitRuby performance - The low hanging fruit
Ruby performance - The low hanging fruit
Bruce Werdschinski
 
ClojureScript: I can't believe this is JavaScript
ClojureScript: I can't believe this is JavaScriptClojureScript: I can't believe this is JavaScript
ClojureScript: I can't believe this is JavaScript
Eric Normand
 
Taming the cost of your first cloud - CCCEU 2014
Taming the cost of your first cloud - CCCEU 2014Taming the cost of your first cloud - CCCEU 2014
Taming the cost of your first cloud - CCCEU 2014
Tim Mackey
 
Best Features of Azure Service Bus
Best Features of Azure Service BusBest Features of Azure Service Bus
Best Features of Azure Service Bus
Daniel Toomey
 
Conf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with StencilConf 2018 Track 2 - Custom Web Elements with Stencil
Conf 2018 Track 2 - Custom Web Elements with Stencil
TechExeter
 
Performance optimization - JavaScript
Performance optimization - JavaScriptPerformance optimization - JavaScript
Performance optimization - JavaScript
Filip Mares
 
Performance optimization - Advanced techniques
Performance optimization - Advanced techniquesPerformance optimization - Advanced techniques
Performance optimization - Advanced techniques
Filip Mares
 
Solving trust issues at scale - Omer Levi Hevroni
Solving trust issues at scale - Omer Levi HevroniSolving trust issues at scale - Omer Levi Hevroni
Solving trust issues at scale - Omer Levi Hevroni
DevOpsDays Tel Aviv
 
Performance optimization - Basics
Performance optimization - BasicsPerformance optimization - Basics
Performance optimization - Basics
Filip Mares
 
No More Cowboy Coding: Modern WordPress Development Workflow That Scales
No More Cowboy Coding: Modern WordPress Development Workflow That ScalesNo More Cowboy Coding: Modern WordPress Development Workflow That Scales
No More Cowboy Coding: Modern WordPress Development Workflow That Scales
Tom Howard
 
Serverless testing-serverless-sydney-20181018
Serverless testing-serverless-sydney-20181018Serverless testing-serverless-sydney-20181018
Serverless testing-serverless-sydney-20181018
Rowan Udell
 
BizTalk Server Performance Tips
BizTalk Server Performance TipsBizTalk Server Performance Tips
BizTalk Server Performance Tips
BizTalk360
 
Building a multi-tenant application using 45.000 databases - Henry Been - Cod...
Building a multi-tenant application using 45.000 databases - Henry Been - Cod...Building a multi-tenant application using 45.000 databases - Henry Been - Cod...
Building a multi-tenant application using 45.000 databases - Henry Been - Cod...
Codemotion
 
Henry been database-per-tenant with 50k databases
Henry been   database-per-tenant with 50k databasesHenry been   database-per-tenant with 50k databases
Henry been database-per-tenant with 50k databases
Henry Been
 
Introduction to Django-Celery and Supervisor
Introduction to Django-Celery and SupervisorIntroduction to Django-Celery and Supervisor
Introduction to Django-Celery and Supervisor
Suresh Kumar
 

Similar to Custom coded projects (20)

Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
FITC
 
Building faster websites: web performance with WordPress
Building faster websites: web performance with WordPressBuilding faster websites: web performance with WordPress
Building faster websites: web performance with WordPress
Johannes Siipola
 
Background processing with hangfire
Background processing with hangfireBackground processing with hangfire
Background processing with hangfire
Aleksandar Bozinovski
 
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
Konstantin Gredeskoul
 
Learn from my Mistakes - Building Better Solutions in SPFx
Learn from my  Mistakes - Building Better Solutions in SPFxLearn from my  Mistakes - Building Better Solutions in SPFx
Learn from my Mistakes - Building Better Solutions in SPFx
Thomas Daly
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Control
indiver
 
Community day 2013 applied architectures
Community day 2013   applied architecturesCommunity day 2013   applied architectures
Community day 2013 applied architectures
Panagiotis Kefalidis
 
20130714 php matsuri - highly available php
20130714   php matsuri - highly available php20130714   php matsuri - highly available php
20130714 php matsuri - highly available php
Graham Weldon
 
PAC 2019 virtual Mark Tomlinson
PAC 2019 virtual Mark TomlinsonPAC 2019 virtual Mark Tomlinson
PAC 2019 virtual Mark Tomlinson
Neotys
 
Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11
Derek Jacoby
 
Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...
Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...
Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...
George White
 
DrupalCampLA 2014 - Drupal backend performance and scalability
DrupalCampLA 2014 - Drupal backend performance and scalabilityDrupalCampLA 2014 - Drupal backend performance and scalability
DrupalCampLA 2014 - Drupal backend performance and scalability
cherryhillco
 
HyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQLHyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQL
Evan Volgas
 
Advanced Web Technology.pptx
Advanced Web Technology.pptxAdvanced Web Technology.pptx
Advanced Web Technology.pptx
ssuser35fdf2
 
Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matter
Tomas Doran
 
Drupal performance
Drupal performanceDrupal performance
Drupal performance
Piyuesh Kumar
 
Improving WordPress Development and Deployments with Docker
Improving WordPress Development and Deployments with DockerImproving WordPress Development and Deployments with Docker
Improving WordPress Development and Deployments with Docker
Brett Palmer
 
Node.js to the rescue
Node.js to the rescueNode.js to the rescue
Node.js to the rescue
Marko Heijnen
 
Docker for everything
Docker for everythingDocker for everything
Docker for everything
Tim Haak
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress Applications
Taylor Lovett
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
FITC
 
Building faster websites: web performance with WordPress
Building faster websites: web performance with WordPressBuilding faster websites: web performance with WordPress
Building faster websites: web performance with WordPress
Johannes Siipola
 
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
Konstantin Gredeskoul
 
Learn from my Mistakes - Building Better Solutions in SPFx
Learn from my  Mistakes - Building Better Solutions in SPFxLearn from my  Mistakes - Building Better Solutions in SPFx
Learn from my Mistakes - Building Better Solutions in SPFx
Thomas Daly
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Control
indiver
 
Community day 2013 applied architectures
Community day 2013   applied architecturesCommunity day 2013   applied architectures
Community day 2013 applied architectures
Panagiotis Kefalidis
 
20130714 php matsuri - highly available php
20130714   php matsuri - highly available php20130714   php matsuri - highly available php
20130714 php matsuri - highly available php
Graham Weldon
 
PAC 2019 virtual Mark Tomlinson
PAC 2019 virtual Mark TomlinsonPAC 2019 virtual Mark Tomlinson
PAC 2019 virtual Mark Tomlinson
Neotys
 
Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11
Derek Jacoby
 
Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...
Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...
Imagine 2014: The Devil is in the Details How to Optimize Magento Hosting to ...
George White
 
DrupalCampLA 2014 - Drupal backend performance and scalability
DrupalCampLA 2014 - Drupal backend performance and scalabilityDrupalCampLA 2014 - Drupal backend performance and scalability
DrupalCampLA 2014 - Drupal backend performance and scalability
cherryhillco
 
HyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQLHyperDB, MySQL Performance, & Flavors of MySQL
HyperDB, MySQL Performance, & Flavors of MySQL
Evan Volgas
 
Advanced Web Technology.pptx
Advanced Web Technology.pptxAdvanced Web Technology.pptx
Advanced Web Technology.pptx
ssuser35fdf2
 
Web frameworks don't matter
Web frameworks don't matterWeb frameworks don't matter
Web frameworks don't matter
Tomas Doran
 
Improving WordPress Development and Deployments with Docker
Improving WordPress Development and Deployments with DockerImproving WordPress Development and Deployments with Docker
Improving WordPress Development and Deployments with Docker
Brett Palmer
 
Node.js to the rescue
Node.js to the rescueNode.js to the rescue
Node.js to the rescue
Marko Heijnen
 
Docker for everything
Docker for everythingDocker for everything
Docker for everything
Tim Haak
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress Applications
Taylor Lovett
 

More from Marko Heijnen (20)

Security, more important than ever!
Security, more important than ever!Security, more important than ever!
Security, more important than ever!
Marko Heijnen
 
My Contributor Story
My Contributor StoryMy Contributor Story
My Contributor Story
Marko Heijnen
 
WooCommerce & Apple TV
WooCommerce & Apple TVWooCommerce & Apple TV
WooCommerce & Apple TV
Marko Heijnen
 
The moment my site got hacked - WordCamp Sofia
The moment my site got hacked - WordCamp SofiaThe moment my site got hacked - WordCamp Sofia
The moment my site got hacked - WordCamp Sofia
Marko Heijnen
 
Mijn site beveiliging
Mijn site beveiligingMijn site beveiliging
Mijn site beveiliging
Marko Heijnen
 
The moment my site got hacked
The moment my site got hackedThe moment my site got hacked
The moment my site got hacked
Marko Heijnen
 
My complicated WordPress site
My complicated WordPress siteMy complicated WordPress site
My complicated WordPress site
Marko Heijnen
 
Protecting your site by detection
Protecting your site by detectionProtecting your site by detection
Protecting your site by detection
Marko Heijnen
 
GlotPress aka translate.wordpress.org
GlotPress aka translate.wordpress.orgGlotPress aka translate.wordpress.org
GlotPress aka translate.wordpress.org
Marko Heijnen
 
Writing clean and maintainable code
Writing clean and maintainable codeWriting clean and maintainable code
Writing clean and maintainable code
Marko Heijnen
 
Extending WordPress as a pro
Extending WordPress as a proExtending WordPress as a pro
Extending WordPress as a pro
Marko Heijnen
 
Let's create a multilingual site in WordPress
Let's create a multilingual site in WordPressLet's create a multilingual site in WordPress
Let's create a multilingual site in WordPress
Marko Heijnen
 
Bootstrapping your plugin
Bootstrapping your pluginBootstrapping your plugin
Bootstrapping your plugin
Marko Heijnen
 
The development and future of GlotPress
The development and future of GlotPressThe development and future of GlotPress
The development and future of GlotPress
Marko Heijnen
 
Why Javascript matters
Why Javascript mattersWhy Javascript matters
Why Javascript matters
Marko Heijnen
 
The code history of WordPress
The code history of WordPressThe code history of WordPress
The code history of WordPress
Marko Heijnen
 
Building plugins like a pro
Building plugins like a proBuilding plugins like a pro
Building plugins like a pro
Marko Heijnen
 
Perfect your images using WordPress - WordCamp Europe 2013
Perfect your images using WordPress - WordCamp Europe 2013Perfect your images using WordPress - WordCamp Europe 2013
Perfect your images using WordPress - WordCamp Europe 2013
Marko Heijnen
 
Dealing with media
Dealing with mediaDealing with media
Dealing with media
Marko Heijnen
 
The awesome things you can do with images inside WordPress
The awesome things you can do with images inside WordPressThe awesome things you can do with images inside WordPress
The awesome things you can do with images inside WordPress
Marko Heijnen
 
Security, more important than ever!
Security, more important than ever!Security, more important than ever!
Security, more important than ever!
Marko Heijnen
 
My Contributor Story
My Contributor StoryMy Contributor Story
My Contributor Story
Marko Heijnen
 
WooCommerce & Apple TV
WooCommerce & Apple TVWooCommerce & Apple TV
WooCommerce & Apple TV
Marko Heijnen
 
The moment my site got hacked - WordCamp Sofia
The moment my site got hacked - WordCamp SofiaThe moment my site got hacked - WordCamp Sofia
The moment my site got hacked - WordCamp Sofia
Marko Heijnen
 
Mijn site beveiliging
Mijn site beveiligingMijn site beveiliging
Mijn site beveiliging
Marko Heijnen
 
The moment my site got hacked
The moment my site got hackedThe moment my site got hacked
The moment my site got hacked
Marko Heijnen
 
My complicated WordPress site
My complicated WordPress siteMy complicated WordPress site
My complicated WordPress site
Marko Heijnen
 
Protecting your site by detection
Protecting your site by detectionProtecting your site by detection
Protecting your site by detection
Marko Heijnen
 
GlotPress aka translate.wordpress.org
GlotPress aka translate.wordpress.orgGlotPress aka translate.wordpress.org
GlotPress aka translate.wordpress.org
Marko Heijnen
 
Writing clean and maintainable code
Writing clean and maintainable codeWriting clean and maintainable code
Writing clean and maintainable code
Marko Heijnen
 
Extending WordPress as a pro
Extending WordPress as a proExtending WordPress as a pro
Extending WordPress as a pro
Marko Heijnen
 
Let's create a multilingual site in WordPress
Let's create a multilingual site in WordPressLet's create a multilingual site in WordPress
Let's create a multilingual site in WordPress
Marko Heijnen
 
Bootstrapping your plugin
Bootstrapping your pluginBootstrapping your plugin
Bootstrapping your plugin
Marko Heijnen
 
The development and future of GlotPress
The development and future of GlotPressThe development and future of GlotPress
The development and future of GlotPress
Marko Heijnen
 
Why Javascript matters
Why Javascript mattersWhy Javascript matters
Why Javascript matters
Marko Heijnen
 
The code history of WordPress
The code history of WordPressThe code history of WordPress
The code history of WordPress
Marko Heijnen
 
Building plugins like a pro
Building plugins like a proBuilding plugins like a pro
Building plugins like a pro
Marko Heijnen
 
Perfect your images using WordPress - WordCamp Europe 2013
Perfect your images using WordPress - WordCamp Europe 2013Perfect your images using WordPress - WordCamp Europe 2013
Perfect your images using WordPress - WordCamp Europe 2013
Marko Heijnen
 
The awesome things you can do with images inside WordPress
The awesome things you can do with images inside WordPressThe awesome things you can do with images inside WordPress
The awesome things you can do with images inside WordPress
Marko Heijnen
 

Recently uploaded (20)

#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.
gregtap1
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Buckeye Dreamin' 2023: De-fogging Debug Logs
Buckeye Dreamin' 2023: De-fogging Debug LogsBuckeye Dreamin' 2023: De-fogging Debug Logs
Buckeye Dreamin' 2023: De-fogging Debug Logs
Lynda Kane
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.
gregtap1
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Buckeye Dreamin' 2023: De-fogging Debug Logs
Buckeye Dreamin' 2023: De-fogging Debug LogsBuckeye Dreamin' 2023: De-fogging Debug Logs
Buckeye Dreamin' 2023: De-fogging Debug Logs
Lynda Kane
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 

Custom coded projects

  • 1. Custom Coded Projects Marko Heijnen - WordPress Meetup Novi Sad
  • 2. “There is no such thing as too many plugins but there can be too much code and functionality”
  • 3. Dilbert to the rescue
  • 4. What should I choose for this feature?
  • 6. Performance • Out of the box solutions can come with a higher performance penalty • This goes more for themes then plugins • This because themes want to do more then you need, this to have a wider target group
  • 7. My sites vs WPSerbia
  • 8. Comparison • Everything is hosted on the same infrastructure • Caching is the same which is Batcache/Redis • My sites do use Elasticsearch
  • 9. My server setup Thumbor Public Memcached Elasticsearch MariaDB Micro services Webserver 1 Webserver 2 Private Loadbalancer
  • 12. Comparison • Average of ~150ms vs ~300ms • Spikes of my sites are caused by network traffic for WPCentral • Spikes from WPSerbia are caused by Jetpack
  • 13. Comparison • Browser time is 3.3s vs 5.77 (hard to tell an average) • My site is almost fully custom coded • Even does some complex stuff with WPCentral • WPSerbia isn’t that bad performing at all • It has more images but it’s also local targeted
  • 17. WPSerbia - good • It does load the images through Jetpack Photon • Server infrastructure is good • Not to many plugins
  • 18. WPSerbia - can be better • There are still some wrong http links in it (redirects) • Stricter page caching • Images are directly loaded (no lazy loading) • Custom code Twitter widget (17 calls) • Has a theme that also has helper plugins (widgets) which includes small stylesheets which could have been combined with the theme
  • 20. Worst case scenario • One project with international traffic • Dedicated server in Germany • Theme from Themeforest with Visual Composer • Browser time with spikes to ~30s`
  • 21. Improved version • Created a new parent/child theme • Stripped all options away • Some additional performance and bug fixes • Spikes are now ~10s and went to ~8s • Not bad at all if you look at the overhead of trackers • And keep in mind this is fully loaded time
  • 22. Improved version • Still no caching in place • This was on a longer roadmap • It was already switched to PHP7
  • 24. Time
  • 25. Time • There are qualitative plugins out there • Say for forms you would choose Gravity Forms, Contact Form 7, Ninja Forms etc • For search you could choose SearchWP, FacetWP or ElasticPress • And more use cases where you have options • So no reason to build everything yourself
  • 26. Search • Can become complicated very easy • Depending on your requirements something custom or SearchWP/FacetWP can work for you • Using Elasticsearch would have created additional development time due to plugin support • Elasticsearch can save time when complex search is required like fuzzy or partial matching
  • 28. Why FacetWP • It was relative easy to implement • It saved up a considerable time of development • It did create additional effort due to client demands • It saved the client a big chunk of their budget
  • 29. Cost
  • 30. Cost • For ElasticPress (Elasticsearch) you would need specific hosting or a VPS • Also most likely a new VPS is needed going for $10 • So decisions you make aren’t only initial cost • Still going for something as ElasticPress could save up cost as your webserver could perform better
  • 32. WPCentral • Showing download history • Showing version usage history • List all locales and their current state (being updated) • Showing contributors data (work in progress) • Getting checksums for plugins & themes • Parsing all commits of WordPress (work in progress)
  • 33. How it worked • A lot of data handling by wp_remote_get • Scrapping profiles.WordPress.org to read data • Multiple API calls to api.WordPress.org • Combine data so it can be presented
  • 35. It’s not a front-end issue
  • 37. Microservices • Microservices are small, autonomous services that work together • Small, and Focused on Doing One Thing Well
  • 38. Benefits • If WordPress breaks, the services still keep running • Offload functionality from WordPress • High level separation • Ease of Deployment • Different services can use different programming languages
  • 39. Benefits • Scale services that require more resources • In general they have an (REST) API • Reusable • Other microservices could call the service to run a task
  • 40. How it works now • All logic in WordPress is gone and simple pipes the calls • Still enough remote calls but to a local server • All calls are still being cached by WordPress • Less code in WordPress means less notable breakage
  • 41. How it works now • Several small Node.js services • All API based so easy to reuse • Cronjobs are now actual cronjobs • The node services handles things way faster • Pushing new updates has become easier
  • 43. Poor quality • Put your own standard on a project you took over • Specially when it doesn’t add any value • Quick fixes over the place because of cost • Copy/pasted previous theme and put new functionality in there without removing unused ones • Having random functionality that slows down the site without any benefit
  • 44. Client project • I had several clients in the past that call me for small fixes • Last case was having several session_start() calls when using Varnish • Included functionality that wasn't used which was the main bottleneck • Also having additional page caching through WordPress
  • 45. What went wrong • Multiple caches could speed up a bit but the changes are high that it will not • sessions/cookies are dangerous when using Varnish and it’s better to not use it at all • A client made changes without having enough knowledge what the negative impact could be
  • 47. Conclusion • Custom coding a theme is well worth the effort • It doesn’t need to cost as much time • Inform your customers about the decisions the want to make. • Thing outside the box with microservices next to WordPress
  • 48. Marko Heijnen • Founder of CodeKitchen • Core contributor for WordPress of 15 releases • 1 of the organizers for WordCamp Belgrade • Plugin developer of Tabify Edit Screen, Site Manager etc