SlideShare a Scribd company logo
1




    行雲流水: 網站效能
      前端工程開發實務訓練 (7)

         講師:蔣定宇 / josephj




       Copyright © 2012 FITPI. All rights reserved.
2



                             Web 效能
    Our performance golden rule is: optimize front-
    end performance first, that's where 80% or more
    of the end-user response time is spent.



    網站效能需先優化前端,因整體
    Response 時間中,前端占了
    80%。

                                                               Google High Performance Engineer


                                          Steve Souders
                                   Copyright © 2012 FITPI. All rights reserved.
3



       網站效能檢測工具
      大致來說都是在瀏覽器中安裝一個工具
    它會依照一些準則 (可調整) 分析所在網頁效能

     ๏ Y!Slow
      http://developer.yahoo.com/yslow/

     ๏ Page Speed
      https://developers.google.com/speed/pagespeed/



       練習:裝起來在你常用的網站跑跑看
                     Copyright © 2012 FITPI. All rights reserved.
4



    Page Speed




      Copyright © 2012 FITPI. All rights reserved.
5



    Y!Slow




    Copyright © 2012 FITPI. All rights reserved.
6



         網頁效能項目
          僅列出一些效能改進的重點

    ๏ Cache - 瀏覽器端、伺服器端、CDN
    ๏ GZip - 網頁傳輸的自動壓縮機制
    ๏ 減少 HTTP 的請求數量
    ๏ 將 CSS/JavaScript 最小化
    ๏ 圖片最佳化
    ๏ 無堵塞載入
             Copyright © 2012 FITPI. All rights reserved.
7


                          CDN
    ๏ Content Delivery Network。
    ๏ Server 佈署在全世界的每個地方。
     ❖ Amazon 或 Akamei 都有此租賃服務。
    ๏ 複製來源網站的 JS / CSS / Images 等靜態檔案。
    ๏ 適用於跨國服務的中大型網站。
     ❖ 例如 Yahoo!, Google 等全球化網站。
    ๏ 使用者存取最近或速度最快的 CDN Server,而非原
      始檔案存放的地方。
                  Copyright © 2012 FITPI. All rights reserved.
8


                  CDN




    使用者存取最近或速度最快的 CDN Server
         而非原始檔案存放的地方
          Copyright © 2012 FITPI. All rights reserved.
9



           對開發的影響
    ๏ CDN 一旦抓到檔案,預設會放 10 年以上。
    ๏ 時間內不會向你的伺服器重新索取檔案。
    ๏ 開發者需要改變檔名或加上版號(例如時間戳記、
     或 version)才能讓 CDN 重抓資料
     ❖ 原始檔案:foo.js
     ❖ 改變檔名:foo_r1.js
     ❖ 增加 GET 參數:foo.js?r=1


                Copyright © 2012 FITPI. All rights reserved.
10

                GZip / Deflate
        Web Server 與 Browser 間的加解壓縮機制




       http://www.sebkuehn.com/blog/seo/speed-up-your-website-for-better-seo/



     若支援 GZip/Deflate,會將文字檔壓縮為 Binary 傳送
        在 Browser 端解壓縮、頻寬可節省很多!

                            Copyright © 2012 FITPI. All rights reserved.
11

              GZip / Deflate
                文字類型的檔案都可以設定
<IfModule mod_deflate.c>
      DeflateCompressionLevel 6
      AddOutputFilter         DEFLATE html htm xml css js php
      AddOutputFilterByType   DEFLATE text/html text/plain text/xml
                                      application/x-httpd-php
</IfModule>




                       Copyright © 2012 FITPI. All rights reserved.
12


      減少 HTTP 請求數量
     ๏ HTTP 協定的 Request / Response (TCP)
       是昂貴的、應該想辦法減少。
     ๏ 減少請求數量的方式大致如下:
      ❖ CSS Sprites - 合併你的圖片
      ❖ 部分圖片採用 Data URI
      ❖ 合併 JavaScript / CSS 檔案
      ❖ 圖片 Lazy Load 技術
     ๏ 等下會來介紹合併及 Lazy Load 的技術

                Copyright © 2012 FITPI. All rights reserved.
