46
WordPress関数の 処理コストを考えよう 松田直樹

WordPress関数の処理コストを考えよう

Embed Size (px)

Citation preview

Page 1: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

松田直樹

Page 2: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

自己紹介

松田直樹

主な著書(共著)

よくわかるDreamweaverの教科書【CS6対応版】

効率的なサイト制作のためのDreamweaverの教科書【CS5.5対応版】2012年上半期コンピュータ部門

22位

Page 3: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

さて、WordPress の関数、

便利ですよね。

Page 4: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

特に、テンプレートタグ。

bloginfo() wp_title()the_title()

the_category()the_content()

the_excerpt()get_the_term_list() get_post_type()

wp_nav_menu()the_permalink()

have_posts()the_post()get_template_part()

the_tags()

Page 5: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

できるだけ、テンプレートタグ

使いたくなりますよね。

わかります。

Page 6: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

ですが、

Page 7: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

テンプレートタグも、もちろん「PHP」のコード

「処理コスト」がかかることを忘れないように。

Page 8: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

リクエスト

レスポンス 完了

ファイル読み込み レンダリング 表示レイテンシ

Onload

静的ページの場合

リクエスト

レスポンス 完了

ファイル読み込み レンダリング 表示レイテンシ

Onload

PHP処理

動的ページの場合

Page 9: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

リクエスト

レスポンス 完了

ファイル読み込み レンダリング 表示レイテンシ

Onload

静的ページの場合

リクエスト

レスポンス 完了

ファイル読み込み レンダリング 表示レイテンシ

Onload

PHP処理

動的ページの場合

PHP処理

Page 10: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

処理コストとは

•サーバでの処理時間•サーバでの処理による負荷•閲覧者の待ち時間

Page 11: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

要は、

bloginfo()ひとつ実行するたびに

コストは積み重なる、ということ。

Page 12: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

よく

と言われますが、本当?

テンプレートタグを減らして負荷を軽減させる

Page 13: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

処理コストを計測・検証してみた

WordPress関数の処理コストを考えよう

Page 14: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

PEAR::BenchmarkPHPの特定の部分の処理時間を計測できるクラス

Page 15: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

<?phprequire_once('Benchmark/Timer.php');$bench = new Benchmark_Timer();$bench->start();

計測したい処理

$bench->setMarker(‘markername’);$bench->stop();$bench->display();?>

Page 16: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

Page 17: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

wp_enqueue_script()で、script要素を出力してみた

Page 18: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

function scripts_include() {

$path = get_stylesheet_directory_uri(); wp_deregister_script( 'jquery' ); wp_register_script( 'jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js' );

wp_enqueue_script( 'conf', $path.'/js/conf.js', array('jquery')); wp_enqueue_script( 'easing', $path.'/js/jquery.easing.1.3.js', array('jquery')); wp_enqueue_script( 'cookie', $path.'/js/jquery.cookie.js', array('jquery')); wp_enqueue_script( 'fancybox', $path.'/js/jquery.fancybox.pack.js', array('jquery')); wp_enqueue_script( 'transform', $path.'/js/jquery-css-transform.js', array('jquery')); wp_enqueue_script( 'hashchange', $path.'/js/jquery.ba-hashchange.js', array('jquery')); wp_enqueue_script( 'backgroundPosition', $path.'/js/jquery.backgroundPosition.js', array('jquery')); wp_enqueue_script( 'google-maps-api', 'http://maps.google.com/maps/api/js?sensor=false', array(), NULL ); wp_dequeue_script( 'parent-script' ); wp_enqueue_style( 'module', $path.'/css/module.css' ); wp_enqueue_style( 'fancybox', $path.'/css/jquery.fancybox-1.3.4.css' ); wp_dequeue_style( 'parent-style' );

}add_action( 'wp_enqueue_scripts', 'scripts_include', 10 );

functions.php に、以下のコードを追加して計測

Page 19: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

functions.php に、以下のコードを追加して計測

