Archives: markup

Navigation Timingを使ってパフォーマンス計測(Google アナリティクス)

2011年12月19日 by t32k | コメントは受け付けていません。 | Filed in analytics, javascript, markup

本来のAdvent Calendarとは、12月1日からクリスマスの25日まで、カードに作られた窓を1日に1つずつ開けていくというものです。一方、技術系のAdvent Calendarは、12月1日から25日までの間、毎日違う人が特定のテーマに沿ってブログ記事を書くというものです。もちろん、ここでのテーマは「HTML5」になります。HTML5に関することならなんでもOKです!

HTML5 Advent Calendar 2011 : ATND 

ども、HTML5 Advent Calendar 2011, 19日目担当のt32kでございます。今回もがんばります!

若干、9日目の@jovi0608さんとかぶってますが、気にせずNavigation Timingを実際にどのように利用できるかについて書きたいと思います。

Navigation Timing

Navigation TimingW3C Web Performance Working Groupが策定している仕様の一つで、ページの読み込み時間やネットワークにかかる時間など取得することができる仕様です。2011年12月現在、IE9+, Firefox7+, Chrome6+, Android Browser 4.0+ (When can I use Navigation Timing API?) が対応しています。

取れるタイミングというのは以下のようにいっぱいありますw

  1. navigationStart
  2. unloadEventStart
  3. unloadEventEnd
  4. redirectStart
  5. redirectEnd
  6. fetchStart
  7. domainLookupStart
  8. domainLookupEnd
  9. connectStart
  10. connectEnd
  11. secureConnectionStart
  12. requestStart
  13. responseStart
  14. responseEnd
  15. domLoading
  16. domInteractive
  17. domContentLoadedEventStart
  18. domContentLoadedEventEnd
  19. domComplete
  20. loadEventStart
  21. loadEventEnd

これの何が嬉しいかと言いますと、これまでページのWebパフォーマンスを計測するとなると、BODY要素の始めのほうでnew DateしてgetTimeして、BODY要素の終わりのほうで、またnew DateしてgetTimeして差分を取るのが一般的な計測方法だと思うのですが、それですとサーバー側と接続したりする時間などが考慮されておらず、実際の体感時間とずれた計測結果になります。

むしろ、こういったレイテンシこそ読み込み時間の大半を占める部分で重要になってきます。つまり、Navigation Timingを使えばこのような部分も計測することができ、みんなハッピーということですね。

var timing = window.performance.timing;
var loadTime = timing.loadEventEnd – timing.navigationStart;

こんな感じで、サクっとページの読み込み時間というのが取れます。

参考

Measuring Web Performance

とはいっても、ちょっと僕JavaScriptよく分からないし、取れるタイミングも多くてよく分かんないっす。って方は大丈夫!あきらめないで(誰 ってことで、このNavigation Timingを活用した「サイトの速度」というGoogle アナリティクスのメニューから利用できます。

この機能リリース当初は、下記のようなコードをトラッキングコードに追加する必要ありましたが
_gaq.push(['_trackPageLoadTime']);

現在では、コード追加なしでレポートから確認することできると思います。なかったらコード追加して確認してみてください。

これらの情報は、最初に述べたNavigation Timingに対応しているブラウザに、プラス、Google ツールバーをインストールしたInternet Explorer(9以前)からも情報を取得しています。

こういった情報が分かることで、読み込み時間が長いために離脱率が高いページなど改善の効果測定ができるようになります。

また、「技術」というリンクをクリックすればネットワーク、サーバーに関するタイミング情報も確認することができます。

参考

Measuring Social Interaciton

話は変わって、最近ソーシャルボタンが流行していますね、Twitter, Facebook, Google+などなどたくさんのいいね、シェアボタンがあります。ブログ読んでいると末尾にズラーッと並んだボタンをよく見かけます。あんなにつけて意味あるのかなーっと思ってしまいます。何よりも重いだろうよ。。。ってのが個人的な印象です。

しかし、そうゆうご時世かお仕事でも依頼があったので仕方なく実装したのですが、ちゃんと効果測定したいなと思い、Google アナリティクスで計測してみたいと思います。

_gaq.push(['_trackSocial', network, socialAction, opt_target, opt_pagePath]);

基本となるのはこの_trackSocialという、_trackEventに似たメソッドです。これを利用して、Twitterのつぶやき数や、Facebookのいいね数をGoogle アナリティクス上から確認することができます。

// Facebook いいね
FB.Event.subscribe('edge.create', function(targetUrl) {
 _gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);
});
// Twitter つぶやき
twttr.events.bind('tweet', function(event) {
 if (event) {
 var targetUrl;
 if (event.target && event.target.nodeName == 'IFRAME') {
 targetUrl = extractParamFromUri(event.target.src, 'url');
 }
 _gaq.push(['_trackSocial', 'twitter', 'tweet', targetUrl]);
 }
});

