Tôi lại với chủ đề optimize cho website của mình sau bài viết 3 tuyệt chiêu tối ưu hóa tốc độ tải trang với .htaccess. Trong bài viết này, tôi cố gắng trình bày thêm một số kinh nghiệm trong việc tối ưu hóa frontend website với bạn đọc. Hi vọng nó sẽ tiếp tục giúp ích cho bạn.
Phụ mục
CSS Sprites và gom nhiều file stylesheet và javascript vào chung một file
Tại sao chúng ta cần gom lại chung một file ? Việc chia nhiều file có phải giúp chúng ta quản lý được code dễ dàng hơn theo chứng năng mà bạn gán cho từng file ?
Bình thường, với việc chia nhỏ nhiều file có lẽ là giúp chúng ta dễ quản lý file hơn. Đúng ! Kết luận đó hoàn toàn đúng. Nhưng điều này cũng làm cho số lượng request của chúng ta lên server nhiều hơn vì server phải xử lý việc cho phép tải xuống nhiều hơn.
Bình thường, để tải các icon cho website bạn sẽ sử dụng riêng từng file ảnh và gọi request lên máy chủ để xin phép tải xuống các file tương ứng. Như vậy, số lượng request gửi lên máy chủ cũng sẽ tăng theo, tương tự như vậy, chúng ta cũng tốn nhiều request gửi lên máy chủ hơn khi gọi nhiều file css, file javascript riêng biệt.
Giải pháp để giảm thiểu số lượng request gửi lên server trong trường hợp này là bạn có thể gom những file stylesheet, những file javascript riêng lẻ thành một file lớn rồi gửi một request lên server để tải về.
Đối với hình ảnh, bạn cũng có thể xử lý tương tự. Bằng việc kết hợp nhiều ảnh nhỏ thành một ảnh lớn, bạn có thể sử dụng CSS để chọn vị trí hiển thị tương ứng của hình. Cách làm này được nhiều website lớn thực hiện. Bạn có thể xem thêm bài hướng dẫn này để hiểu chi tiết.
Giảm request với module mod_concat
Trong một số trường hợp bạn không thể kết hợp được tất cả các file được mà vẫn phải tải từng file. Để có thể giảm được số lượng request gửi lên máy chủ bạn có thể sử dụng mod mod_concat được phát triển bởi Ian Holsman.Nhiệm vụ của module này là kết nối các file css, js lại thành một request duy nhất. Chúng ta cùng xem các kết quả thí nghiệm cho việc bật/tắt module concat này với các ví dụ sau:
Kết quả 1: Không dùng module concat của Apache server. Mất tới 16 request.Tiếp theo, chúng ta xem tiếp khi bật module này lên số lượng request sẽ giảm xuống như thế nào:
Kết quả 2: Dùng module concat của Apache server. Mất 6 request. Như vậy chúng ta thấy rõ số lượng request đã giảm đi rất đáng kể, và performance sẽ được cải thiện cũng rất đáng kể.Bạn cần cài đặt mod mod_concat cho Apache server, cách cài đặt bạn có thể tìm và download trên Internet để lấy phiên bản mới nhất.
Cách sử dụng module này như sau
Với CSS
[code language=”html”] <link rel="stylesheet" type="text/css" media="screen" href="http://example.com/static/??file1.css,file2.css" />[/code]
Với Javascript
[code language=”html”] <script type="text/javascript" src="http://example.com/static/??file_1.js,file_2.js"></script>[/code]
CSS on top – JS on bottom
Nói một cách đơn giản: bạn hãy đặt các file CSS trên phần head, còn các file javascript hãy đặt nó ở cuối trang.
Tại sao ?
Có một lý giải được post trên blog của tmquang6805 như sau:
Việc render HTML sẽ được thực hiện tuần tự từ trên xuống, nếu chúng ta đã khai báo các style sheet ngay trên đầu, thì việc hiển thị nội dung tới đâu nó sẽ map với các class của CSS tương ứng và render ngay. Nếu chúng ta đặt CSS ngay cuối trang web (gần thẻ
Tên vi phạm says
Bài này thật là hay vãi lúa!
Nguyễn Duy Nhân says
Đọc thôi, thấy hay thì bookmark lại để khi nào cần thì lôi ra xài, không cần phải “vãi lúa” ra như vậy đâu bạn ơi =))
thatgood says
cái đoạn mod_concat, nếu mình xài share host của hostgator thì nó có cài sẵn hay có cách nào để cài không Nhân? Với lại bạn có thể viết chi tiết hơn đoạn gộp nhiều file js lại thành 1 để sử dụng như thế nào không?
Nguyễn Duy Nhân says
Chào bạn,
Mình chưa sử dụng hostgator lần nào nên cũng không rõ về vấn đề này. Bạn có thể gửi email cho họ để biết thêm thông tin về gói hosting mà bạn đang sử dụng.
Đối với đoạn gộp nhiều file js ở trên đã viết rõ rồi: src=”example.com/static/??file_1.js,file_2.js
thatgood says
Í mình ở đây là nếu k dùng module đó thì có cách nào gộp nhiều js không ấy?
thatgood says
Mình tìm thấy plugin này với wordpress, có vẻ tự giải quyết được vấn đề trên với js, Nhân xem nếu đúng thì có thể chia sẻ với mọi người xài cho tiện nếu k rành code như mình: http://wordpress.org/extend/plugins/headjs-loader/
Nguyễn Duy Nhân says
Mình chưa test thử plugin của bác, nhưng bác có thể kiểm tra bằng cách xem số request (sử dụng firebug) có giảm đi hay không. Nếu nó có giảm được request thì nên dùng, còn nếu số request vẫn không đổi thì không nên dùng.
lan says
Chào bạn
Mình muốn cài plugin wordpress tiếng Việt vào trang web của mình bạn có thể tư vấn giúp mình plugin nào tôt nhất và cách cài đặt như thế nào?
Cám ơn bạn nhiều nha!
Trần Minh Quang says
Chào anh Nhân,
Quả thật trái đất này hình tròn anh nhỉ. Bài viết này của anh vào cuối 2012 nhưng tới giờ vô tình tôi search với key khóa của tôi tmquang6805 thì đi vào đây. Và chúng ta cũng hay gặp nhau tại trung tâm Hoàng Nguyễn lắm, có điều chưa có lần nào nói chuyện cùng nhau :)
Trong bài viết, anh cũng tham khảo từ bên blog của tôi và cũng đã có ghi lại trên đây, rất mong rằng anh đã để tên tác giả thì cũng nên để luôn link nguồn để mọi người theo dõi.
Thanks
Nguyễn Duy Nhân says
Chào anh Quang,
Đã bổ sung liên kết đến blog của anh và cũng xin lỗi anh vì sự thiếu sót. Khi nào có thời gian cafe đàm đạo thêm nhé :)
Tên vi phạm says
Tuyệt vời thanksssssssssss :)