Upload
naoki-matsuda
View
3.380
Download
0
Embed Size (px)
Citation preview
WordPress関数の処理コストを考えよう
松田直樹
WordPress関数の処理コストを考えよう
自己紹介
松田直樹
主な著書(共著)
よくわかるDreamweaverの教科書【CS6対応版】
効率的なサイト制作のためのDreamweaverの教科書【CS5.5対応版】2012年上半期コンピュータ部門
22位
WordPress関数の処理コストを考えよう
さて、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()
WordPress関数の処理コストを考えよう
できるだけ、テンプレートタグ
使いたくなりますよね。
わかります。
WordPress関数の処理コストを考えよう
ですが、
WordPress関数の処理コストを考えよう
テンプレートタグも、もちろん「PHP」のコード
「処理コスト」がかかることを忘れないように。
WordPress関数の処理コストを考えよう
リクエスト
レスポンス 完了
ファイル読み込み レンダリング 表示レイテンシ
Onload
静的ページの場合
リクエスト
レスポンス 完了
ファイル読み込み レンダリング 表示レイテンシ
Onload
PHP処理
動的ページの場合
WordPress関数の処理コストを考えよう
リクエスト
レスポンス 完了
ファイル読み込み レンダリング 表示レイテンシ
Onload
静的ページの場合
リクエスト
レスポンス 完了
ファイル読み込み レンダリング 表示レイテンシ
Onload
PHP処理
動的ページの場合
PHP処理
WordPress関数の処理コストを考えよう
処理コストとは
•サーバでの処理時間•サーバでの処理による負荷•閲覧者の待ち時間
WordPress関数の処理コストを考えよう
要は、
bloginfo()ひとつ実行するたびに
コストは積み重なる、ということ。
WordPress関数の処理コストを考えよう
よく
と言われますが、本当?
テンプレートタグを減らして負荷を軽減させる
WordPress関数の処理コストを考えよう
処理コストを計測・検証してみた
WordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えよう
PEAR::BenchmarkPHPの特定の部分の処理時間を計測できるクラス
WordPress関数の処理コストを考えよう
<?phprequire_once('Benchmark/Timer.php');$bench = new Benchmark_Timer();$bench->start();
計測したい処理
$bench->setMarker(‘markername’);$bench->stop();$bench->display();?>
WordPress関数の処理コストを考えよう
WordPress関数の処理コストを考えよう
wp_enqueue_script()で、script要素を出力してみた
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 に、以下のコードを追加して計測
WordPress関数の処理コストを考えよう
functions.php に、以下のコードを追加して計測
WordPress関数の処理コストを考えよう
0.000497sec速い
気になるほどのコストではないけど。* サーバーのスペックや環境によって、数値は異なります
WordPress関数の処理コストを考えよう
bloginfo(‘name’)を100回処理してみた
WordPress関数の処理コストを考えよう
bloginfo(‘name’) を100回処理してみた
* 20回計測した平均値
WordPress関数の処理コストを考えよう
0.014455secまぁまぁ遅い
* サーバーのスペックや環境によって、数値は異なります
WordPress関数の処理コストを考えよう
echo “ブログタイトル”を100回処理してみた
じゃ、同じ文字列が出力がされる
WordPress関数の処理コストを考えよう
を100回処理してみた
* 20回計測した平均値
echo “ブログタイトル”
WordPress関数の処理コストを考えよう
0.000139secすげー速い* サーバーのスペックや環境によって、数値は異なります
100倍速い
WordPress関数の処理コストを考えよう
そう、DBを叩いて出力する関数は
まぁまぁ遅いです
WordPress関数の処理コストを考えよう
ただし毎回、DBにアクセスするわけではありません。
DB内の主要な値は、サーバのメモリ上にキャッシュされる
CACHE
siteurlblogname
blogdescriptionhome
templatestylesheet
rewrite_rules
WordPress関数の処理コストを考えよう
まずは「$wp_object_cache」というグローバル変数に格納される設計
bloginfo()で出力できる値のいくつかは、そのメモリ上の変数を取得します。
CACHE
bloginfo()より高速
WordPress関数の処理コストを考えよう
なのになぜ遅めなのか?
WordPress関数の処理コストを考えよう
ほとんどのテンプレートタグでは、いくつかの「フィルター」が「フック」
されているから。
WordPress関数の処理コストを考えよう
add_filter( $filter, 'wptexturize' );add_filter( $filter, 'convert_chars' );add_filter( $filter, 'esc_html' );
3つのフィルターを処理している
bloginfo()apply_filters('bloginfo', ~);
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 の場合
WordPress関数の処理コストを考えよう
要するに、
bloginfo()の内々的にも
なんやかんやの処理が行われている
WordPress関数の処理コストを考えよう
これらの処理コスト、割りと軽微なものですが、
テンプレートタグを減らして負荷を軽減させる
は本当です。
WordPress関数の処理コストを考えよう
決まりきった値の出力は、
テンプレートに静的に記述したほうがパフォーマンスは 上がる。
ちょっと
WordPress関数の処理コストを考えよう
チリつもです。
by xJason.Rogersx
静的にすれば、コストはゼロ
WordPress関数の処理コストを考えよう
運用フェーズではほとんど変更しないですよね
• 会社名• サイトブランド名• JSファイルのパス• CSSファイルのパス
WordPress関数の処理コストを考えよう
<title><?php wp_title(' | ', true, 'right'); ?><?php bloginfo('name'); ?></title>
<title><?php wp_title(' | ', true, 'right'); ?>株式会社まぼろし</title>
WordPress関数の処理コストを考えよう
<img src="<?php echo get_template_directory_uri(); ?>/img/header.jpg">
<img src="http://maboroshi.biz/wp-content/theme/img/header.jpg">
WordPress関数の処理コストを考えよう
テンプレートの作り方次第では、体感できるほどの処理コストがかかる。
と、いうこと。
WordPress関数の処理コストを考えよう
マルチデバイス対応など、低スペック・低速回線への最適化も考慮する昨今。
こういったミニマムチューニングが効いてきますよ。
WordPress関数の処理コストを考えよう
このような場合、処理コストを節約できる
•配布するテーマではない•企業サイト・受注案件など、専用性の高いテンプレートである•テンプレートを変更する頻度が低い•アクセス過多による負荷を考慮したい
WordPress関数の処理コストを考えよう
もちろんデメリットもあります
•テンプレートの管理性•テンプレートを流用しにくい•プラグインとの相性•親テーマ ⇔ 子テーマ の連携がしにくい•Cacheプラグインで解決
WordPress関数の処理コストを考えよう
ということで、テンプレートを作るにおいて処理コストは考えましょう。
WordPress関数の処理コストを考えよう
ありがとうございました