24
Make Your Site SpEEdy Improving the performance of your ExpressionEngine website Prepared by Ruthie BenDor for the BostonEErs September 2010 Meetup

Make Your Site SpEEdy

Embed Size (px)

DESCRIPTION

How to improve the performance of your ExpressionEngine website. Written by me, with contributions from the awesome attendees at the BostonEErs September 2010 event: http://www.meetup.com/BostonEErs/calendar/14247978/

Citation preview

Page 1: Make Your Site SpEEdy

Make Your Site SpEEdyImproving the performance ofyour ExpressionEngine website

Prepared by Ruthie BenDor for the BostonEErs September 2010 Meetup

Page 2: Make Your Site SpEEdy

Part I: Tools and techniques for

Measuring Performance

Page 3: Make Your Site SpEEdy

Web server

What impacts site speed?

BrowserServer-sidescriptsDatabase

Filesystem

1. Browser rendering time

2. Component transmission time

3. Server-side script execution

123

4

5

4. Filesystem disk accessing time

5. Database query execution time

Page 4: Make Your Site SpEEdy

Web server

What impacts site speed?

BrowserExpressionEngineMySQL

Filesystem

1. Browser rendering time

2. Component transmission time

3. Server-side script execution

123

4

5

4. Filesystem disk accessing time

5. Database query execution time

HTML fragments, CSS files, Javascript

files, images

Page 5: Make Your Site SpEEdy

Page render time and component load time

1

can be measured with YSlow and/or Google Page Speed for Firebug.

(Also useful: Webkit’s Developer Tools.)

2

Page 6: Make Your Site SpEEdy

Server-side script execution

can be measured by enabling EE’s Template Debugging.

3

In EE 1.6.x’s Control Panel:Admin › System Preferences › Output and Debugging Preferences

In EE 2.1’s Control Panel:Admin › System Administration › Output and Debugging

Page 7: Make Your Site SpEEdy

Database queries

can be seen by enabling EE’s output profiler. Note that this doesn’t tell us how long a single query takes to run, but it does show us the full query.

5

In EE 1.6.x’s Control Panel:Admin › System Preferences › Output and Debugging Preferences

In EE 2.1’s Control Panel:Admin › System Administration › Output and Debugging

Page 8: Make Your Site SpEEdy

Part 2: Recommendations for

Improving Performance

Page 9: Make Your Site SpEEdy

The site optimization cycle

Measure performance.

(“Benchmark.”) Identify the biggest (or

easiest-to-fix) bottleneck.

Remove that bottleneck.

Page 10: Make Your Site SpEEdy

Web server

What impacts site speed?

BrowserExpressionEngineMySQL

Filesystem

1. Browser rendering time

2. Component transmission time

3. Server-side script execution

123

4

5

4. Filesystem disk accessing time

5. Database query execution time

HTML fragments, CSS files, Javascript

files, images

Page 11: Make Your Site SpEEdy

Browser rendering time optimizations

1

• Make your Javascript and CSS more efficient, so the browser is able to render (draw) the completed page more quickly.

• For writing faster CSS, check out OOCSS: http://wiki.github.com/stubbornella/oocss/

• For writing faster JavaScript, speed-test snippets using JSPerf: http://jsperf.com/

Page 12: Make Your Site SpEEdy

Component transmission time optimizations

2

• Minify and concatenate all JavaScript into a single file, and minify and concatenate all CSS into a single file. • If you keep your Javascript and CSS in EE templates, concatenate these

assets using this technique: http://easy-reader.net/archives/2010/07/11/template-based-asset-munging-in-expressionengine

• To concatenate and minify JS/CSS in EE templates, try SL Combinator http://experienceinternet.co.uk/software/sl-combinator/docs/, which uses an old version of Minify http://code.google.com/p/minify/

• If you keep your JS and CSS assets outside of EE, use Minify http://code.google.com/p/minify/

Page 13: Make Your Site SpEEdy

Component transmission time optimizations (con’t)

2

• Serve optimized images.• Prevent content maintainers from uploading content images that are too

large by using http://www.lumis.com/page/imgsizer/

• Run all site image assets through http://smush.it/ to reduce filesize as much as possible.

• Where possible, combine (aka sprite) site image assets.

• Enable GZIP compression in EE.

In EE 1.6.x’s Control Panel:Admin › System Preferences › Output and Debugging Preferences

