Drupal 7 performance related patches & replacements for core functionally

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
You are viewing a wiki page. You are welcome to join the group and then edit it. Be bold!

Core Patches

Big Performance Gains - Low Risk

Second loop in module_implements() being repeated for no reason. ~ 400ms - Included in 7.40
Speed up drupal_parse_info_format() 3x and reduce memory 95% ~ 600ms - Included in 7.40
Add static cache to module_load_include() ~ 45ms - 1.1s - included in 7.42
improve theme registry rebuild performance by 85% ~ 4 seconds Included in 7.51 October 2016

Small Performance Gains - Low Risk

inline file_uri_scheme() in file_stream_wrapper_uri_normalize() ~0-150ms Included in 7.x-dev September 2016
Avoid re-scanning module directory when multiple modules are missing ~0-300ms included in 7.50
Add static cache to DatabaseConnection ::escapeTable(), ::escapeField() and ::escapeAlias() ~20-100ms with large number of similar queries (commerce line items). Included in 7.x-dev September 2016

Small Performance Gains - High Risk

If item is hidden in _menu_tree_check_access() skip it right away ~5-50ms

Race Conditions

Fixes for MySQL Deadlocks in D7
Notice: Trying to get property of non-object in image_style_deliver()

Fix Bugs

Fix PHP Notices

Control Memory Usage

Contrib Patches

Link Module - Only re-load the entity in _link_sanitize() if tokens need to be replaced IN DEV branch v1.3
Context Module - Cache query in context_reaction_block::get_blocks() & remove unused blocks before the alters get called
Panels Mini Module - panels_mini_load & friends need caching
Workbench Moderation Module - Node revision history optimization on large websites
Menu Item Visibility Module - menu_item_visibility_load time

Performance

Replace Core's Functionally

Cache Backends

Memcache API and Integration (cache, locks, sessions)
Redis (cache, locks, sessions)
Entity cache (load entities from cache rather than DB)
FileCache No special server requirements so suitable for shared hosting.
MongoDB (cache, locks, sessions, field storage, watchdog, block, queue)
Book Cache Memory and query optimizer for book module in rendering capability.

Database

AutoSlave (automatic use of slave db, scalability)
APDQC (tuning guide / optimizations beyond default mysql controller), also provides a lot of optimizations previously described above.

Page

Cache Expiration - configurable actions upon events that will expire URLs from caches
Boost - serve static pages to anonymous users as single files / db hits.
AuthCache - serves authenticated requests faster than stock drupal serves anonymous requests.

Statistics

jStats
Google Analytics Statistics

Block/Pane Alt Rendering

Ajax Blocks
Edge Side Includes integration

HTTP Requests

chr
HTTP Parallel Request Library - Replacement for drupal_http_request()

CSS/JS file aggregation/optimization

Advanced CSS/JS Aggregation
Speedy
Magic
Aggregate cache
Core Library
UglifyJS
Simple aggregation

Others

Tracelytics - tracelytics web application performance analysis Drupal integration
Menu Performance - Benchmarks: ~200ms improvement with 1000 menu items.
Big Autocomplete TAXonomy - Use autocomplete form field if taxonomy is bigger than a predefined number of terms.
Imageinfo Cache - Image style pre-generation.
Render Cache - Backport of D8 render caching engine, requires a lot of tuning / experimental.
Display Cache - Weaker version of render_cache, has potential side effects.

Drupal 6 wiki

https://groups.drupal.org/node/187209

Comments

Varnish config?

DamienMcKenna's picture

How about listing things like Varnish & providing a link to a decent config for v2 and v3?

wiki

mikeytown2's picture

feel free to add it in

APC

grape's picture

The easiest performance boost aside from disabling all of those silly modules you don't need is plopping "apc.shm_size = 256M" in your apc.ini.

Although probably not the

erikwebb's picture

Although probably not the usual setup, you should be careful when setting the apc.shm_size to an unnecessarily high value when using PHP w/ FastCGI because each thread uses a separate APC bucket.

FPM

rjbrown99's picture

Unless you use php-fpm, which can share an opcode cache across all workers. It is included with PHP 5.3.3 and above.

add to contrib module section

joseph.olstad's picture

Ctools performance gains:
https://www.drupal.org/node/2397783

i18n:
noteworthy for those making international sites.
i18n version 7.x-1.12 has major performance improvement due to added index on locales_source table. (serious performance gains for that)