SlideShare a Scribd company logo
1 of 100
Download to read offline
モバイルフロントエンド最適化
基礎編 : 2012




       ネットビジネス総合事業本部
       マークアップエンジニア 石本 光司
       2012.11.10 @Webridge Meeting SP12 featuring Frontrend
@t32k
Webパフォーマンス最適化のためのコーディング手法                         心理学から考えるWebパフォーマンス




                       デザインから考えるハイパフォーマンスWebサイト
t32k.github.com/speed/
今日の流れ
- あなたは何をされていますか?

- どちらが遅いのでしょうか?

- 私たちは何をすべきでしょうか?

- まとめ
あなたは
何をされていますか?
つまり、あなたは?




front-end
back-end
つまり、あなたは?




front-end
back-end
僕は、
フロントエンジニアだ!
高速サイトのためのベストプラクティス
                         by Yahoo! Developer Network




1. HTTP リクエストを減らす                               8. JS/CSSファイルを外部化する

2. CDNを使用する                                     9. DNSルックアップを減らす

3. ブラウザーキャッシュを有効にする                             10. JS/CSSを縮小化する

4. Gzipを有効にする                                   11. リダイレクトを避ける

5. スタイルシートは上部に設置                                12. 重複スクリプトを削除する

6. スクリプトは下部に設置                                  13. ETagを設定する

7. CSS Expressionsは避ける                          14. Ajaxをキャッシュ可能にする
高い
効果
低い




             for front-end engineer
     難しい                    易しい
           難易度
高い
                                        1
               2
      3
                         4                          5
                                                6
                                                        7
                                            8
効果




                                    9
                             10
                   11
                                                            12
                        13
低い




          14
                                  for front-end engineer
     難しい                                                易しい
                              難易度
高い
                                        1
               2
      3
                         4                          5
                                                6
                                                        7
                                            8
効果




                                    9
                             10
                   11
                                                            12
                        13
低い




          14
                                  for front-end engineer
     難しい                                                易しい
                              難易度
フロントエンドタスク

1. HTTP リクエストを減らす

5. スタイルシートは上部に設置

6. スクリプトは下部に設置

7. CSS Expressionsは避ける

8. JS/CSSファイルを外部化する

-------------------------

9. DNSルックアップを減らす

12. 重複スクリプトを削除する
フロントエンドタスク

1. HTTP リクエストを減らす

5. スタイルシートは上部に設置

6. スクリプトは下部に設置

7. CSS Expressionsは避ける

8. JS/CSSファイルを外部化する

-------------------------

9. DNSルックアップを減らす

12. 重複スクリプトを削除する
developers.google.com/speed/pagespeed/insights
バックエンドタスク

2. CDNを使用する

3. ブラウザーキャッシュを有効にする

4. Gzipを有効にする

-----------------------------

10. JS/CSSを縮小化する

11. リダイレクトを避ける

13. ETagを設定する

14. Ajaxをキャッシュ可能にする
バックエンドタスク

2. CDNを使用する

3. ブラウザーキャッシュを有効にする

4. Gzipを有効にする

-----------------------------

10. JS/CSSを縮小化する

11. リダイレクトを避ける

13. ETagを設定する

14. Ajaxをキャッシュ可能にする
PageSpeed Score
                  90+
どちらが遅いのでしょうか?
ネットワーク
  vs.
ハードウェア
今後10年間でインターネットの
帯域幅速度は57倍になると思
われているが、コンピューターの
処理能力は100倍以上になるだ
ろう。
      モバイルサイト vs. アプリ: 来るべき戦略の転換 ‒ U-Site
ネットワークは、
 重いのよ!!
帯域幅別のページの読み込み速度
       3,500


       3,000


       2,500
(ms)




       2,000


       1,500


       1,000



                                                             ps
                s




                             s




                                                                      s


                                                                              s

                                                                                    ps
                     s




                                     s


                                             s


                                                      s
               bp




                           bp




                                                                     bp


                                                                              bp
                     bp




                                    bp


                                            bp


                                                    bp


                                                             b




                                                                                   Mb
                                                          7M
               1M




                          3M




                                                                   8M


                                                                             9M
                    2M




                                  4M


                                          5M


                                                  6M




                                                                                   10
                     More Bandwidth Doesn’t Matter (Much) « Mike's Lookout