In EE 2.1’s Control Panel:Admin › System Administration › Output and Debugging

Page 14: Make Your Site SpEEdy

Server-side script execution optimizations

3

• Cache individual tags.• Tag caches are time-based, set in minutes. Use on any EE tag like so:

{exp:some:tag cache="yes" refresh="30"}

• Cache entire templates.• Enabled on a per-template basis. In EE1, look in Templates > Preferences. In EE2,

look in Design > Templates > Template Preferences.

• Template caches are time-based, mostly - certain events will clear the cache: http://expressionengine.com/user_guide/general/caching.html#template_caching

• Template caching supercedes tag caching, so if you’re caching the entire template, there’s no reason to also cache individual tags.

• A cached template in EE is still heavier, performance-wise, than a 100% static page served from outside EE.

Page 15: Make Your Site SpEEdy

Server-side script execution optimizations (con’t)

3

• Where possible, use Global Variables and Snippets instead of embedded templates.• Snippets can contain EE tags, while Global Variables can contain only HTML.

• Snippets are EE2-only.

• Why Snippets are faster than embedded templates: http://www.meetup.com/BostonEErs/messages/boards/thread/9783637

• Where possible, avoid nesting embedded templates.

Page 16: Make Your Site SpEEdy

Filesystem optimizations

4

• Don’t save templates as flat files.• Why? “Saving templates as files can marginally increase disk 1/o as teach

template must be retrieved from disk in addition to the standard database query responsible for managing your template’s meta data (access, PHP parsing, template type, etc.)” - http://expressionengine.com/user_guide/general/handling_extreme_traffic.html

• But flat files are really convenient during development!• Suggestion: work with templates as flat files during development. At site

launch, sync all templates back to the database, and set all templates to no longer save as flat files. How?

• In EE2, use the built-in Synchronize Templates tool under Design > Templates.

• In EE1, either sync manually, or use the free DC Template Manager module: http://devot-ee.com/add-ons/dc-template-manager/

Page 17: Make Your Site SpEEdy

Database query optimizations

5

• Set the database connection to non-persistent.

• In EE2, set Persistent Database Connection to No at Admin › System Administration › Database Settings

• In EE1, set Database Connection Type to Non Persistent at Admin › System Preferences › Database Settings

• Reduce the number of queries each page calls.• http://expressionengine.com/wiki/Reduce_Queries/

• Cache frequently used queries.

• In EE2, set Enable SQL Query Caching to Yes at Admin › System Administration › Database Settings

• In EE1, set Enable SQL Query Caching to Yes at Admin › System Preferences › Database Settings

Page 18: Make Your Site SpEEdy

Database query optimizations (con’t)

5

• Enable dynamic channel query caching.• Only enable if your site doesn’t use future, expiring, or random entries.

• In EE1, set Cache Dynamic Channel Queries? to Yes at Admin › Weblog Administration › Global Weblog Preferences.

• In EE2, set Cache Dynamic Channel Queries? to Yes at Admin › Channel Administration › Global Preferences.

• Disable unused parts of {exp:channel:entries} queries.• In EE1, six things can be disabled: {exp:channel:entries disable="categories|

category_fields|custom_fields|member_data|pagination|trackbacks"}

• In EE2, trackbacks have been removed, so five things can be disabled:{exp:channel:entries disable="categories|category_fields|custom_fields|member_data|pagination"}

Page 19: Make Your Site SpEEdy

Database query optimizations (con’t)

5

• Repair and optimize EE’s MySQL tables.• In EE1, look under Admin › Utilities › SQL Manager › Manage Database Tables.

• In EE2, look under Tools › Data › SQL Manager › Manage Database Tables.

• Disable template tracking.• In EE1, look under Admin › System Preferences › Tracking Preferences.

• In EE2, these options must be set manually in config.php.

Page 20: Make Your Site SpEEdy

Part 3:

More Resources

Page 22: Make Your Site SpEEdy

Books

• High Performance Web Sites, by Steve Souders: http://www.amazon.com/gp/product/0596529309

• Even Faster Web Sites, also by Steve Souders: http://www.amazon.com/gp/product/0596522304

Page 23: Make Your Site SpEEdy

Nearby Groups

• Boston Web Performance Group: http://www.meetup.com/Web-Performance-Boston/

Page 24: Make Your Site SpEEdy

Thanks!

http://twitter.com/BostonEErs

http://BostonEErs.org