13

                      圖片最佳化
     ๏ GIF - 256 色、支援透明 (Index)、動畫。
     ๏ PNG8 - 256 色、支援半透明 (Alpha)
      ❖ 最適合網頁使用的圖檔格式
      ❖ Adobe Fireworks 是唯一支援轉換為 PNG8 半透明的軟體。

     ๏ PNG24 - 數百萬色、支援半透明 (Alpha)。
      ❖ 複雜圖像(非照片)

     ๏ JPG - 僅適合用於照片。
     ๏ 選擇圖片格式的黃金原則:
       照片用 JPEG、動畫用 GIF、其餘全部用 PNG8。
     ๏ 圖片裡有很多用不到的資訊,可以透過工具降低整體 Size
       https://github.com/josephj/optimg
                         Copyright © 2012 FITPI. All rights reserved.
14




       效能解決方案
     一些能快速改善前端效能的工具與方法




          Copyright © 2012 FITPI. All rights reserved.
15




     CSS/JavaScript 的
        合併與最小化
      用工具一次解決兩個效能問題




         Copyright © 2012 FITPI. All rights reserved.
16


                                      選擇1 : MINI

                                                                                          透過設定檔
                                                                       將多個檔案合併、最小化
                                                                                    的開發環境工具
                                                                               https://github.com/josephj/mini




     http://www.flickr.com/photos/prettypony/2644225789/



                                                           Copyright © 2012 FITPI. All rights reserved.
透過設定檔定義模組
17




                                             尋找檔案的路徑,可以有多個
                                             $DEV_ROOT 是 Apache 的環境變數




                                       定義 demo 有哪些 CSS 與 JS 檔案




       Copyright © 2012 FITPI. All rights reserved.
實際存取方式 (最小化)
18




     /mini?module=<module>&type=<css|js>




               Copyright © 2012 FITPI. All rights reserved.
19
     修改前 (請求量超多)




       Copyright © 2012 FITPI. All rights reserved.
20
     修改後 (大幅減少請求量)




        Copyright © 2012 FITPI. All rights reserved.
21



                  練習:Mini
     ๏ 請下載 mini、 解壓縮到 C:AppServwwwlib
      http://f2eclass.com/lab/performance/mini.zip

     ๏ 在 Apache 設定檔裡增加兩行 (需重啟)
      Alias /mini C:AppServwwwlibminimini_web.php
      SetEnv DEV_ROOT C:AppServwww

     ๏ 新增一個 Mini 設定檔、增加一些 JS/CSS 檔
      C:AppServwwwconfminimini.xml

     ๏ 用以下方式看看是否有設定成功:
      http://localhost/mini?type=<type>&module=<module>


                       Copyright © 2012 FITPI. All rights reserved.
22



         選擇 2: Minify
            http://<your host>/minify?f=
                               <檔案 1 的路徑>,
                                            <檔案 2 的路徑>,
                                             ...
                                            <檔案 n 的路徑>


     ๏ http://code.google.com/p/minify
     ๏ Mini 是透過設定檔、但 Minify 則是直接從網
       址指定。
     ๏ 與 YUI Combo Handler 的作法一致
     ๏ 會有 GET 長度限制問題 (2K ~ 4K)。

                  Copyright © 2012 FITPI. All rights reserved.
23



               練習:Minify
     ๏ 請下載 minify、 解壓縮到 C:AppServwwwlib
      http://f2eclass.com/lab/performance/minify.zip

     ๏ 在 Apache 設定檔裡增加兩行 (需重啟)
      Alias /combo C:AppServwwwlibminifymin

     ๏ 修改設定檔
      C:AppServwwwlibminifyminconfig.php

     ๏ 用以下方式看看是否有設定成功:
      http://localhost/combo?f=<file1>,<file2>,<file3>



                         Copyright © 2012 FITPI. All rights reserved.
24




       無阻塞載入
      Non-blocking JavaScript
      <script src/> 以外的方式
     讓 JavaScript 載入的更順暢


         Copyright © 2012 FITPI. All rights reserved.
25



          載入外部 Script
     ๏ 不管是 <script src> 或 <link href> 都會堵塞後續
       內容的顯示。
      ❖ http://f2eclass.com/lab/performance/blocking-
         javascript.html

     ๏ 但像是 Google Analytics 或 Facebook Social
       Plugin 提供貼入你網站的原始碼都不會堵塞。
     ๏ 還記得 document.create 可以建立節點的方式
       嗎?以這樣的方式載入外部 Script 就可以避免堵
       塞。

                     Copyright © 2012 FITPI. All rights reserved.
向 FB 學習無堵塞
26




                 <script type=”text/javascript”>
                (function () {
                    var el = document.createElement("script");
                    el.type = "text/javascript";
                    el.src = "要載⼊入 JavaScript 的 URL";
                    el.async = true;
                    document.getElementsByTagName("head")[0].appendChild(el);
                }());
                </script>


     http://f2eclass.com/lab/performance/non-blocking-javascript.html
                              Copyright © 2012 FITPI. All rights reserved.
27




          ImageLoader
     使用 YUI 的 Image Loader 工具減少讀取不必要的圖檔




                Copyright © 2012 FITPI. All rights reserved.
28



      有很多圖片的頁面

     ๏ 若網頁中有很多圖片(例如範例網站)、我們
      都用傳統 <img src> 做載入。當讀取此網頁時
      所有的圖片都是一併下載的。
     ๏ 但使用者可能只看少部分的圖、沒看到的圖就
      浪費了載入的流量了...
     ๏ YUI 的 ImageLoader 工具:當使用者快捲到
      可是區域外的圖片時、才開始載入。


              Copyright © 2012 FITPI. All rights reserved.
29

      YUI 的 ImageLoader
      ๏ 避免使用 <img>、改用 <div>、將圖檔路徑以
          style 的 background-image 屬性設定。
      ๏ 阻止圖片顯示:在 CSS 中設定圖片為
          background: none !important;
      ๏ YUI().use 使用 imageloader 模組
      ๏ new Y.ImgLoadGroup({
                foldDistance: "緩衝區距離",
                className: "div 的 className"
          });

     練習:http://f2eclass.com/lab/performance/imageloader.php
                      Copyright © 2012 FITPI. All rights reserved.
30



         效能 - Review

     ๏ 前端占了 80% 的讀取時間。
     ๏ 如何檢測網頁效能:Y!Slow / PageSpeed
     ๏ 前端有哪些常見效能項目?
     ๏ 如何快速改進這些效能?


              Copyright © 2012 FITPI. All rights reserved.
31




     Q&A

     Copyright © 2012 FITPI. All rights reserved.

More Related Content

PDF
Debugging - 前端工程開發實務訓練
Joseph Chiang
 
PDF
HTML 入門 - 前端工程開發實務訓練
Joseph Chiang
 
PDF
前端的未來 - 前端工程實務訓練
Joseph Chiang
 
PDF
Javascript 入門 - 前端工程開發實務訓練
Joseph Chiang
 
PDF
YUI 教學 - 前端工程開發實務訓練
Joseph Chiang
 
PDF
CSS 入門 - 前端工程開發實務訓練
Joseph Chiang
 
PDF
前端工程開發實務訓練
Joseph Chiang
 
PPTX
網頁三本柱之Html與css
Aaron King
 
Debugging - 前端工程開發實務訓練
Joseph Chiang
 
HTML 入門 - 前端工程開發實務訓練
Joseph Chiang
 
前端的未來 - 前端工程實務訓練
Joseph Chiang
 
Javascript 入門 - 前端工程開發實務訓練
Joseph Chiang
 
YUI 教學 - 前端工程開發實務訓練
Joseph Chiang
 
CSS 入門 - 前端工程開發實務訓練
Joseph Chiang
 
前端工程開發實務訓練
Joseph Chiang
 
網頁三本柱之Html與css
Aaron King
 

What's hot (20)

PDF
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
Jollen Chen
 
PDF
模块加载策略 - 2012 SDCC, 北京
Joseph Chiang
 
PDF
面向未来的重构
Kejun Zhang
 
PDF
更好的文件组织
Kejun Zhang
 
PDF
Responsive Web UI Design
jay li
 
PDF
淘宝移动端Web开发最佳实践
jay li
 
PPTX
[2008]网站重构 -who am i
Twinsen Liang
 
PPTX
移动Web开发框架jqm探讨
newker
 
PDF
讓 HTML5 走進 IPTV Framework
Jollen Chen
 
PDF
深入剖析浏览器
jay li
 
PDF
程式人雜誌 2015年三月
鍾誠 陳鍾誠
 
PDF
SeaJS - 前端模块化开发探索与网站性能优化实践
lifesinger
 
PDF
程式人雜誌 -- 2015 年1月號
鍾誠 陳鍾誠
 
PDF
程式人雜誌 2015年五月
鍾誠 陳鍾誠
 
PPTX
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
 
PDF
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 
PDF
一拍一产品背后的故事(React实战)
Kejun Zhang
 
PPT
富文本编辑器在互联网上的应用
luolonghao
 
PDF
Html5开发android应用程序概述
kevin_yanggl
 
PPTX
前端開發學習簡介
peterju
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
Jollen Chen
 
模块加载策略 - 2012 SDCC, 北京
Joseph Chiang
 
面向未来的重构
Kejun Zhang
 
更好的文件组织
Kejun Zhang
 
Responsive Web UI Design
jay li
 
淘宝移动端Web开发最佳实践
jay li
 
[2008]网站重构 -who am i
Twinsen Liang
 
移动Web开发框架jqm探讨
newker
 
讓 HTML5 走進 IPTV Framework
Jollen Chen
 
深入剖析浏览器
jay li
 
程式人雜誌 2015年三月
鍾誠 陳鍾誠
 
SeaJS - 前端模块化开发探索与网站性能优化实践
lifesinger
 
程式人雜誌 -- 2015 年1月號
鍾誠 陳鍾誠
 
程式人雜誌 2015年五月
鍾誠 陳鍾誠
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 
一拍一产品背后的故事(React实战)
Kejun Zhang
 
富文本编辑器在互联网上的应用
luolonghao
 
Html5开发android应用程序概述
kevin_yanggl
 
前端開發學習簡介
peterju
 

Viewers also liked (6)

PDF
標籤設計 - 100網站規劃必備的知識
mouson chen
 
PPT
HTML教學
TONY LEE
 
PDF
台科大暑期資工營 - 前端入門
Yi-Feng Xie
 
PPTX
Css教學
蘇姵欣 PeiSu
 
PPTX
好的網頁設計概念
蘇姵欣 PeiSu
 
PDF
Sublime Text 入門
Kah Wai Liew
 
標籤設計 - 100網站規劃必備的知識
mouson chen
 
HTML教學
TONY LEE
 
台科大暑期資工營 - 前端入門
Yi-Feng Xie
 
Css教學
蘇姵欣 PeiSu
 
好的網頁設計概念
蘇姵欣 PeiSu
 
Sublime Text 入門
Kah Wai Liew
 

Similar to Performance 入門 - 前端工程開發實務訓練 (20)

PPTX
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)
Cyril Wang
 
PDF
A brief introduction to SPDY - 邁向 HTTP/2.0
Wen-Tien Chang
 
PDF
twMVC#08 | 超。光速 網站最佳化實戰
twMVC
 
PDF
超。光速 網站最佳化實戰 -twMVC#8
twMVC
 
PDF
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--黃雋
Drupal Taiwan
 
PDF
前端性能优化和自动化
kaven yan
 
PDF
前端工程師與室內裝修師傅的相似之處-twMVC#16
twMVC
 
PDF
twMVC#16 | 前端工程師與室內裝修師傅的相似之處
twMVC
 
KEY
201206010 pyjamas final
Rasiel Chang
 
PPT
Drupal performance (in DrupalCamp Taipei)
jimyhuang
 
PPT
Html01
Ht Wang
 
PPT
高性能网站最佳实践
longhao
 
PDF
建立前端开发团队 (Front-end Development Environment)
Joseph Chiang
 
PPT
PHP & AppServ
Ht Wang
 
PDF
[網路星期二] 網站流量分析---這樣做就對了!!:環資-大誌-Wilson
Net Tuesday Taiwan
 
PDF
那些mockup沒告訴你的事@WebConf.tw 2013
Adam Wang
 
PDF
深入研究雲端應用程式平台-AppFabric
John Chang
 
PPT
高性能网站建设
feifeipan
 
PDF
Download
Flower Sakura
 
PDF
網頁標記語言2
東偉 蘇
 
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)
Cyril Wang
 
A brief introduction to SPDY - 邁向 HTTP/2.0
Wen-Tien Chang
 
twMVC#08 | 超。光速 網站最佳化實戰
twMVC
 
超。光速 網站最佳化實戰 -twMVC#8
twMVC
 
[DCTPE2011] 8) 多伺服器/高效能的Drupal 主機解決方案--黃雋
Drupal Taiwan
 
前端性能优化和自动化
kaven yan
 
前端工程師與室內裝修師傅的相似之處-twMVC#16
twMVC
 
twMVC#16 | 前端工程師與室內裝修師傅的相似之處
twMVC
 
201206010 pyjamas final
Rasiel Chang
 
Drupal performance (in DrupalCamp Taipei)
jimyhuang
 
Html01
Ht Wang
 
高性能网站最佳实践
longhao
 
建立前端开发团队 (Front-end Development Environment)
Joseph Chiang
 
PHP & AppServ
Ht Wang
 
[網路星期二] 網站流量分析---這樣做就對了!!:環資-大誌-Wilson
Net Tuesday Taiwan
 
那些mockup沒告訴你的事@WebConf.tw 2013
Adam Wang
 
深入研究雲端應用程式平台-AppFabric
John Chang
 
高性能网站建设
feifeipan
 
Download
Flower Sakura
 
網頁標記語言2
東偉 蘇
 

More from Joseph Chiang (20)

PDF
不断归零的前端人生 - 2016 中国软件开发者大会
Joseph Chiang
 
PDF
Let's Redux!
Joseph Chiang
 
PDF
Automatic Functional Testing with Selenium and SauceLabs
Joseph Chiang
 
PDF
From Hacker to Programmer (w/ Webpack, Babel and React)
Joseph Chiang
 
PDF
JavaScript Promise
Joseph Chiang
 
PDF
F2E for Enterprise
Joseph Chiang
 
PDF
JavaScript Code Quality
Joseph Chiang
 
PDF
F2E, the Keystone
Joseph Chiang
 
PDF
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
 
PDF
YUI is Sexy (for JSDC.tw)
Joseph Chiang
 
PDF
YUI is Sexy - 使用 YUI 作為開發基礎
Joseph Chiang
 
KEY
Git - The Social Coding System
Joseph Chiang
 
PDF
miiiCasa is Fun
Joseph Chiang
 
PDF
分享無名小站 API
Joseph Chiang
 
PDF
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
Joseph Chiang
 
PDF
建立前端開發團隊 - 2011 中華電信訓練所版
Joseph Chiang
 
PDF
不用不可之 Fiddler Debugging Proxy!
Joseph Chiang
 
PDF
Open platform
Joseph Chiang
 
PDF
Front-end Modular & Autmomated Development
Joseph Chiang
 
PDF
Hack Day Sharing at D-Link
Joseph Chiang
 
不断归零的前端人生 - 2016 中国软件开发者大会
Joseph Chiang
 
Let's Redux!
Joseph Chiang
 
Automatic Functional Testing with Selenium and SauceLabs
Joseph Chiang
 
From Hacker to Programmer (w/ Webpack, Babel and React)
Joseph Chiang
 
JavaScript Promise
Joseph Chiang
 
F2E for Enterprise
Joseph Chiang
 
JavaScript Code Quality
Joseph Chiang
 
F2E, the Keystone
Joseph Chiang
 
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
 
YUI is Sexy (for JSDC.tw)
Joseph Chiang
 
YUI is Sexy - 使用 YUI 作為開發基礎
Joseph Chiang
 
Git - The Social Coding System
Joseph Chiang
 
miiiCasa is Fun
Joseph Chiang
 
分享無名小站 API
Joseph Chiang
 
yui3 is Sexy - 使用 YUI 3 的 Sexy Part !
Joseph Chiang
 
建立前端開發團隊 - 2011 中華電信訓練所版
Joseph Chiang
 
不用不可之 Fiddler Debugging Proxy!
Joseph Chiang
 
Open platform
Joseph Chiang
 
Front-end Modular & Autmomated Development
Joseph Chiang
 
Hack Day Sharing at D-Link
Joseph Chiang
 