Page 20: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

0.000497sec速い

気になるほどのコストではないけど。* サーバーのスペックや環境によって、数値は異なります

Page 21: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

bloginfo(‘name’)を100回処理してみた

Page 22: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

bloginfo(‘name’) を100回処理してみた

* 20回計測した平均値

Page 23: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

0.014455secまぁまぁ遅い

* サーバーのスペックや環境によって、数値は異なります

Page 24: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

echo “ブログタイトル”を100回処理してみた

じゃ、同じ文字列が出力がされる

Page 25: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

を100回処理してみた

* 20回計測した平均値

echo “ブログタイトル”

Page 26: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

0.000139secすげー速い* サーバーのスペックや環境によって、数値は異なります

100倍速い

Page 27: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

そう、DBを叩いて出力する関数は

まぁまぁ遅いです

Page 28: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

ただし毎回、DBにアクセスするわけではありません。

DB内の主要な値は、サーバのメモリ上にキャッシュされる

CACHE

siteurlblogname

blogdescriptionhome

templatestylesheet

rewrite_rules

Page 29: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

まずは「$wp_object_cache」というグローバル変数に格納される設計

bloginfo()で出力できる値のいくつかは、そのメモリ上の変数を取得します。

CACHE

bloginfo()より高速

Page 30: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

なのになぜ遅めなのか?

Page 31: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

ほとんどのテンプレートタグでは、いくつかの「フィルター」が「フック」

されているから。

Page 32: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

add_filter( $filter, 'wptexturize' );add_filter( $filter, 'convert_chars' );add_filter( $filter, 'esc_html' );

3つのフィルターを処理している

bloginfo()apply_filters('bloginfo', ~);

Page 33: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

general-template.php 488行目

default-filters.php 96行目add_filter( $filter, 'wptexturize' );add_filter( $filter, 'convert_chars' );add_filter( $filter, 'esc_html' );

apply_filters('bloginfo', ~);

* WordPress 3.4.2 の場合

Page 34: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

要するに、

bloginfo()の内々的にも

なんやかんやの処理が行われている

Page 35: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

これらの処理コスト、割りと軽微なものですが、

テンプレートタグを減らして負荷を軽減させる

は本当です。

Page 36: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

決まりきった値の出力は、

テンプレートに静的に記述したほうがパフォーマンスは 上がる。

ちょっと

Page 37: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

チリつもです。

by xJason.Rogersx

静的にすれば、コストはゼロ

Page 38: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

運用フェーズではほとんど変更しないですよね

• 会社名• サイトブランド名• JSファイルのパス• CSSファイルのパス

Page 39: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

<title><?php wp_title(' | ', true, 'right'); ?><?php bloginfo('name'); ?></title>

<title><?php wp_title(' | ', true, 'right'); ?>株式会社まぼろし</title>

Page 40: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

<img src="<?php echo get_template_directory_uri(); ?>/img/header.jpg">

<img src="http://maboroshi.biz/wp-content/theme/img/header.jpg">

Page 41: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

テンプレートの作り方次第では、体感できるほどの処理コストがかかる。

と、いうこと。

Page 42: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

マルチデバイス対応など、低スペック・低速回線への最適化も考慮する昨今。

こういったミニマムチューニングが効いてきますよ。

Page 43: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

このような場合、処理コストを節約できる

•配布するテーマではない•企業サイト・受注案件など、専用性の高いテンプレートである•テンプレートを変更する頻度が低い•アクセス過多による負荷を考慮したい

Page 44: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

もちろんデメリットもあります

•テンプレートの管理性•テンプレートを流用しにくい•プラグインとの相性•親テーマ ⇔ 子テーマ の連携がしにくい•Cacheプラグインで解決

Page 45: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

ということで、テンプレートを作るにおいて処理コストは考えましょう。

Page 46: WordPress関数の処理コストを考えよう

WordPress関数の処理コストを考えよう

ありがとうございました