Facebook, Twitterに関しては、上記のコードを計測したいページに記述します。注意としては、iframe形式には対応していないので、公式サイトからいいねなどのウィジェットをダウンロードしてくるときはJavaScript形式にしてください。

<a href="http://b.hatena.ne.jp/" onclick="_gaq.push(['_trackSocial', 'hatena', 'bookmark']);">...

Google+のプラス数は特に何もしなくても勝手に認識してくれます。

そのほかにも、はてなブックマーク、mixiチェックも実装しましたが、ブックマーク、チェック完了時点のイベントが取れない(分からない)ので、単純にonclick時にtrackSocialを飛ばす対応しました。この結果から出る数字というのは実際にブックマークされた数、チェック数ではないので注意してください。ただmixiチェックはmixiデベロッパーサイト、パートナーダッシュボードからCSV形式でいいね数、チェック数、いいね・チェックから流入数などがダウンロード可能なので、そこから確認してもいいかもしれません。

GREEのいいねに関してiframe形式でしかウイジェットが配布されてなかったのでお手上げです :(

実装してデータが集まると、Googleアナリティクスの「ソーシャル」のメニューからサイト内のソーシャルアクション数が確認できます。hatena:bookmark, mixi:checkは実際にブックマークが完了された数、チェックが投稿された数ではないこと考慮しておくにして、このサイトにおいてはFacebookのいいね!が多いねみたいなことが確認できます。

Practice

さて、ソーシャルインタラクションのウイジェットを置いたことで、当初に懸念していたページの読み込み時間はどーなっているでしょうか。

Google 「サイトの速度」で、ウイジェット設置前後の3週間を比較してみると、平均で0.8~1.0秒ほど読み込み時間が増加してしまいました。

Aberdeen Group (PDF)というリサーチ会社が出したレポートによると、一般的に表示スピードが1秒遅くなると、PVは11%、CVは7%、顧客満足度は16%ダウンするといったことが報告されています。またこういったビジネスにおけるWebパフォーマンスの重要性も訴えられています。

実際に、ソーシャルウイジェットを設置したサイトで、上記のような結果が起きたかといと、計測した3週間においては見受けられませんでした。というのもソーシャルウイジェット用にSCRIPT要素を5つくらい読み込んだのですが、BODY要素の最後の方に置いたので読み込みに時間はかかりますがレンダリングに対して余り影響しなかったのではないかと考えています。

とはいえ、利用率から考えてみると、ソーシャルアクション数 / ソーシャルウイジェットを置いたページのPVで算出してみると、0.2~0.01% という低い数値がでました。あんまり使われていないってことですね。。。

読み込み時間と言えば、Googleが読み込み時間をランキングに考慮するとかしないとか(最近まったく聞きませんね…)ありますし、単純に外部からスクリプトを多く読みこむことで、不具合の発生する確率も多くなるかもしれません。

やっぱりこんなもの取り外したい。でも取り外せないということで、単純にブックマークレット形式に変更しました。各ブックマークレットの方法は以下参照で。

現状は各ソーシャルウイジェットを生成するためにSCRIPT要素を読み込んでiframeを生成するパターンなのですが、ブックマークレットですと、投稿する利便性は落ちてしまいますがSCRIPT要素を読む込む必要もなくなるので安心です。非同期で読み込む方法も考えましたが、UIスレッドと非同期で読み込めるだけで読み込み時間自体は変わらないですし、なによりも管理が複雑です。

実際に施策後の経過を確認んしてみると変更前は3秒近くあった読み込み時間が、2秒台になりました。ソーシャルアクションに関しては、「いいね!」のブックマークレットがなくて「シェア」に変更する必要があったり、ソーシャルアクション計測するためのコードは元のiframeを生成するスクリプトに依存するので、それを読みこまなくなったため計測できず、単純にはてな、mixiチェックのようにclick数になり、正確な比較はできませんが、アクション数が激減したということは見受けられませんでした。

このサイトにおいて特にがっつりソーシャルと絡んでいくといった方向性もないので、パフォーマンスは犠牲にせずにこういった最小限のブックマークレットシェアボタンを置くというのが現実解かなと個人的には考えています。

ということで、結構マイナーだと思ってたNavigation Timingですが、Googleアナリティクス入れていれば実務でもガンガン使っていけると思いますんで、パフォーマンス改善に役立てもらえればと思います。

Tags:

html5shim vs html5shiv

2011年12月12日 by t32k | コメントは受け付けていません。 | Filed in javascript, markup

JavaScript Advent Calendar 2011 (オレ標準コース) 12日目の id:t32k です。去年も参加しましたがなんでもありと聞いて今年も懲りずに参加!
Don’t lose any more time. html5shim and html5shiv are exactly the same thing.
はじめに言っておきますが、html5shimもhtml5shivどっちもまったく同じです。違いなんて無いので、こんなことに頭を悩ませる暇があったらさっさとコードでも書いてろ!以上!うんこ(・∀・)!!

そんなこと言っても世の中結果じゃない、過程が大切だと思うんだ先生!ってことで今回は調べてみます。

(続きを読む…)

Tags: ,

Coda.appでjQuery Mobileをコード補完

2011年6月1日 by t32k | コメントは受け付けていません。 | Filed in markup, mobile

どもー全国数十万のCoda.appユーザーの皆さん、t32kでございます。

MacBook AirにCSをインスコするのはちょっと気が引けたので円高もあってCoda.appを最近買いました。なんかいろいろ綺麗でたちまち好きになりました。どうせならこれでjQuery Mobileゴリゴリ書きたいなと思うようになりやんした。

(続きを読む…)

Tags:

マイクロフォーマット ~Webページをより便利にする最新マークアップテクニック~

2009年2月12日 by t32k | コメントは受け付けていません。 | Filed in books, markup

HTML5と言えば、意味的な要素が追加されセマンティックな色合いが強まっていますが、まだまだ足りないですね。だって、「店名」をマークアップするときはどの要素を使えばいいの?「名前」をマークアップするときは?「地名」は?ってな具合に。

かといって、<shop>や<name>というように新しい要素がどんどん作られたらそれもそれで困りますね。そんなこんなでMicroformats(´∀`*)ウフフ 簡単に言えば、新しく要素なんて作らずclass属性やrel属性を使って意味的な部分を補っていこうって考えですかね。

↓詳しくはこの本を読んだら良いと思う。

マイクロフォーマット ~Webページをより便利にする最新マークアップテクニック~ (Web Designing BOOKS) マイクロフォーマット~Webページをより便利にする最新マークアップテクニック~
木達 一仁

毎日コミュニケーションズ 2008-07-23
売り上げランキング : 234040
おすすめ平均

Amazonで詳しく見る by G-Tools

んで、僕もようやく読み終えました(・ω・)

リファレンス本かなと思いきやステップアップ式のガイド本だったのが残念(一応、巻末に仕様リファレンスはある)。そのせいで、例えばhreviewの仕様について知りたかったらまずhreviewの章の部分読んで、事例研究の章を読んで、仕様リファレンス部分を読まなければならず、飛び飛びですごいめんどい。CSSのスタイル指定とかあんまり必要ないんでないかな。

とはいえ、Microformats Wikiを除けば、日本語でコレだけMicroformatsについて書かれてるドキュメントはこれしかないし、実際に使われているMicroformatsの事例など紹介して丁寧に解説されてあるので分かりやすかったかなと思う。

特にYahoo!の事例なんかは、中の人のMicroformatsに対する考えも聞けて面白い。

なぜマイクロフォーマットを採用したのかって? 何よりまず、Yahoo!ではどのスタッフもただウェブに夢中だからだ。ウェブがどんどん繁栄するのを見たいのさ。マイクロフォーマットはウェブを活気づけるのに役立ちそうだし、最終的にはユーザのためにもなるだろうと感じた。ウェブサイトでも組織でも、大規模になるほど制約が出てくることがあるのは確かだけど、裏を返せばその規模の大きさが有利になることもある。マイクロフォーマットのような例では、Yahoo!クラスの規模があれば、その技術が一定のハードルを超えて広まる可能性がある。僕らは光栄にもその役目を果たしたわけで、マイクロフォーマットをの力でウェブが一段とユーザの役に立つようになるのを楽しみにしているんだ。
Nate Koechley

いいですね、米ヤホーはオープンな感じがして、とても好きです。実際にSearchMonekyではhAtom、hCalendar、hCard、hReview、XFNをインデックスしているみたいです。また、Nate Koechleyはこんなことも言ってます↓

ウェブをもっと良い世界にしてくれるものなら、何でも利用した方がいいと思う。それがマイクロフォーマットほど技術的な影響が小さいものなら、使わない手はない。もちろん、状況次第で臨機応変に判断する必要があるけれど、マイクロフォーマットに対応するのは楽勝モノだと思うよ。おまけに、自分たちの努力がウェブ全体の進化にとってプラスとなるかもしれないというボーナスまで付くことになる、。
P378 | マイクロフォーマットの利用価値

事実Microformats、最小限の工数で対応しようと思えばclass属性いじるだけでいいですからね。それによってCSSを変更しなければならないとかないし(名前かぶったらしなきゃいけないけど。。)、古い環境に影響せずにそれに対応するUAにはそれ相応の価値を提供できる。これってProgressive Enhancement的な考え方に通じますね。素敵♪

みんなもMicroformatsでDOしちゃったらいいんだよ( ´∀`)つ

Tags:

マークアップエンジニアってなによ?

2008年1月22日 by t32k | コメントは受け付けていません。 | Filed in blog, markup

この言葉を作った人の会社の募集要項では、

マークアップデザインエンジニア

  • HTML/XHTMLのマークアップ
  • 情報設計および文書構造のデザイン
  • エンタープライズCMSのテンプレート設計・開発
  • CSSの設計およびコーディング
  • JavaScriptのライブラリ設計・開発・実装

以下の技術に関する研究・設計・開発

  • XMLをはじめとする多様なウェブフロントエンド技術全般
  • アクセシビリティ
  • ユーザビリティ
  • 各種オーサリングツールや開発プラットフォーム

[bA] 募集要項より

以上のことすべてできないと名乗っちゃいけないかと言われるとそうではないと思うけど、少なくともこうゆうことができるひとがマークアップエンジニアでしょ?言うてみれば、フロントエンドエンジニアとかデザインエンジニアと呼ばれるひとであって、場合によっちゃインタラクションデザインやインフォメーションアーキテクチャとかの知識も必要なわけであって、マークアップエンジニアはHTMLとCSSだけのコーダーとは別次元の職種だと自分的には理解しているのですが。

なんかそれで、マークアップエンジニアには将来が無いみたいなこと言われると、おかしいだろと、違和感を覚える今日この頃。

Tags: