Tối ưu và tăng tốc toàn diện blog của bạn (phần 1)

Trong thời đại công nghệ thông tin thì tốc độ đóng một vai trò rất quan trọng, mọi thứ đều cần phải có tốc độ cao và blog cũng không phải là ngoại lệ. Một blog có tốc độ load nhanh sẽ giữ chân được nhiều hơn những người dùng khó tính (luôn đòi hỏi mọi thứ phải tốc độ nhanh :D ). Nhân sự kiện viết lại toàn bộ code của Webzine đồng thời thực hiện các tối ưu để tăng tốc độ load cho blog, Hutek cũng xin viết một bài để chia sẻ những kinh nghiệm của mình đã áp dụng thành công.

Trước khi thực hiện

  • Đối tượng áp dụng: Blog trên nền tảng WordPress dùng host Linux.
  • Kiến thức: Bài viết này Hutek hướng dẫn các tối ưu bằng cách can thiệp vào code của theme vì vậy đòi hỏi bạn phải có kiến thức cơ bản về javascript, php, css, xhtml… Đặc biệt là phải nắm chắc Yslow User Guide vì chúng ta sẽ tiến hành các tối ưu dựa trên những gợi ý của Yslow.
  • Trình duyệt: Firefox 3 (cài đặt sẵn Firebug và Yslow) // Đây là một phần rất quan trọng của quá trình, các bạn có thể tìm 2 extension này trên trang addon của Mozzila. Lưu ý là Yslow chạy không được tốt trên FF 3.5 nên tốt nhất là bạn dùng FF 3 để test blog.
  • Editor: Để thực hiện các thay đổi trong theme các bạn cần một editor tốt, Hutek thì dùng Dreamweaver CS4 (có thể kết nối trực tiếp lên host để sửa rất tiện)

Đọc tài liệu về Yslow

Đây là slide rất hay và sẽ giúp ích bạn rất nhiều trong quá trình tối ưu blog

Kiểm tra hiện trạng

Trước khi Trước khi tiến hành các tối ưu chúng ta sẽ tiến hành kiểm tra hiện trạng của blog, đầu tiên là kiểm tra xem đã đạt chuẩn W3C về xhtml và css. Một theme viết đạt chuẩn này cũng sẽ góp phần làm cho tốc độ blog load nhanh hơn đáng kể. Để kết quả kiểm tra mang tính chân thực bạn cần phải deactive tất cả các plugin đang sử dụng vì các plugin sẽ thêm vào blog của bạn vô số các đoạn code phục vụ cho nó và vì vậy có thể ảnh hưởng đến kết quả kiểm tra.

Để kiểm tra cho blog của mình các bạn có thể truy cập vào hai địa chỉ sau:

http://validator.w3.org/ để kiểm tra xem có đạt chuẩn về xhtml không

http://jigsaw.w3.org/css-validator/ để kiểm tra xem có đạt chuẩn về css không

Sau khi kiểm tra nếu đạt thì tốt rồi, chuyển qua bước tiếp theo thôi còn trường hợp xấu là chưa đạt thì chúng ta cần xem xét kỹ bởi vì chưa đạt không hẳn đã là không tốt, nếu có quá nhiều error và warning thì hỏng rồi, phải tìm theme khác ngay hoặc code lại thôi (giống trường hợp của mình đây), nếu số lượng error và warning ít thì cũng có thể chấp nhận được, nếu có thể thì sửa luôn. Thường thì để pass css khá dễ nhưng để pass xhtml thì tuơng đối khó, ví dụ như trường hợp của mình, bắt  buộc phải viết lại toàn bộ code và kiểm tra liên tục, đến chỗ nào invalid là sửa ngay. Việc viết code đạt chuẩn của W3C theo Hutek hoàn toàn không khó nếu bạn chú ý, hơn thế nữa nó còn giúp coder rèn luyện tính cẩn thận cũng như hiểu sâu hơn cả về xhmtl và css, điều này rất có lợi. Để thuận tiện hơn cho việc phát triển theme thì các bạn có thể down về Valid Extension, nó sẽ giúp bạn test mà không cần truy cập vào trang http://validator.w3.org/ rất tiện lợi.

Để lựa chọn một theme tốt bạn có thể xem thêm bài viết này trên blog của Misao

Kiểm tra yslow

Kết quả Yslow

Sau khi kiểm tra xong bước 1 chúng ta sẽ đưa ra quyết định là sẽ tiếp tục dùng theme, code lại hay thay mới theme, tiếp theo là kiểm tra bằng Yslow, dựa vào số điểm mà Yslow đánh giá chúng ta có thể biết được là blog của mình đang ở mức độ nào, nếu blog của bạn được điểm A (90-99) thì không còn gì phải bàn, bạn đã thực hiện quá tốt các tối ưu rồi nhưng số blog này là như lá mùa thu đa phần các blog đều không đạt được số điểm này và như thế thì mới có bài viết này.

Để kết quả chính xác thì chúng ta cũng cần deactive tất cả các plugin.

Tiếp theo là chúng ta cần phân tích kết quả do Yslow trả ra, nhìn vào hình thì có thể thấy Yslow dùng 22 tiêu chí để đánh giá và phân thành 6 mục lớn. Những tiêu chí nào được đánh điểm A thì chúng ta không cần quan tâm mà chỉ cần quan tâm đến những tiêu chí bị điểm thấp thôi. Bằng cách click vào những tiêu chí này chúng ta sẽ biết được những gợi ý và lý giải mà Yslow đưa ra.

Tiến hành tối ưu

Theo Hutek thì những tối ưu về Gzip là đem lại kết quả rõ rệt nhất và trong phần 1 này Hutek sẽ hướng dẫn những thủ thuật cho tối ưu về Gzip. Sau khi thực hiện tối ưu với Gzip, dung lượng tải về của blog của bạn sẽ giảm đi đáng kể (từ 50% đến 90%). Hầu như mọi thành phần trong blog của bạn đều có thể gzip, từ html, css đến js. Việc tiến hành Gzip cũng không quá khó, để Gzip cho phần html bạn chỉ cần thêm đoạn code sau vào phần trên cùng của file header.php

<?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>

Để kiểm tra xem blog của mình đã được Gzip hay chưa bạn có thể truy cập địa chỉ sau:
http://www.gidnetwork.com/tools/gzip-test.php
Tiếp theo là Gzip cho css và js, phần này khó hơn, có nhiều cách nhưng theo Hutek thì cách dưới đây là tương đối dễ thực hiện.

Để Gzip cho css các bạn làm như sau:

- Thay file style.css thành style.css.php. Mục đích là để chèn code php vào
- Chèn đoạn code sau vào trên cùng của file vừa đổi tên

<?php 
ob_start ("ob_gzhandler");
header("Content-type: text/css; charset: UTF-8");
header("Cache-Control: must-revalidate");
$offset = 60 * 60 ;
$ExpStr = "Expires: " . 
gmdate("D, d M Y H:i:s",
time() + $offset) . " GMT";
header($ExpStr);
?>

- Sửa lại trong header.php để gọi lại style.
Thay đoạn này

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url');type="text/css" />

bằng

<link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/style.css.php" type="text/css" />

Như vậy là chúng ta đã Gzip cho css.
Để gzip cho js thì chúng ta cũng làm tương tự, ví dụ như ở đây để gzip thư viện jquery (jquery.js) Hutek sẽ làm như sau.
- Đổi tên file jquery.js thành jquery.js.php. Mục đích là để chèn code php vào
- Chèn đoạn code sau vào phần trên cùng của file vừa đổi tên

<?php 
	header("Content-type: text/javascript");
	ob_start ("ob_gzhandler");
	header("Content-type: application/x-javascript; charset: UTF-8");
	//header("Cache-Control: must-revalidate");
	$offset = 60 * 60 ;
	$ExpStr = "Expires: " .
	gmdate("D, d M Y H:i:s",
	time() + $offset) . " GMT";
	header($ExpStr);
?>

- Gọi lại js
Thay

<script type='text/javascript' src='http://yourdomain.com/wp-content/themes/yourtheme/js/jquery.js' ></script>

bằng

<script type='text/javascript' src='http://yourdomain.com/wp-content/themes/yourtheme/js/jquery.js.php' >

- Nếu blog của bạn có nhiều file js thì một cách tối ưu là gom chúng lại, tốt nhất là để duy nhất một file js (của Hutek là 2 file), nếu vì lý do nào đó mà không thể gộp lại thì làm tương tự cho các file còn lại.
Ok, như vậy là chúng ta đã tiến hành Gzip cho toàn bộ các thành phần chính của blog, bây giờ các bạn có thể kiểm tra lại bằng Yslow, nếu như điểm tăng lên và các file css, js không còn hiện trong phần gợi ý của yslow nữa là thành công.

Phản hồi (54) | Gửi một phản hồi

  1. Nhờ bài của Minh mèo mới đọc được bài hay như thế này của anh. Em muốn gọp 3 file css của thesis lại thành 1 thì làm thế nào bác. Vì em nghĩ nếu gọp 3 file đó lại tốc độ load sẽ có thể giảm thêm vài ms :dauhang:

    Reply
    • Thesis thì hơi khó, ko nên làm bằng tay mà nên dùng một plugin để gộp chúng lại, ví dụ như w3 total cache ấy

      Reply
      • Có một vấn đề xẩy ra là khi em áp dụng thủ thuật này thì cái plugins All SEO back không hoạt động bình thường, khi click vào bài viết thì lẽ ra cái title phải là dạng [tên bài viết] | [tên blog] thì nó lại thành mỗi [tên blog] không thôi

        Reply
        • Đúng rồi bác ạ, cái này xung đột với all in one seo pack, bác nên dùng cái total cache ấy, cái đó bi giờ là đỉnh nhất

          Reply
          • KHông biết W3 Total Cache có xung đột với WP supper cache ko bác

            Reply
            • Nếu dùng total cache thì bác ko cần dùng bất kỳ plugin cache nào nữa nhé, nó bao trùm hết rồi

              Reply
              • Quan trọng là SEO bác à, cái này chỉ giúp tăng tốc độ thôi, nếu gỡ bỏ All SEO pack thì toi bác ạ

                Reply
  2. À mà sao mình kiểm tra cho trang của bác lại thấy bác không Gzip site của bác nhỉ ^^!.
    P/s: Cũng câu hỏi của cm trước với JS: superfish.js

    Reply
  3. Mình dùng Gz cho phần CSS: superfish-navbar.css và superfish.css của themes WPLine có được không?

    Reply
  4. Anh ơi khi em gzip như anh bao thi nó tự động nhảy về theme deauft vì nó báo “Stylesheet is missing”. Em phải xử lý thế nào đây ạ

    Reply
    blackcat
    01/02/2010
  5. Anh ơi sau khi làm theo anh thi hầu hết các điểm của em là A chỉ còn vài cái như là:
    1.Grade n/a on Make JavaScript and CSS external
    2.Grade E on Make AJAX cacheable
    3.Grade C on Make fewer HTTP requests
    4.Grade E on Use cookie-free domains
    There are 9 components that are not cookie-free
    5.Grade C on Do not scale images in HTML
    6.Grade F on Use a Content Delivery Network (CDN)
    7.Grade F on Add Expires headers
    8.Grade B on Compress components with gzip
    http://doyouknows.com/wp-includes/js/jquery/jquery.js?...

    Anh có thể chỉ cho em đâu là lỗi quan trọng cần sửa và các sửa nữa ạ.
    Bài viết của anh rất hữu ích. Nó giúp tốc độ trang của em tăng đáng kể.

    Em cám ơn anh nhiều.Mong anh có nhiều bài viết cho đàn em học tập :2:

    Reply
    blackcat
    31/01/2010
    • Cái nào cũng quan trọng nhưng có hiệu quả nhất vẫn là cái thứ 8, sau đó đến 3, sau đó đến 7, sau đó đến 2, còn mấy cái kia làm được thì càng tốt

      Reply
  6. Anh cho em hỏi tốc độ web bao nhiêu là chấp nhận được

    Reply
    blackcat
    31/01/2010
  7. hay quá, nhưng mà e gzip cho page rùi nhưng test vẫn No Zip :(, chắc là do chua gzip cho css và js.
    Thank vì bài viết

    Reply
  8. chào hutek mình muốn hỏi hutek một điều là minh muốn lấy info của phần tóm tắt bài viết trong phần post bài của wp ra skin mà minh tự chế thì mình phải làm sử dung hàm gì . chỉ mình phần tóm tắt thôi

    cảm ơn bạn

    Reply
  9. Thanks cho bài viết rất là hay. Tối ưu toàn diện. Kết quả sau khi gzip enable + css. Js nhiều quá chưa làm được.

    Results for: http://anhblog.net
    Web page compressed? Yes
    Compression type? gzip
    Size, Markup (bytes) 123,982
    Size, Compressed (bytes) 22,691
    Compression % 81.7

    Reply
    • Theo mình thì Gzip là cách hiệu quả nhất để tăng tốc độ load trang đấy :D

      Reply
      • Thì nó dùng để nén dữ liệu nhỏ lại, làm nhẹ dung lượng đi -> load nhanh hơn .

        Reply
  10. cái gzip này đâu như tùy host, host mình ko có đành bó tay. đọc phần 2 vậy ! mà cái check gzip đó nếu có thì nó show ra chứ bác? ko có thì nó tối mù à? em newbie wordpress :(
    .-= trung´s last blog ..2.479 tỉ đồng xây cầu Cửa Đại =-.

    Reply
  11. Hi Bác Huetk, rất mừng khi thấy bài viết của bác, trang blog của em nó load chậm quá… Làm cái đầu tiên, ínert vô header thì được, còn chỉnh từ css qua php rồi thêm code php vào, thay đường dẫn 1 cái là nó ko cho load luôn… Theme bị lổi chuyển về theme default luôn, bác coi thử giùm em nó bị lỗi j vậy, trang của em: http://gdptductam.com theme em đang dùng là photographicfilm. Thanks bác trước nha..
    .-= minhtran´s last blog ..VẦNG DƯƠNG CỔ TÍCH! =-.

    Reply
  12. Phần này hay quá. Tuy nhiên có một số theme lại không làm được

    Reply
    • Cái này chủ yếu là do host có hỗ trợ gzip hay không thôi bạn ạ, rất vui vì bạn ghé thăm blog

      Reply
  13. Em nén html thì ok nhưng nén css+js thì 0 được vì em xài smarty, php nó gom tpl lại rồi mới ném ra thành thử code php kia nó cho là lỗi vì 0 phải định dạng cho client side

    Reply
    Tran Quang Thien
    06/08/2009
  14. Tuấn Anh thì chỉ cần xóa các plugin hiện trên hompage lả đã giảm tới 40 – 60% tốc độ …

    Reply
    • Đúng vậy, nhưng vấn đề là có những plugin không thể xóa được :D

      Reply
  15. Bác chỉ em chi tiết cách gom file js với.
    Theme em sử dụng nhiều javascript quá nên load hơi chậm :D

    Reply
    • em nghĩ chắc là do bác dùng plugin nên nó toàn load js trong includes folder. Bác tắt thử hết đi xem, thứ hai là trang bác toàn dùng cả 3 js framework, theo em bác nên chuyển sang jquery cho nó nhẹ

      Reply
  16. Mình nghĩ là cách gzip CSS và JS thì nên áp dụng, còn đối với trang web (html) thì ko nên, vì mọi người chắc đều dùng WP Super Cache plugin cả, ở đó có sẵn chức năng gzip. Hơn nữa, cách nén gzip của WP Super Cache ko khiến cho server bị load nhiều vì nó redirect request tới file nén sẵn thông qua htaccess, hiệu quả hơn rất nhiều so với việc mỗi lần request, server lại nén rồi trả về cho client.

    Reply
  17. Hì, cái font Georgia là em thêm vào đấy chứ, mặc định là như của bác. Em kiểm tra thì thấy bị lỗi trên IE 6 nên cứ tưởng Times New Roman bị lỗi, đành thêm vào Georgia cuối cùng vẫn không sửa được.

    Giờ em thêm vào cái Arial xem có bị nữa không. Bác kiểm tra lại dùm em nhé.

    Reply
  18. Em cũng đang định như thế, một là nhờ bác decorate lại cái thesis hoặc cái neoclassical, mệt mỏi quá, có j bác contact qua email nhé

    Reply
    • Neo thì em còn chơi được chứ thesis mất time lắm, có gì em sẽ liên lạc với bác, mà sao bác ko làm riêng một cái cho nó … máu, từ logo đến theme và các thứ other khác cho nó tông xuyệt tông nhỉ

      Reply
  19. Thx bác, bài viết rất hữu ích. Đúng là tốc độ rất quan trọng với những blogger chuyên nghiệp. :D

    @Tinh: Thesis hình như có forum riêng của nó mà bác. Trong đấy có nhiều hướng dẫn chi tiết lắm.

    Reply
    • Quan trọng là time bác ạ :-) Em đói time quá, về nhà thì con và vợ phá, ở CQ thì phải làm để còn nhận luơng, bù hết cả đầu lên :(

      Reply
      • Em đang định tư vấn cho bác một giải pháp trọn gói giúp bác có một mặt tiền ngon lành, tối ưu từ a đến z(code, plugin, graphic) công việc còn lại của bác chỉ là viết bài thôi, không biết bác có hứng thú trao đổi không nhỉ

        Reply
    • Blog của Misao cũng valid xhtml mà nhưng mà font của tiêu đề không hiển thị tốt trên IE 6 vì nó không phải font unicode

      Reply
      • Bác nói quá đúng. Blog của em valid xhtml nhưng không tương thích tốt với IE 6. Hôm nào có thời gian em sẽ nghiên cứu rồi sửa lại.

        Bác Hutek có cao kiến gì không?

        Reply
        • Cái này còn phụ thuộc vào sở thích cá nhân của bác, bác cứ đưa ra một số tiêu chí cho giao diện và em sẽ tư vấn giúp bác một số chỗ để nó ngon lành hơn :P

          Reply
          • Trước mắt em muốn sửa lại cái font cho tương thích với IE 6. Bác có thể giúp em được không? :D

            Reply
            • Đơn giản, bác vào master.css tìm dòng 23, sau đó thay

              body {
              color:#333333;
              font-family:"Georgia",Times New Roman,Times,Serif;
              font-size:62.5%;
              line-height:2.2em;
              }

              bằng

              body {
              color:#333333;
              font-family:Times New Roman,Times,Serif;
              font-size:62.5%;
              line-height:2.2em;
              }

              Thế là Ok :P

              Reply
  20. Thêm một bài hữu ích nữa, em dùng Thesis nên sẽ khó hơn, nói chung là lười nên chưa thể làm theo hướng dẫn của bác được, lỗi CSS cà XHTML lung tung cả :(

    Reply
    • Test mới biết của em được gzip rồi thì phải :D

      Reply
    • Đúng vậy, Thesis thì hơi bị mệt đấy, em có xem qua code của nó nhưng mà vẫn chưa hiểu lắm, nói chung là viết theo cách khác người, còn Webzine của em viết rất dễ hiểu, gần như default theme luôn

      Reply
  21. Mọi người áp dụng nhé, sẽ thấy cải tiến đáng kể đấy, mình đã làm cho Hutek.info thành công rồi, kết nhất là cái gzip này nên viết đầu tiên

    Reply
  22. Thanks bác.

    Reply
  23. thanks bác, rất có ích cho các newbie như em, chờ các phần sau của bác :)

    Reply

Gửi một phản hồi

  Tự động TELEX Tắt

:D ^:)^ ~O) :P =(( =P~ :(( =)) more »

PingBack/TrackBack

  1. Tăng Tốc Cho Blog Sử Dụng Thesis Theme
  2. Google Site Speed: Bạn Có Nên Quá Lo Lắng? | Blog Kiếm Tiền
  3. Goole xác nhận Site Speed là một yếu tố xếp hạng — Minh Mèo Blog
  4. Kinh nghiệm rút ra từ thành công Vnexpress nhân dịp tròn 9 tuổi — Minh Mèo Blog
  5. Tăng tốc blog sử dụng theme Thesis — Minh Mèo Blog
  6. Xin chào các Thesis fan Việt Nam | Hutek.info

jQuery('#large_banner').cycle({
    fx:     'scrollDown', 
    easing: 'bounceout', 
    delay:  -4000,
    timeout: 8000 
});
jQuery('#breaking_news').cycle({
    fx:     'scrollDown', 
    delay:  -4000 
});