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

3,693
-1

Published on

Published in: Design

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

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

×