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
). 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
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.

...
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:
11/04/2010
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
11/04/2010
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
19/06/2010
Đú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
19/06/2010
KHông biết W3 Total Cache có xung đột với WP supper cache ko bác
19/06/2010
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
19/06/2010
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 ạ
19/06/2010
À 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
27/02/2010
Mình dùng Gz cho phần CSS: superfish-navbar.css và superfish.css của themes WPLine có được không?
27/02/2010
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 ạ
01/02/2010
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:
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
31/01/2010
Anh cho em hỏi tốc độ web bao nhiêu là chấp nhận được
31/01/2010
Load trang chủ dưới 5s là được
31/01/2010
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
05/10/2009
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
19/09/2009
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.
18/09/2009
Theo mình thì Gzip là cách hiệu quả nhất để tăng tốc độ load trang đấy
18/09/2009
Thì nó dùng để nén dữ liệu nhỏ lại, làm nhẹ dung lượng đi -> load nhanh hơn .
18/09/2009
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 =-.
28/08/2009
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! =-.
24/08/2009
Phần này hay quá. Tuy nhiên có một số theme lại không làm được
08/08/2009
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
08/08/2009
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
06/08/2009
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 độ …
03/08/2009
Đúng vậy, nhưng vấn đề là có những plugin không thể xóa được
03/08/2009
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
19/07/2009
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ẹ
19/07/2009
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.
18/07/2009
Bác nói em mới để ý đấy
18/07/2009
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é.
17/07/2009
Ngon rồi
18/07/2009
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é
17/07/2009
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ỉ
17/07/2009
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.
@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.
17/07/2009
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 :(
17/07/2009
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ỉ
17/07/2009
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
17/07/2009
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?
17/07/2009
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
17/07/2009
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?
17/07/2009
Đơn giản, bác vào master.css tìm dòng 23, sau đó thay
bằng
Thế là Ok
17/07/2009
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ả :(
16/07/2009
Test mới biết của em được gzip rồi thì phải
16/07/2009
Đú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
17/07/2009
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
16/07/2009
Thanks bác.
16/07/2009
thanks bác, rất có ích cho các newbie như em, chờ các phần sau của bác :)
16/07/2009