なんで?
Chrome開発者ツール:ネットワークパネル
HTTPリクエストの中身



サーバー




クライアント
HTTPリクエストの中身



サーバー



                ISP




         DNSルックアップ

クライアント
HTTPリクエストの中身



サーバー



                ISP




         DNSルックアップ

クライアント

            DNS Lookup
HTTPリクエストの中身



サーバー



                ISP




         DNSルックアップ    最初の接続

クライアント

            DNS Lookup
HTTPリクエストの中身

                          接続の確立




サーバー



                ISP




         DNSルックアップ    最初の接続

クライアント

            DNS Lookup
HTTPリクエストの中身

                          接続の確立




サーバー



                ISP




         DNSルックアップ    最初の接続

クライアント

            DNS Lookup Connecting
HTTPリクエストの中身

                          接続の確立




サーバー



                ISP




         DNSルックアップ    最初の接続   最初のHTTPリクエスト

クライアント

            DNS Lookup Connecting
HTTPリクエストの中身

                          接続の確立          最初のデータ送信




サーバー



                ISP




         DNSルックアップ    最初の接続   最初のHTTPリクエスト    最初のデータ受信

クライアント

            DNS Lookup Connecting
HTTPリクエストの中身

                          接続の確立          最初のデータ送信




サーバー



                ISP




         DNSルックアップ    最初の接続   最初のHTTPリクエスト        最初のデータ受信

クライアント

            DNS Lookup Connecting       Waiting
HTTPリクエストの中身

                          接続の確立          最初のデータ送信     最後のデータ送信




サーバー



                ISP




         DNSルックアップ    最初の接続   最初のHTTPリクエスト        最初のデータ受信   最後のデータ受信

クライアント

            DNS Lookup Connecting       Waiting
HTTPリクエストの中身

                          接続の確立          最初のデータ送信     最後のデータ送信




サーバー



                ISP




         DNSルックアップ    最初の接続   最初のHTTPリクエスト        最初のデータ受信    最後のデータ受信

クライアント

            DNS Lookup Connecting       Waiting        Receiving
HTTPリクエストの中身

                          接続の確立          最初のデータ送信     最後のデータ送信




サーバー



                ISP           RTT


         DNSルックアップ    最初の接続   最初のHTTPリクエスト        最初のデータ受信    最後のデータ受信

クライアント

            DNS Lookup Connecting       Waiting        Receiving
HTTPリクエストの中身

                          接続の確立          最初のデータ送信     最後のデータ送信




サーバー



                ISP           RTT
                                                       DL

         DNSルックアップ    最初の接続   最初のHTTPリクエスト        最初のデータ受信    最後のデータ受信

クライアント

            DNS Lookup Connecting       Waiting        Receiving
DNS Lookup: DNSの名前解決

Connecting: TCPコネクション確立に要する時間

   Blocking: ブラウザーキューからネットワークに接続するまでの時間

   Sending: データのリクエストをサーバーに送信するのに要する時間

   Waiting: レスポンスの待ち時間

  Receiving: レスポンスボディをダウンロードするのに要する時間
RTT   ラウンドトリップタイム

DL    ペイロードサイズ
私たちは
何をすべきでしょうか?
RTT   ラウンドトリップタイム
RTT   ラウンドトリップタイム

      CSS Sprite
Requests 30 vs. 1 (CSS Sprite)
Requests 30 vs. 1 (CSS Sprite)
spritegen.website-performance.org
No Retina!

spritegen.website-performance.org
めんどくさい...
知ってる?
compass-style.org
Command line




       t32k at MacBookPro in ~
       $ gem install compass
       $ compass create my_project
       $ cd /my_project
       $ compass watch
Command line




       t32k at MacBookPro in ~
       $ gem install compass
       $ compass create my_project
       $ cd /my_project
       $ compass watch
Sass + compass




  @import "compass";
  @import "/sprites/category/*.png";
  @include all-category-sprites;
CSS
 .category-sprite, .category-chat, .category-
 fav, .category-home, .category-love, .category-
 mind, .category-new, .category-nightlife, .category-work
 { background: url(/sprites/category-s87c70fb891.png) no-
 repeat; }

 .category-chat { background-position: 0 -168px; }
 .category-fav { background-position: 0 -42px; }
 .category-home { background-position: 0 -294px; }
 .category-love { background-position: 0 -252px; }
 .category-mind { background-position: 0 -84px; }
 .category-new { background-position: 0 -210px; }
 .category-nightlife { background-position: 0 0; }
 .category-work { background-position: 0 -126px; }