Performance 入門 - 前端工程開發實務訓練

  • 1. 1 行雲流水: 網站效能 前端工程開發實務訓練 (7) 講師:蔣定宇 / josephj Copyright © 2012 FITPI. All rights reserved.
  • 2. 2 Web 效能 Our performance golden rule is: optimize front- end performance first, that's where 80% or more of the end-user response time is spent. 網站效能需先優化前端,因整體 Response 時間中,前端占了 80%。 Google High Performance Engineer Steve Souders Copyright © 2012 FITPI. All rights reserved.
  • 3. 3 網站效能檢測工具 大致來說都是在瀏覽器中安裝一個工具 它會依照一些準則 (可調整) 分析所在網頁效能 ๏ Y!Slow http://developer.yahoo.com/yslow/ ๏ Page Speed https://developers.google.com/speed/pagespeed/ 練習:裝起來在你常用的網站跑跑看 Copyright © 2012 FITPI. All rights reserved.
  • 4. 4 Page Speed Copyright © 2012 FITPI. All rights reserved.
  • 5. 5 Y!Slow Copyright © 2012 FITPI. All rights reserved.
  • 6. 6 網頁效能項目 僅列出一些效能改進的重點 ๏ Cache - 瀏覽器端、伺服器端、CDN ๏ GZip - 網頁傳輸的自動壓縮機制 ๏ 減少 HTTP 的請求數量 ๏ 將 CSS/JavaScript 最小化 ๏ 圖片最佳化 ๏ 無堵塞載入 Copyright © 2012 FITPI. All rights reserved.
  • 7. 7 CDN ๏ Content Delivery Network。 ๏ Server 佈署在全世界的每個地方。 ❖ Amazon 或 Akamei 都有此租賃服務。 ๏ 複製來源網站的 JS / CSS / Images 等靜態檔案。 ๏ 適用於跨國服務的中大型網站。 ❖ 例如 Yahoo!, Google 等全球化網站。 ๏ 使用者存取最近或速度最快的 CDN Server,而非原 始檔案存放的地方。 Copyright © 2012 FITPI. All rights reserved.
  • 8. 8 CDN 使用者存取最近或速度最快的 CDN Server 而非原始檔案存放的地方 Copyright © 2012 FITPI. All rights reserved.
  • 9. 9 對開發的影響 ๏ CDN 一旦抓到檔案,預設會放 10 年以上。 ๏ 時間內不會向你的伺服器重新索取檔案。 ๏ 開發者需要改變檔名或加上版號(例如時間戳記、 或 version)才能讓 CDN 重抓資料 ❖ 原始檔案:foo.js ❖ 改變檔名:foo_r1.js ❖ 增加 GET 參數:foo.js?r=1 Copyright © 2012 FITPI. All rights reserved.
  • 10. 10 GZip / Deflate Web Server 與 Browser 間的加解壓縮機制 http://www.sebkuehn.com/blog/seo/speed-up-your-website-for-better-seo/ 若支援 GZip/Deflate,會將文字檔壓縮為 Binary 傳送 在 Browser 端解壓縮、頻寬可節省很多! Copyright © 2012 FITPI. All rights reserved.
  • 11. 11 GZip / Deflate 文字類型的檔案都可以設定 <IfModule mod_deflate.c> DeflateCompressionLevel 6 AddOutputFilter DEFLATE html htm xml css js php AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php </IfModule> Copyright © 2012 FITPI. All rights reserved.
  • 12. 12 減少 HTTP 請求數量 ๏ HTTP 協定的 Request / Response (TCP) 是昂貴的、應該想辦法減少。 ๏ 減少請求數量的方式大致如下: ❖ CSS Sprites - 合併你的圖片 ❖ 部分圖片採用 Data URI ❖ 合併 JavaScript / CSS 檔案 ❖ 圖片 Lazy Load 技術 ๏ 等下會來介紹合併及 Lazy Load 的技術 Copyright © 2012 FITPI. All rights reserved.
  • 13. 13 圖片最佳化 ๏ GIF - 256 色、支援透明 (Index)、動畫。 ๏ PNG8 - 256 色、支援半透明 (Alpha) ❖ 最適合網頁使用的圖檔格式 ❖ Adobe Fireworks 是唯一支援轉換為 PNG8 半透明的軟體。 ๏ PNG24 - 數百萬色、支援半透明 (Alpha)。 ❖ 複雜圖像(非照片) ๏ JPG - 僅適合用於照片。 ๏ 選擇圖片格式的黃金原則: 照片用 JPEG、動畫用 GIF、其餘全部用 PNG8。 ๏ 圖片裡有很多用不到的資訊,可以透過工具降低整體 Size https://github.com/josephj/optimg Copyright © 2012 FITPI. All rights reserved.
  • 14. 14 效能解決方案 一些能快速改善前端效能的工具與方法 Copyright © 2012 FITPI. All rights reserved.
  • 15. 15 CSS/JavaScript 的 合併與最小化 用工具一次解決兩個效能問題 Copyright © 2012 FITPI. All rights reserved.
  • 16. 16 選擇1 : MINI 透過設定檔 將多個檔案合併、最小化 的開發環境工具 https://github.com/josephj/mini http://www.flickr.com/photos/prettypony/2644225789/ Copyright © 2012 FITPI. All rights reserved.
  • 17. 透過設定檔定義模組 17 尋找檔案的路徑,可以有多個 $DEV_ROOT 是 Apache 的環境變數 定義 demo 有哪些 CSS 與 JS 檔案 Copyright © 2012 FITPI. All rights reserved.
  • 18. 實際存取方式 (最小化) 18 /mini?module=<module>&type=<css|js> Copyright © 2012 FITPI. All rights reserved.
  • 19. 19 修改前 (請求量超多) Copyright © 2012 FITPI. All rights reserved.
  • 20. 20 修改後 (大幅減少請求量) Copyright © 2012 FITPI. All rights reserved.
  • 21. 21 練習:Mini ๏ 請下載 mini、 解壓縮到 C:AppServwwwlib http://f2eclass.com/lab/performance/mini.zip ๏ 在 Apache 設定檔裡增加兩行 (需重啟) Alias /mini C:AppServwwwlibminimini_web.php SetEnv DEV_ROOT C:AppServwww ๏ 新增一個 Mini 設定檔、增加一些 JS/CSS 檔 C:AppServwwwconfminimini.xml ๏ 用以下方式看看是否有設定成功: http://localhost/mini?type=<type>&module=<module> Copyright © 2012 FITPI. All rights reserved.
  • 22. 22 選擇 2: Minify http://<your host>/minify?f= <檔案 1 的路徑>, <檔案 2 的路徑>, ... <檔案 n 的路徑> ๏ http://code.google.com/p/minify ๏ Mini 是透過設定檔、但 Minify 則是直接從網 址指定。 ๏ 與 YUI Combo Handler 的作法一致 ๏ 會有 GET 長度限制問題 (2K ~ 4K)。 Copyright © 2012 FITPI. All rights reserved.
  • 23. 23 練習:Minify ๏ 請下載 minify、 解壓縮到 C:AppServwwwlib http://f2eclass.com/lab/performance/minify.zip ๏ 在 Apache 設定檔裡增加兩行 (需重啟) Alias /combo C:AppServwwwlibminifymin ๏ 修改設定檔 C:AppServwwwlibminifyminconfig.php ๏ 用以下方式看看是否有設定成功: http://localhost/combo?f=<file1>,<file2>,<file3> Copyright © 2012 FITPI. All rights reserved.
  • 24. 24 無阻塞載入 Non-blocking JavaScript <script src/> 以外的方式 讓 JavaScript 載入的更順暢 Copyright © 2012 FITPI. All rights reserved.
  • 25. 25 載入外部 Script ๏ 不管是 <script src> 或 <link href> 都會堵塞後續 內容的顯示。 ❖ http://f2eclass.com/lab/performance/blocking- javascript.html ๏ 但像是 Google Analytics 或 Facebook Social Plugin 提供貼入你網站的原始碼都不會堵塞。 ๏ 還記得 document.create 可以建立節點的方式 嗎?以這樣的方式載入外部 Script 就可以避免堵 塞。 Copyright © 2012 FITPI. All rights reserved.
  • 26. 向 FB 學習無堵塞 26 <script type=”text/javascript”> (function () {     var el = document.createElement("script");     el.type = "text/javascript";     el.src = "要載⼊入 JavaScript 的 URL";     el.async = true;     document.getElementsByTagName("head")[0].appendChild(el); }()); </script> http://f2eclass.com/lab/performance/non-blocking-javascript.html Copyright © 2012 FITPI. All rights reserved.
  • 27. 27 ImageLoader 使用 YUI 的 Image Loader 工具減少讀取不必要的圖檔 Copyright © 2012 FITPI. All rights reserved.
  • 28. 28 有很多圖片的頁面 ๏ 若網頁中有很多圖片(例如範例網站)、我們 都用傳統 <img src> 做載入。當讀取此網頁時 所有的圖片都是一併下載的。 ๏ 但使用者可能只看少部分的圖、沒看到的圖就 浪費了載入的流量了... ๏ YUI 的 ImageLoader 工具:當使用者快捲到 可是區域外的圖片時、才開始載入。 Copyright © 2012 FITPI. All rights reserved.
  • 29. 29 YUI 的 ImageLoader ๏ 避免使用 <img>、改用 <div>、將圖檔路徑以 style 的 background-image 屬性設定。 ๏ 阻止圖片顯示:在 CSS 中設定圖片為 background: none !important; ๏ YUI().use 使用 imageloader 模組 ๏ new Y.ImgLoadGroup({ foldDistance: "緩衝區距離", className: "div 的 className" }); 練習:http://f2eclass.com/lab/performance/imageloader.php Copyright © 2012 FITPI. All rights reserved.
  • 30. 30 效能 - Review ๏ 前端占了 80% 的讀取時間。 ๏ 如何檢測網頁效能:Y!Slow / PageSpeed ๏ 前端有哪些常見效能項目? ๏ 如何快速改進這些效能? Copyright © 2012 FITPI. All rights reserved.
  • 31. 31 Q&A Copyright © 2012 FITPI. All rights reserved.