wordcamp la 2014- writing code that scales

30
Writing Code That Scales by Dave Jesch LA WordCamp - September 6, 2014

Upload: spectromtechcom

Post on 18-Jun-2015

74 views

Category:

Technology


1 download

DESCRIPTION

This presentation is for both theme and plugin developers. Dave Jesch at SpectrOMTech.com shares code organization techniques for easy market expansion and For other related presentations such as PHP Optimization, please visit http://SpectrOMTech.com/presentations/wcla2014/

TRANSCRIPT

Page 1: WordCamp LA 2014-  Writing Code that Scales

Writing Code That Scales

by Dave Jesch

LA WordCamp - September 6, 2014

Page 2: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Write a PluginPopularity Unrecognizable Code

Page 3: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Scalability: Think Big, Focus Small.

Page 4: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

There will be code.

Warning:

Page 5: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

http://SpectrOMTech.com/presentations/wcla2014/

Follow Slides:

Page 6: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

➔ Web Architecture

OOP

➔ Everything eCommerce

➔ Custom Plugins

Dave Jesch, Lifetime Geek & CTO @ .com

Scalability

Page 7: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Procedural Object Oriented (est. 1990’s)(est. 1800’s)

Page 8: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Big Take-Away: Only call in the code you need.

Page 9: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

1. Best Practices 2. Code Organization3. Code Techniques

Today’s Goals:

Page 10: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

1. Best Practices

Page 11: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Coding Standards

● WordPress Coding Standardshttp://codex.wordpress.org/WordPress_Coding_Standards

o Indentation

o Placement of Braces

o Class / Function / Variable Naming

Page 12: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Data Handling

● Validate All Inputhttp://codex.wordpress.org/Data_Validation

● Escape Output● Escape Data in SQL Queries

http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

Page 13: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

2. Code Organization

Page 14: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

1. Admin Only

2. Front-end Only

3. Common

Separate Code into Logical Areas

Page 15: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Organization● Main Plugin File plugin_directory/my_plugin.php

● Admin Codeplugin_directory/include/admin.php

● Front-end code plugin_directory/include/frontend.php

● Common Codeplugin_directory/include/some_code.php

plugin_directory/include/more_code.php

● Assets plugin_directory/assets/css/plugin.css

plugin_directory/assets/js/plugin.js

plugin_directory/assets/images/logo.png

Page 16: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Minimize Code Usage

● Test for Front-end vs. Admin page request

● Register scripts/styles; don’t enqueue until you need to

● Separate out install/uninstall code

● Separate out Cron code

Page 17: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Determining Page Request

● is_admin()

● if (defined('DOING_AJAX') && DOING_AJAX)● if (defined('DOING_CRON') && DOING_CRON)

● Understand WordPress’ Initialization Sequencehttp://codex.wordpress.org/Plugin_API/Action_Reference

Page 18: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

3. Code Techniques

Page 19: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (1 of 8)

In main plugin file:

define('PLUGIN_FILE', __FILE__); define('PLUGIN_DIR', plugin_dir_path(PLUGIN_FILE)); define('PLUGIN_INCLUDE', PLUGIN_DIR . 'include/'); define('PLUGIN_ASSETS', PLUGIN_DIR . 'assets/'); define('PLUGIN_ASSETS_URL', plugin_dir_url(PLUGIN_FILE) . 'assets/' define('PLUGIN_VERSION', '1.0');

Page 20: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (2 of 8)

Check for Plugin Activation:

register_activation_hook(PLUGIN_FILE, 'plugin_activation');

function plugin_activation(){

require_once(PLUGIN_INCLUDE . 'activate.php');}

Page 21: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (3 of 8)

Load code appropriate for page request:

if (defined(DOING_CRON) && DOING_CRON)require_once(PLUGIN_INCLUDE . 'cron_code.php');

else if (is_admin())require_once(PLUGIN_INCLUDE . 'admin.php');

elserequire_once(PLUGIN_INCLUDE . 'frontend.php');

Page 22: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (4 of 8)admin.php:add_action('admin_init', 'plugin_initialize');function plugin_initialize(){

add_menu_page('title', 'menu title', 'Administrator', 'plugin-slug', 'plugin_menu_page');}

function plugin_menu_page(){

include(PLUGIN_INCLUDE . 'plugin_page_contents.php');}

include(PLUGIN_INCLUDE . 'some_code.php');

Page 23: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (5 of 8)frontend.php:add_action('wp_enqueue_scripts', 'plugin_register_script')function plugin_register_script(){

wp_register_script('plugin_javascript', PLUGIN_ASSETS . 'js/javascript.js',array('jquery'), PLUGIN_VERSION, TRUE);}add_shortcode('sample_shortcode', 'plugin_shortcode')function plugin_shortcode($attr){

wp_enqueue_script('plugin_javascript');return ('<img src="' . PLUGIN_ASSETS_URL .

'images/plugin_image.png" width="16" height="16" />');}

include(PLUGIN_INCLUDE . 'some_code.php');

Page 24: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (6 of 8)some_code.php:

add_action('widget_init', 'plugin_register_widgets')function plugin_register_widgets(){

include(PLUGIN_INCLUDE . 'widget.php');register_widget('PluginWidget');

}

Page 25: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (7 of 8)widget.php:class PluginWidget extends WP_Widget{

public function widget(){

// display widget contents}public function form(){

include(PLUGIN_INCLUDE . 'widget_form.php');}public function update(){

include(PLUGIN_INCLUDE . 'widget_update.php');}

}

Page 26: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Sample Techniques (8 of 8)Use Transients When Appropriate:

// get data from transientif (false === ($menu = get_transient('main_nav_menu'))) { // nothing in transient, generate menu $args = array(..., 'echo' => 0); $menu = wp_nav_menu($args); // save data from menu in transient set_transient('main_nav_menu', $menu, 86400);}echo $menu;

Page 27: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Only call in the code you need.

Page 28: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Scalability Achieved!

1. Organize Your Code2. Load Only What’s Needed3. Use Your Actions4. Always Learn More

Page 29: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

Connect with us at [email protected]

Live as if you were to die tomorrow. Learn as if you were to live forever. ~ Mahatma Gandhi

Learning more about...

OOP in

Page 30: WordCamp LA 2014-  Writing Code that Scales

© 2014 SpectrOMtech.com. All Rights Reserved.

More ReferencesPHP Optimization Presentation OC WordCamp:

http://wordpress.tv/2014/06/26/dave-jesch-php-optimization-getting-the-most-out-of-your-php-code/

http://www.slideshare.net/djesch/php-optimization-35545593