CSS
 .category-sprite, .category-chat, .category-
 fav, .category-home, .category-love, .category-
 mind, .category-new, .category-nightlife, .category-work
 { background: url(/sprites/category-s87c70fb891.png) no-
 repeat; }

 .category-chat { background-position: 0 -168px; }
 .category-fav { background-position: 0 -42px; }
 .category-home { background-position: 0 -294px; }
 .category-love { background-position: 0 -252px; }
 .category-mind { background-position: 0 -84px; }
 .category-new { background-position: 0 -210px; }
 .category-nightlife { background-position: 0 0; }
 .category-work { background-position: 0 -126px; }
@mixin


  // For Retina @2x
  @mixin sprites($map, $map-item, $isCommon:false) {
     @if $isCommon {
        display: inline-block;
        background-image: sprite-url($map);
        background-repeat: no-repeat;
        background-size: (image-width(sprite-path($map)) / 2) (image-
  height(sprite-path($map)) / 2);
     } @else {
        $pos-y: round(nth(sprite-position($map, $map-item), 2) / 2);
        width: image-width(sprite-file($map, $map-item)) / 2;
        height: image-height(sprite-file($map, $map-item)) / 2;
        background-position: 0 $pos-y;
     }
  }
Usage




  $sprites-category: sprite-map("sprites/category/*.png");
  .common-property {
     @include sprites($sprites-category, foo, true);
  }
  .indivisual-property-fav {
     @include sprites($sprites-category, fav, false);
  }
  .indivisual-property-chat {
     @include sprites($sprites-category, chat, false);
  }
CSS

  .common-property {
    display: inline-block;
    background-image: url('/images/sprites/category-s13fa409ec6.png');
    background-repeat: no-repeat;
    background-size: 21px 168px;
  }

  .indivisual-property-fav {
    width: 21px;
    height: 21px;
    background-position: 0 -21px;
  }

  .indivisual-property-chat {
    width: 21px;
    height: 21px;
    background-position: 0 -84px;
  }
• 画像をPs/Fwで並べる
• 画像をPs/Fwで並べる

• background-positionを測る
• 画像をPs/Fwで並べる

• background-positionを測る

• コードに反映する
• 画像をPs/Fwで並べる

• background-positionを測る

• コードに反映する

 /(^o^)\オワタ
• 画像ディレクトリに出し入れするだけ
• 画像ディレクトリに出し入れするだけ

   (´∀`)つ ミ
DL   ペイロードサイズ
DL   ペイロードサイズ

     Gzip
github.com/h5bp/html5-boilerplate/blob/v4.0.0/doc/htaccess.md
圧縮効率を最大化する
Don’t
Repeat
Yourself
CSS



      .foo {
        -webkit-border-radius: 5px;
        -moz-border-radius: 5px;
        -ms-border-radius: 5px;
        -o-border-radius: 5px;
        border-radius: 5px;
      }
F****** CSS
知ってる?
Sass + compass




      @import "compass";
      .foo {
        @include border-radius(5px);
      }
Output CSS



     .foo {
       -webkit-border-radius: 5px;
       -moz-border-radius: 5px;
       -ms-border-radius: 5px;
       -o-border-radius: 5px;
       border-radius: 5px;
     }
F****** CSS
t32k.github.com/speed/articles/gzip.html
コードの一貫性を保つ
CSS
      .foo {                          .foo {
        -webkit-border-radius: 1px;     -ms-border-radius: 1px;
        -moz-border-radius: 1px;        -webkit-border-radius: 1px;
        -ms-border-radius: 1px;         -moz-border-radius: 1px;
        -o-border-radius: 1px;          -o-border-radius: 1px;
        border-radius: 1px;             border-radius: 1px;
      }                               }
      .bar {                          .bar {
        -webkit-border-radius: 3px;     -moz-border-radius: 3px;
        -moz-border-radius: 3px;        -ms-border-radius: 3px;
        -ms-border-radius: 3px;         -o-border-radius: 3px;
        -o-border-radius: 3px;          -webkit-border-radius: 3px;
        border-radius: 3px;             border-radius: 3px;
      }                               }
      .baz {                          .baz {
        -webkit-border-radius: 5px;     -o-border-radius: 5px;
        -moz-border-radius: 5px;        -webkit-border-radius: 5px;
        -ms-border-radius: 5px;         -ms-border-radius: 5px;
        -o-border-radius: 5px;          -moz-border-radius: 5px;
        border-radius: 5px;             border-radius: 5px;
      }                               }
Uncompressed:
    .foo {                          .foo {
      -webkit-border-radius: 1px;     -ms-border-radius: 1px;
      -moz-border-radius: 1px;        -webkit-border-radius: 1px;
      -ms-border-radius: 1px;         -moz-border-radius: 1px;
      -o-border-radius: 1px;          -o-border-radius: 1px;
      border-radius: 1px;             border-radius: 1px;
    }                               }




                  416B
    .bar {                          .bar {
      -webkit-border-radius: 3px;     -moz-border-radius: 3px;
      -moz-border-radius: 3px;        -ms-border-radius: 3px;
      -ms-border-radius: 3px;         -o-border-radius: 3px;
      -o-border-radius: 3px;          -webkit-border-radius: 3px;
      border-radius: 3px;             border-radius: 3px;
    }                               }
    .baz {                          .baz {
      -webkit-border-radius: 5px;     -o-border-radius: 5px;
      -moz-border-radius: 5px;        -webkit-border-radius: 5px;
      -ms-border-radius: 5px;         -ms-border-radius: 5px;
      -o-border-radius: 5px;          -moz-border-radius: 5px;
      border-radius: 5px;             border-radius: 5px;
    }                               }
Compressed:
    .foo {                          .foo {
      -webkit-border-radius: 1px;     -ms-border-radius: 1px;
      -moz-border-radius: 1px;        -webkit-border-radius: 1px;
      -ms-border-radius: 1px;         -moz-border-radius: 1px;
      -o-border-radius: 1px;          -o-border-radius: 1px;
      border-radius: 1px;             border-radius: 1px;
    }                               }




      122B 130B
    .bar {                          .bar {
      -webkit-border-radius: 3px;     -moz-border-radius: 3px;
      -moz-border-radius: 3px;        -ms-border-radius: 3px;
      -ms-border-radius: 3px;         -o-border-radius: 3px;
      -o-border-radius: 3px;          -webkit-border-radius: 3px;
      border-radius: 3px;             border-radius: 3px;
    }                               }
    .baz {                          .baz {
      -webkit-border-radius: 5px;     -o-border-radius: 5px;
      -moz-border-radius: 5px;        -webkit-border-radius: 5px;
      -ms-border-radius: 5px;         -ms-border-radius: 5px;
      -o-border-radius: 5px;          -moz-border-radius: 5px;
      border-radius: 5px;             border-radius: 5px;
    }                               }
CSS
      .foo {                          .foo {
        -webkit-border-radius: 1px;     -ms-border-radius: 1px;
        -moz-border-radius: 1px;        -webkit-border-radius: 1px;
        -ms-border-radius: 1px;         -moz-border-radius: 1px;
        -o-border-radius: 1px;          -o-border-radius: 1px;
        border-radius: 1px;             border-radius: 1px;
      }                               }




        -71% -69%
      .bar {                          .bar {
        -webkit-border-radius: 3px;     -moz-border-radius: 3px;
        -moz-border-radius: 3px;        -ms-border-radius: 3px;
        -ms-border-radius: 3px;         -o-border-radius: 3px;
        -o-border-radius: 3px;          -webkit-border-radius: 3px;
        border-radius: 3px;             border-radius: 3px;
      }                               }
      .baz {                          .baz {
        -webkit-border-radius: 5px;     -o-border-radius: 5px;
        -moz-border-radius: 5px;        -webkit-border-radius: 5px;
        -ms-border-radius: 5px;         -ms-border-radius: 5px;
        -o-border-radius: 5px;          -moz-border-radius: 5px;
        border-radius: 5px;             border-radius: 5px;
      }                               }
csscomb.com
Googleの検索結果ページでは、
HTML属性をアルファベット順に
記述した場合、gzip後のサイズが

1.5%削減することができた。
      圧縮を有効にする - Make the Web Faster ̶ Google Developers
神は細部に宿る
 ― Ludwig Mies van der Rohe
そんなに
心配しすぎない
まとめ
$ 私たちは何をすべきでしょうか?
$ 私たちは何をすべきでしょうか?

>> フロントエンドに着目しなさい
$ 私たちは何をすべきでしょうか?

>> フロントエンドに着目しなさい

$ 私たちは何をすべきでしょうか?
$ 私たちは何をすべきでしょうか?

>> フロントエンドに着目しなさい

$ 私たちは何をすべきでしょうか?

>> ネットワーク段階を改善しなさい
$ 私たちは何をすべきでしょうか?

>> フロントエンドに着目しなさい

$ 私たちは何をすべきでしょうか?

>> ネットワーク段階を改善しなさい

$ 私たちは何をすべきでしょうか?
$ 私たちは何をすべきでしょうか?

>> フロントエンドに着目しなさい

$ 私たちは何をすべきでしょうか?

>> ネットワーク段階を改善しなさい

$ 私たちは何をすべきでしょうか?

>> RTTとペイロードサイズを縮小しなさい
Thank you :)
 t32k            @t32k          koji.ishimoto

 このスライドはJina Boltonさんのスライドを参考にしました。
            ありがとう @jina :)
photo credit
- http://www.flickr.com/photos/expose_switch/4566783151/
- http://www.flickr.com/photos/ivko999/5082864854/
- http://www.flickr.com/photos/peasap/4684467836/
- http://www.flickr.com/photos/emrank/2191608962/
- http://www.flickr.com/photos/spilt-milk/6042115943/
- http://www.flickr.com/photos/avidlyabide/7509737450/
- http://www.flickr.com/photos/hinkelstone/2435823037/
- http://www.flickr.com/photos/alex-d/2770828285/
- http://www.flickr.com/photos/expose_switch/4566783201/
- http://www.flickr.com/photos/expose_switch/4566783171/

More Related Content

What's hot

Sass/Compass よくあるトラブルと 解決方法・回避方法
Sass/Compass よくあるトラブルと 解決方法・回避方法Sass/Compass よくあるトラブルと 解決方法・回避方法
Sass/Compass よくあるトラブルと 解決方法・回避方法Maboroshi.inc
 
WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来Jun-ichi Sakamoto
 
ウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニングウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニングYasuhiro Onishi
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説Takao Tetsuro
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介Shotaro Suzuki
 
Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuningssuser3c214d
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編ksimoji
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜Yuji Nojima
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクションTakahiro Okumura
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Shotaro Suzuki
 
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...Shotaro Suzuki
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門miso- soup3
 
Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Sea Mountain
 
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料Masahiro Haraoka
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏kintone papers
 
HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介tomo_masakura
 

What's hot (20)

Sass/Compass よくあるトラブルと 解決方法・回避方法
Sass/Compass よくあるトラブルと 解決方法・回避方法Sass/Compass よくあるトラブルと 解決方法・回避方法
Sass/Compass よくあるトラブルと 解決方法・回避方法
 
WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来
 
ウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニングウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニング
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Web frontend performance tuning
Web frontend      performance tuningWeb frontend      performance tuning
Web frontend performance tuning
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編第9回rest勉強会 ダウンロード・アップロード編
第9回rest勉強会 ダウンロード・アップロード編
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
 
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
Building simple-app-using-.net 6 asp.net core web api-blazor web assembly-ela...
 
Web屋の運用その極意
Web屋の運用その極意Web屋の運用その極意
Web屋の運用その極意
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7
 
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏ノンプログラミングで API はじめて体験!_築山 春木氏
ノンプログラミングで API はじめて体験!_築山 春木氏
 
HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介
 

Similar to モバイル制作におけるパフォーマンス最適化について

泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介Dai Utsui
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩Y Watanabe
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 

Similar to モバイル制作におけるパフォーマンス最適化について (7)

泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
 
Zabbix勉強会
Zabbix勉強会Zabbix勉強会
Zabbix勉強会
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 

More from Koji Ishimoto

マイクロインタラクション事始め以前
マイクロインタラクション事始め以前マイクロインタラクション事始め以前
マイクロインタラクション事始め以前Koji Ishimoto
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnKoji Ishimoto
 
Evaluating your stylesheets
Evaluating your stylesheetsEvaluating your stylesheets
Evaluating your stylesheetsKoji Ishimoto
 
フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜
フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜
フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜Koji Ishimoto
 
パフォーマンスから考えるSass/Compassの導入・運用
パフォーマンスから考えるSass/Compassの導入・運用パフォーマンスから考えるSass/Compassの導入・運用
パフォーマンスから考えるSass/Compassの導入・運用Koji Ishimoto
 
大規模サイトにおけるGoogleアナリティクス導入から成果まで
大規模サイトにおけるGoogleアナリティクス導入から成果まで大規模サイトにおけるGoogleアナリティクス導入から成果まで
大規模サイトにおけるGoogleアナリティクス導入から成果までKoji Ishimoto
 
Using Google Analytics with jQuery Mobile
Using Google Analytics with jQuery MobileUsing Google Analytics with jQuery Mobile
Using Google Analytics with jQuery MobileKoji Ishimoto
 
Communities of Practice – kanazawa.js結成までの軌跡 -
Communities of Practice – kanazawa.js結成までの軌跡 -Communities of Practice – kanazawa.js結成までの軌跡 -
Communities of Practice – kanazawa.js結成までの軌跡 -Koji Ishimoto
 
Long Life Web Performance Optimization
Long Life Web Performance OptimizationLong Life Web Performance Optimization
Long Life Web Performance OptimizationKoji Ishimoto
 
Coding Web Performance
Coding Web PerformanceCoding Web Performance
Coding Web PerformanceKoji Ishimoto
 
ビジネスにおけるウェブパフォーマンス
ビジネスにおけるウェブパフォーマンスビジネスにおけるウェブパフォーマンス
ビジネスにおけるウェブパフォーマンスKoji Ishimoto
 
High Performance Web Design
High Performance Web DesignHigh Performance Web Design
High Performance Web DesignKoji Ishimoto
 
Webスライスから始めるmicroformats
Webスライスから始めるmicroformatsWebスライスから始めるmicroformats
Webスライスから始めるmicroformatsKoji Ishimoto
 

More from Koji Ishimoto (16)

マイクロインタラクション事始め以前
マイクロインタラクション事始め以前マイクロインタラクション事始め以前
マイクロインタラクション事始め以前
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
 
Evaluating your stylesheets
Evaluating your stylesheetsEvaluating your stylesheets
Evaluating your stylesheets
 
フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜
フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜
フロントエンドエンジニア(仮) 〜え、ちょっとフロントやること多すぎじゃない!?〜
 
パフォーマンスから考えるSass/Compassの導入・運用
パフォーマンスから考えるSass/Compassの導入・運用パフォーマンスから考えるSass/Compassの導入・運用
パフォーマンスから考えるSass/Compassの導入・運用
 
TumblrTouch
TumblrTouchTumblrTouch
TumblrTouch
 
大規模サイトにおけるGoogleアナリティクス導入から成果まで
大規模サイトにおけるGoogleアナリティクス導入から成果まで大規模サイトにおけるGoogleアナリティクス導入から成果まで
大規模サイトにおけるGoogleアナリティクス導入から成果まで
 
tissa for iOS
tissa for iOStissa for iOS
tissa for iOS
 
Using Google Analytics with jQuery Mobile
Using Google Analytics with jQuery MobileUsing Google Analytics with jQuery Mobile
Using Google Analytics with jQuery Mobile
 
mobile first
mobile firstmobile first
mobile first
 
Communities of Practice – kanazawa.js結成までの軌跡 -
Communities of Practice – kanazawa.js結成までの軌跡 -Communities of Practice – kanazawa.js結成までの軌跡 -
Communities of Practice – kanazawa.js結成までの軌跡 -
 
Long Life Web Performance Optimization
Long Life Web Performance OptimizationLong Life Web Performance Optimization
Long Life Web Performance Optimization
 
Coding Web Performance
Coding Web PerformanceCoding Web Performance
Coding Web Performance
 
ビジネスにおけるウェブパフォーマンス
ビジネスにおけるウェブパフォーマンスビジネスにおけるウェブパフォーマンス
ビジネスにおけるウェブパフォーマンス
 
High Performance Web Design
High Performance Web DesignHigh Performance Web Design
High Performance Web Design
 
Webスライスから始めるmicroformats
Webスライスから始めるmicroformatsWebスライスから始めるmicroformats
Webスライスから始めるmicroformats
 

モバイル制作におけるパフォーマンス最適化について