Category: Css


Trò chơi chữ trực tuyến, luyện đánh máy hay bắn súng là những trò chơi chúng ta sẽ được thấy ở phần cuối này.

Tiếp tục phần 1 và phần 2, chúng tôi sẽ giới thiệu tới các bạn 1 số game khác trên nền HTML5 cũng không kém phần thú vị. Hi vọng bạn sẽ thoải mái sau khi trải nghiệm thử những game chúng tôi sắp giới thiệu sau đây.

WordSquared

Đây là 1 trò chơi chữ trực tuyến nhiều người chơi cùng lúc. Nhiệm vụ của bạn trong trò chơi này là dùng những từ được cung cấp ngẫu nhiên để ghép với những từ đã có thành 1 từ có nghĩa. Mọi người cùng chơi trên 1 “bàn” và tất các các từ họ ghép được sẽ liên kết với nhau thành 1 mạng lưới các từ ngữ khổng lồ.

VN-MAX.net

Cách chơi rất đơn giản, bạn kéo thả các từ được cung cấp sẵn ở bên khung bên dưới vào “bàn” sao cho chúng ghép lại với nhau thành 1 từ có nghĩa trong tiếng Anh, bạn bấm nút “Add Word” để đồng ý. Nếu thành công, từ của bạn vừa ghép sẽ được “đính” vào “bàn” và bạn được cộng điểm. Mục tiêu của bạn là ghép được càng nhiều từ càng tốt, sau mỗi từ ghép đúng, bạn sẽ được cung cấp thêm các kí tự mới. Bạn có thể bấm nút “Swap tiles” để đổi các kí tự khác và trả giá bằng việc bạn bị trừ 1 “mạng”, bạn chỉ có 3 “mạng” cho mỗi lần chơi.

VN-MAX.net

Đây là 1 trò chơi tuyệt vời để giúp bạn củng cố vốn từ vựng tiếng Anh, bạn có thể tạo 1 tài khoản và mời bạn bè tham gia để cùng nhau thi thố.

Z-type.

Z-type là trò chơi thuộc thể loại đánh chữ, giống như những trò chơi cùng thể loại, nhiệm vụ của bạn là đánh càng nhanh càng tốt các từ xuất hiện trên màn hình. Điểm đặc biệt của Z-type là trò chơi mô phỏng việc đánh chữ như là 1 cuộc chiến chống lại kẻ thù, bạn điều khiển 1 phi thuyền, và bạn gõ các từ xuất hiện trên quái vật để tiêu diệt chúng. Số lượng quái vật và tốc độ di chuyển của chúng ngày càng nhanh để tập cho bạn tốc độ đánh máy tốt hơn.

VN-MAX.net

Private Joe.

Trò chơi phiên lưu, bắn súng được viết trên HTML5 với âm thanh và hiệu ứng khá tốt. Cách chơi tương tự như Mario nhưng bạn vào vai 1 người lính đi vào hang ổ của kẻ thù, đối đầu với sự bắn trả quyết liệt của kẻ thù để cứu đồng đội.

VN-MAX.net

Bạn dùng phím “X” để nhảy lên, phím “C” để bắn, phím mũi tên để di chuyển. Hiệu ứng di chuyển, va chạm với đạn pháo của đối phương và âm thanh trong game khá tốt. Rất tiếc đồ họa lại đơn giản giống như 1 trò chơi thời MS-DOS. Tuy vậy, nội dung game khá hấp dẫn có thể dễ dàng thu hút bạn ngay lần thử đầu tiên.

Coil.

Đây là trò chơi mini đơn giản xứng đáng với vai trò “xả stress” sau những giờ làm việc căng thẳng. Nhiệm vụ của bạn là kéo chuột vòng quanh màn hình khoanh tròn các điểm sáng màu xanh để cho chúng không bị “nổ tung” ra. Bạn sẽ bị trừ điểm nếu để cho các điểm sáng này chuyển sang màu vàng và “nổ” cũng như lỡ tay khoanh các điểm màu đỏ.

VN-MAX.net

Game có hình nền màu đen với các điểm sáng màu xanh, đỏ và vàng làm cho mắt bạn cảm thấy thoải mái sau nhiều giờ tập trung vào máy vi tính.

Tiếp tục với chủ đề chơi Game trên web với công nghệ HTML5. Phần 2 này sẽ tiếp tục làm bạn bất ngờ với những khả năng vượt trội mà HTML5 đem lại.

Phần này, chúng tôi sẽ giới thiệu tới bạn những thể loại game tương đối hoành tráng và từng làm say mê không ít người dùng máy tính từ xưa tới nay.

Tank World

Trò chơi “Bắn xe tăng” được xây dựng với giao diện 3D đầy ấn tượng. Luật chơi tương tự những trò chơi trước đây, nhiệm vụ của bạn là phải điều khiển xe tăng của mình tiêu diệt toàn bộ đối phương và giải các nhiệm vụ trò chơi đưa ra.

VN-MAX.net

Tank World đem tới cho bạn 1 cảm giác “bắn tăng” thú vị hơn với giao diện 3D hình quả địa cầu, bạn điều khiển xe tăng bằng cách dùng phím mũi tên đi lên/đi xuống để điều khiển xe tăng di chuyển về phía trước hoặc đi lùi, phím mũi trên trái/ phải dùng để “lái” xe tăng rẽ trái hoặc phải. Để bắn, bạn dùng chuột hướng về phía đối phương và “Click”.

Âm thanh trong game khá đơn giản, không có nhạc nền và chỉ có tiếng súng và tiếng nổ khi đối tượng bị tiêu diệt. Hiệu ứng cháy nổ, đường đạn và va chạm nhìn chung khá tốt đối với 1 game trên web HTML5.

Pirates Love Daisies

Đây là trò chơi thuộc thể loại “Tower Defense” với giao diện khá đẹp mắt. Thay vì xây dựng/ nâng cấp những khẩu súng hoặc tháp canh, người chơi sẽ đặt những thủy thủ thường gặp trong các bộ phim cướp biển nổi tiếng vào những vị trí canh gác để không cho quái vật đi qua cầu.

VN-MAX.net

Mọi chức năng thường thấy trong game thể loại này để xuất hiện đầy đủ trong Pirates Love Daisies và được thể hiện 1 cách sinh động và ngộ nghĩnh hơn.

Worlds Biggest Pacman

Pacman là 1 trong những trò chơi nổi tiếng và kinh điển nhất từ trước tới nay. Luật chơi của game có lẽ bạn cũng đã biết, bạn phải điều khiển Pacman của mình di chuyển để ăn điểm và tránh “ma”.

VN-MAX.net

Điểm đặt biệt của Worlds Biggest Pacman là thư viện bản đồ chơi (map) khổng lồ được thiết kế bởi người chơi (hiện tại vào khoảng 25.500 người). Bạn sẽ thấy danh sách các bản đồ này ngay khi vào trang web. Bạn chỉ cần đưa chuột vào 1 bản đồ mình thích và bấm “play” để chơi.

VN-MAX.net

Mọi tính năng, đồ họa và âm thanh của game không có nhiều khác biệt so với các game Pacman trước đây. Tất cả được xây dựng trên nền HTML5 tiên tiến nhất.

Sand Trap

Sand Trap được phát triển bởi Casual Gameplay, thuộc thể loại game mini với cách chơi đơn giản, luật chơi đơn giản nhưng dễ dàng thu hút người dùng bỏ vào game hàng giờ liền.

VN-MAX.net

Nhiệm vụ của bạn trong Sand Trap là đổ cát trong hình chữ nhật “mê cung” ở trên vào trong xô màu đỏ ở bên dưới, bạn phải đổ đủ số cát yêu cầu vào xô để được qua màn tiếp theo. Để đổ cát, bạn bấm và kéo chuột để xoay hình chữ nhật, các hạt cát ở trong hình sẽ di chuyển theo quy luật của trọng lực. Để đổ được cát vào xô, bạn xoay hình chữ nhật sao cho khi cát rơi ra ngoài qua các khe trống sẽ vào đúng trong xô.

HTML5 ra đời với hi vọng thay thế những hạn chế của Flash. Dù hiện tại chỗ đứng của Flash vẫn còn quá vững chắc, nhưng với những ưu thế vượt trội về mặt công nghệ được thể hiện trong các game dưới đây, bạn sẽ phần nào hiểu được tương lai của HTML5.

Sự ra đời của Adobe Flash đã thay đổi cách sử dụng Internet và duyệt web của người dùng máy tính. Với Flash, họ có thể chơi game, xem phim, nghe nhạc, xem những hình ảnh vui nhộn, sử dụng các ứng dụng trực tuyến với giao diện tùy biến cao chỉ bằng 1 trình duyệt có cài Flash. Tuy nhiên, dù là 1 thành phần quan trọng nhưng Flash vẫn chứa đựng nhiều lỗi nghiêm trọng trong đó có lỗi bảo mật và ngốn nhiều tài nguyên.

Để khắc phục những yếu kém của Flash, HTML5 đã ra đời với vai trò trở thành “chuẩn” phát triển web hiện đại để thay thế Flash. Bạn nghĩ thế nào về HTML5, liệu những ứng dụng giải trí trên HTML5 có thể thay thế được Flash? Sau đây, chúng tôi sẽ giới thiệu 1 số ứng dụng game kinh điển được phát triển trên HTML5, chúng có khả năng gây “nghiện” không thua gì những game trên Flash trước đây.

Canvas Rider

Đây là trò chơi thuộc thể loại chạy xe mạo hiểm. Nhiệm vụ của bạn là phải điều khiển chiếc xe của mình vượt qua những đoạn đường hiểm trở bằng cách “nhào lộn”.

VN-MAX.net

Để điều khiển xe, bạn có phím mũi tên đi lên để tăng tốc, phím mũi tên đi xuống để thắng xe và chạy lùi, phím qua trái/phải để giữ thăng bằng. Nếu lỡ bị “chết” do va chạm hoặc “ngã xe” thì bạn có thể bấm phím Enter để chơi lại từ đầu.

VN-MAX.net

Trò chơi rất đơn giản, được viết hoàn toàn bằng HTML5, bạn có thể bắt đầu chơi thử tại địa chỉ sau đây.

Crystal Galaxy

Crystal Galaxy cũng tương tự như các game bằng phi thuyền từng làm bạn say mê trước đây. Game được viết bằng HTML5 với hình ảnh và âm thanh sống động, đưa bạn vào thế giới ngoài vũ trụ với phi thuyền, thiên thạch, quái vật và các loại vũ khí hiện đại. Nhiệm vụ của bạn là điều khiển chiếc phi thuyền của mình tiêu diệt hết đối phương, tránh bị trúng đạn hay “đâm” vào các tảng thiên thạch.

VN-MAX.net

Cách chơi game khá đơn giản, bạn chỉ cần dùng chuột để điều khiển phi thuyền và bấm chuột phải để bắn.
VN-MAX.net
Vào link dưới để bắt đầu chơi game và tậng hưởng cảm giác mới lạ do game đem lại. Chú ý rằng, những hiệu ứng tuyệt vời trong game được làm hoàn toàn bằng HTML5, có thể nói chúng khá hoàn hảo không thua gì những trò chơi tương tự trên flash trước đây.

BioLab Disaster

Trò chơi này thuộc thể loại phiên lưu tương tự như dòng game Mario huyền thoại. Bạn vào vai 1 siêu nhân đi tiêu diệt quái vật để cứu thế giới. Cách chơi cũng khá đơn giản, bạn dùng phím X để nhảy, phím C để bắn và phím mũi tên để di chuyển.
VN-MAX.net
Bạn bấm vào đây để bắt đầu chơi game. Điểm yếu của BioLab Disaster là đồ họa chỉ có 8bit nên chất lượng khá tệ, âm thanh tương đối. Bạn có thể chơi thoải mái mà không lo chơi lại từ đầu vì “mạng” trong game được mặc định là vô hạn.

VN-MAX.net

Onslaught

Đây là game hành động khá thú vị, bạn điều kiển nhân vật chính ném các thanh kiếm vào các mục tiêu như quái vật, phù thủy v.v… Thỉnh thoảng bạn còn phải chiến đầu với Boss, chúng “trâu” hơn những đối thủ khác và làm bạn mất máu nhiều hơn.

VN-MAX.net

Để chơi game bạn vào đây. Bạn dùng chuột để chọn mục tiêu và bấm chuột trái để “phóng kiếm”.

VN-MAX.net

Đây chỉ là ứng dụng dùng thử, nếu muốn chơi được toàn bộ game, bạn phải mua bản quyền tại Chrome AppStore.

Internet Dereams is a clean, user friendly and attractive Admin template that would fit in perfectly as the backend for most web applications. Included in the template are the login screens, the dashboard, form elements and table layout screens. The PSD is also available.

Internet Dreams Admin Skin
Internet Dereams is a clean, user friendly and attractive Admin template that would fit in perfectly as the backend for most web applications. Included in the template are the login screens, the dashboard, form elements and table layout screens. The PSD is also available.
admintemplate_01
Internet Dreams Admin Skin →
View Screenshots →
Continue reading “Top 10 template-html free for Admin-Backend Full PSD” »

CSS Caching Hack

If you change the HTML and the CSS of a page there is a decent chance that a user will get the new HTML but not the new CSS. This is especially true for sites with high usage and users that come back to the site several times a day.

If they only get the new HTML but not the new CSS then the site will break, the user will get confused, and you will look unprofessional. On the development site of this the problem is already solved. Having a Dev server as a place to test code is standard practice but how does this translate to CSS?

The problem is that the CSS is cashing on the client side and there isn’t an obvious way of telling the browser to un-cache it. Luckily the key word is obvious. Though it’s not in wide use there is a quick hack that will keep your CSS as fresh as your HTML.

The trick is to pass a variable on the end of the CSS file like so:

<link rel="stylesheet" xhref="http://www.stefanhayden.com/style.css?version=1" type="text/css" />

What does ?version=1 mean? This is what a URL looks like if it’s passing a GET variable from one page to the next. To the browser it means the page is dynamic and it needs to get a new version because code may have changed. The browser has no way of knowing if the CSS file is actually dynamic or not.The trick is to change the number each time you update the CSS file to make sure the browser always downloads the new code.

When a browser looks to see if it has anything cashed it compares file names. If you have “style.css” in your cashe then it’s not going to download it again. But if the browser compares “style.css?version=1″ to what the new HTML is “style.css?version=2″ then the browser thinks they are different files and needs to download the new CSS file.

The other reason this works is because you can add anything you want after the ? and the web page just ignores it unless it’s an actually variable on the page.

This seems to be a really good solution to version css and yet so few seem to use it. The only 2 sites I know of who do is Odeo and Sconex. Yet clearly we are in the middle of a big web boom with CSS being used every where. How are other people versioning their CSS so it doesn’t break the user experience?

In general I can’t see to many other solutions. You could make the CSS file parsed by the web server and pass headers with different cacheing info. I have not tried this but I’ll bet the browser would still cache the file as it does not know it is dynamic even if it is. You could rename the CSS file with .php but clearly no one is doing that and I’ll bet there is a browser out there that would not apply the styles because of that.

No every one gets to work on a large production site but with so many jumping in the area and quickly updating the service I’m surprised this subject has not been covered.

Cheat Sheets for Front-end Web Developers

Cheat sheets are helpful to have around because they allow you to quickly remember code syntax and see related concepts visually. Additionally, they’re nice decorative pieces for your office.In this article, you’ll find 23 excellent, print-ready cheat sheets for HTML/HTML, CSS, and JavaScript (including MooTools and jQuery).So go ahead – print out your favorites and pepper your workspace with these wonderful references.

HTML/XHTML

1. HTML Help Sheet

HTML Help Sheet Screenshot

2. HTML Cheat Sheet

HTML Cheat Sheet - Screen shot.

3. HTML Character Entities Cheat Sheet

HTML Character Entities Cheat Sheet - Screen shot.

4. XHTML Cheat Sheet v. 1.03 – PDF

XHTML Cheat Sheet v. 1.03 - screen shot.

CSS

5. CSS Cheat Sheet (V2)

CSS Cheat Sheet (V2) - screen shot.

6. CSS Cheat Sheet

CSS Cheat Sheet - screen shot.

7. CSS Shorthand Cheat Sheet

CSS Shorthand Cheat Sheet - screen shot.

8. CSS Level 1 Quick Reference – PDF

CSS Level 1 Quick Reference - screen shot.

9. CSS Level 2 Quick Reference – PDF

CSS Level 2 Quick Reference - screen shot.

10. CSS2.1 Quick Reference Card – PDF

CSS2.1 Quick Reference Card - screen shot.

11. CSS2 Reference Guide – PDF

CSS2 Reference Guide - screen shot.

JavaScript

12. JavaScript Cheat Sheet

JavaScript Cheat Sheet - screen shot.

13. Addison-Wesley’s JavaScript Reference Card – PDF

Addison-Wesley's JavaScript Reference Card - screen shot.

14. JavaScript and Browser Objects Quick Reference

JavaScript and Browser Objects Quick Reference - screen shot.

15. The most common DOM methods at a glance – PDF

The most common DOM methods at a glance - Screen shot.

16. JavaScript Quick Reference Card/Cheatsheet

avaScript Quick Reference Card/Cheatsheet - Screen shot.

17. mootools 1.2 cheat sheet

mootools 1.2 cheat sheet - screen shot.

18. jQuery Cheatsheet

jQuery Cheatsheet - screen shot.

19. jQuery 1.2 Cheat Sheet

jQuery 1.2 Cheat Sheet - screen shot.

20. jQuery Visual Map – PNG

jQuery Visual Map - screen shot.

Miscellaneous

21. RGB Hex Colour Chart

RGB Hex Colour Chart - screen shot.

22. The Web Developer’s SEO Cheat Sheet

The Web Developer's SEO Cheat Sheet - screen shot

23. The WordPress Help Sheet

The WordPress Help Sheet - screen shot.

Hope you picked up a cool cheat sheet or two. If your favorites aren’t on the list, don’t forget to share it with us in the comments.

Source: http://sixrevisions.com/resources/cheat_sheets_web_developer/

Cheat sheets are helpful to have around because they allow you to quickly remember code syntax and see related concepts visually. Additionally, they’re nice decorative pieces for your office.In this article, you’ll find 23 excellent, print-ready cheat sheets for HTML/HTML, CSS, and JavaScript (including MooTools and jQuery).So go ahead – print out your favorites and pepper your workspace with these wonderful references.

HTML/XHTML

1. HTML Help Sheet

HTML Help Sheet Screenshot

2. HTML Cheat Sheet

HTML Cheat Sheet - Screen shot.

3. HTML Character Entities Cheat Sheet

HTML Character Entities Cheat Sheet - Screen shot.

4. XHTML Cheat Sheet v. 1.03 – PDF

XHTML Cheat Sheet v. 1.03 - screen shot.

CSS

5. CSS Cheat Sheet (V2)

CSS Cheat Sheet (V2) - screen shot.

6. CSS Cheat Sheet

CSS Cheat Sheet - screen shot.

7. CSS Shorthand Cheat Sheet

CSS Shorthand Cheat Sheet - screen shot.

8. CSS Level 1 Quick Reference – PDF

CSS Level 1 Quick Reference - screen shot.

9. CSS Level 2 Quick Reference – PDF

CSS Level 2 Quick Reference - screen shot.

10. CSS2.1 Quick Reference Card – PDF

CSS2.1 Quick Reference Card - screen shot.

11. CSS2 Reference Guide – PDF

CSS2 Reference Guide - screen shot.

JavaScript

12. JavaScript Cheat Sheet

JavaScript Cheat Sheet - screen shot.

13. Addison-Wesley’s JavaScript Reference Card – PDF

Addison-Wesley's JavaScript Reference Card - screen shot.

14. JavaScript and Browser Objects Quick Reference

JavaScript and Browser Objects Quick Reference - screen shot.

15. The most common DOM methods at a glance – PDF

The most common DOM methods at a glance - Screen shot.

16. JavaScript Quick Reference Card/Cheatsheet

avaScript Quick Reference Card/Cheatsheet - Screen shot.

17. mootools 1.2 cheat sheet

mootools 1.2 cheat sheet - screen shot.

18. jQuery Cheatsheet

jQuery Cheatsheet - screen shot.

19. jQuery 1.2 Cheat Sheet

jQuery 1.2 Cheat Sheet - screen shot.

20. jQuery Visual Map – PNG

jQuery Visual Map - screen shot.

Miscellaneous

21. RGB Hex Colour Chart

RGB Hex Colour Chart - screen shot.

22. The Web Developer’s SEO Cheat Sheet

The Web Developer's SEO Cheat Sheet - screen shot

23. The WordPress Help Sheet

The WordPress Help Sheet - screen shot.

Hope you picked up a cool cheat sheet or two. If your favorites aren’t on the list, don’t forget to share it with us in the comments.

Since few days we have been registering heavy traffic spikes on our website. This lead to performance issues. As this site is currently hosted on a shared hosting server, it is very difficult to optimize the performance of the site.We are using WordPress as CMS for this blog, hence we decided to install WP-Super cache plugin for WordPress to improve the performance. This plugin will create static HTML files from your blogs post and other pages and save them on web server. These HTMLs are served to client whenever consecutive requests are made. Hence this greatly improve the performance as it reduce PHP parsing and database connections.Bandwidth control is an important task to be followed when your traffic is increasing. With limited monthly bandwidth hosting, your site may run out of bandwidth and thus result in increase in down time. Hence it is very much advisable to compress your websites response with GZip and then serve it to client. Compressing output can significantly improve your websites performance by reducing the size sometimes upto 80%!So how can you enable GZip compression and compress your websites output? Well there are several ways to achieve this. I have listed out following very useful tricks to enable compression.

GZip compression in Tomcat, JBoss server

You can find a full post explaining this trick here.

GZip using mod_gzip, mod_deflate and htaccess

Apache server supports server level GZip compression with the help of module mod_gzip and mod_deflate. You can use this module and enable GZip compression for your website using htaccess file. First you have to check whether your hosting provider has enabled mod_gzip or mod_deflate module or not? To check this, you can use php_info() function of PHP which prints all the information about server and modules.You can enable compression for text and html by adding following lines in your htaccess file.

# compress all text and html:AddOutputFilterByType DEFLATE text/html text/plain text/xml# Or, compress certain file types by extension:<Files *.html>SetOutputFilter DEFLATE</Files>

You can compress all type of content (image, css, js etc) using mod_deflate. Copy following code in htaccess to do this.

<Location />    SetOutputFilter DEFLATE      SetEnvIfNoCase Request_URI  \        \.(?:gif|jpe?g|png)$ no-gzip dont-vary    SetEnvIfNoCase Request_URI  \        \.(?:exe|t?gz|zip|gz2|sit|rar)$ no-gzip dont-vary</Location>

Also, you can add following code in your htaccess file and enable compression using mod_gzip.

<IfModule mod_gzip.c>    mod_gzip_on       Yes    mod_gzip_dechunk  Yes    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$    mod_gzip_item_include handler   ^cgi-script$    mod_gzip_item_include mime      ^text/.*    mod_gzip_item_include mime      ^application/x-javascript.*    mod_gzip_item_exclude mime      ^image/.*    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*</IfModule>

This technique only works if mod_gzip or mod_deflate modules are loaded in Apache. In our case, these modules were not there and our hosting provider refused to load it as we were using a shared hosting. So following can be another way of enabling compression.

GZip using PHP ob_start() method

If your hosting provider does not support mod_gzip module, ob_start() method can be used to enable compression in PHP file. For this you need to copy following line in top of the PHP file. You may want to add this line in start of the header file that gets included in every php.

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

Above code will check whether your browser supports gzip, if yes, then it send ob_gzhandler method as handle to ob_start method which buffers the output. Thus output is compressed using ob_gzhandler. Only problem with this method is that you have to manually edit all PHP files or should have a header.php file that gets included in all files. There are still ways to achieve this without touching your PHP files. Read following trick.

GZip using php_value directive in htaccess

php_value directive can be used to append/prepend any PHP files in the request of change the output handler. First we will see how we can prepend a PHP file and achieve this. Copy the PHP code that we saw in above example in a file called gzip-enable.php. Now copy following lines in your htaccess file. Thus you need not to modify any of your PHP files can can prepend a PHP file with ob_start() method to all the files.

<FilesMatch "\.(txt|html|htm|php)">    ForceType application/x-httpd-php	php_value auto_prepend_file /the/full/path/gzip-enable.php</FilesMatch>

But what if you don’t want to prepend a PHP file? Still there is a way to specify default output handler using htaccess. Use following line in your htaccess file to tell your apache to register ob_gzhandler handler function as output handler.

    php_value output_handler ob_gzhandler

Compress CSS using htaccess and php_value

CSS Stylesheet files occupy significant size in overall webpage size. It is hence advisable to compress these files before sending them to client. This significantly improve the performance of a webpage. For compressing CSS files, we will first create a PHP file gzip-css.php with following code.

<?php   // initialize ob_gzhandler function to send and compress data   ob_start ("ob_gzhandler");   // send the requisite header information and character set   header ("content-type: text/css; charset: UTF-8");   // check cached credentials and reprocess accordingly   header ("cache-control: must-revalidate");   // set variable for duration of cached content   $offset = 60 * 60;   // set variable specifying format of expiration header   $expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";   // send cache expiration header to the client broswer   header ($expire);?>

Now add following lines in your htaccess file to enable compression for CSS files.

<FilesMatch "\.(css)">    ForceType application/x-httpd-php	php_value auto_prepend_file "/the/full/path/of/this/file/gzip-css.php"</FilesMatch>

Whenever a http request for .css will come to a server, the type of css will get converted to application/x-httpd-php, thus making them parsed using PHP. Then a file gzip-css.php will be prepend to this request which in turns compress the output using ob_start (”ob_gzhandler”) method.

Compress JavaScript (JS) using htaccess and php_value

Similar to above example for CSS, JavaScript files can also be compressed and sent to client. For this create a PHP file gzip-js.php and copy following code in it.

<?php   // initialize ob_gzhandler function to send and compress data   ob_start ("ob_gzhandler");   // send the requisite header information and character set   header ("content-type: text/javascript; charset: UTF-8");   // check cached credentials and reprocess accordingly   header ("cache-control: must-revalidate");   // set variable for duration of cached content   $offset = 60 * 60;   // set variable specifying format of expiration header   $expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";   // send cache expiration header to the client broswer   header ($expire);?>

Also add following lines in your htaccess file.

<FilesMatch "\.(js)">    ForceType application/x-httpd-php	php_value auto_prepend_file "/the/full/path/of/this/file/gzip-js.php"</FilesMatch>

Do you know other methods of compressing the output of PHP/JS/CSS files? Let me know, I will try to add them in this tutorial.Happy Compressing :)

As some of you may know, I am currently working on a content management system. Although I am not able to share all of the code – it is proprietary after all – I already made one debugging tool public. This tool can be used to test some common techniques which decreases the bandwidth generated by feed consumers. Today I am going to make a second tool public – including source code. It is a method to decrease the loading time of a page by combining all the different css or javascript files and compress them.About six months ago I noticed the pages generated by the content management system were in itself very clean and small, but that these pages still took a long time to load for new visitors. Even on a fast internet connection it took more than 8 seconds to load a basically empty page. The server generated the page in about 350ms, so that wasn’t the problem. The problem turned out to be a combination of two things: each page used more than 12 different css files because each plugin supplied its own css definitions and because the use of the rather large prototype and scriptaculous javascript libraries which also consists of a couple of different files. Now that an article about the same problem featured on the Yahoo! User Interface blog, I decided to make my solution public, so others can benefit from it.The solution turned out the be simple, combine all the different files into a single large file and compress that file using gzip. Unfortunately, if you do this manually you are going to run into maintenance problems. That single compressed file is no longer editable. So after editing one of the original source files you will have to recombine it with the other files and re-compress it.Instead of going for the easy – but hard to maintain – solution I decided to automate the process and thanks to a small PHP script and some clever URL rewriting I now have an easy to maintain method to speed up the loading of pages that use many or large css and javascript files.The idea is that you have one directory for css files and one directory for javascript files on your server. If you rewrite the URLs that point to these directories to a small script that intercepts the requests for those files. The script loads the file from disk and compresses it using gzip. It then sends that compressed file back to the browser. Given that javascript and css files compress really well this will greatly decrease the size of the data that is going to be transferred and thus decrease the time needed to download these files. Because this works completely transparently you do not need to change anything in your existing code.But there is more. Compressing the files will decrease the size of the data that needs to be transferred, it does not solve the problem that the browser can only download a limited number of files at the same time. If you have many different files that need to be loaded the browser will not optimally use the bandwidth it has access to. It will request some files from the server and wait until those files are retrieved before the rest of the files are requested. The solution to this problem is to combine all those different files into one large file. And this is exactly what the script tries to do. You can concatenate different files by simply adding the names of the other files to the URL of the first file.

Take for example the following URLs:
http://www.creatype.nl/javascript/prototype.js
http://www.creatype.nl/javascript/builder.js
http://www.creatype.nl/javascript/effects.js
http://www.creatype.nl/javascript/dragdrop.js
http://www.creatype.nl/javascript/slider.js

You can combine all these files to a single file by simply changing the URL to:
http://www.creatype.nl/javascript/prototype.js,builder.js,effects.js,dragdrop.js,slider.js

The script will intercept the attempt to retrieve something from the javascript directory and will notice that you want to fetch multiple files at once. It will then concatenate the requested files, compress it and send it as one to the browser. Also notice that I include the files that come with scriptaculous manually and I do not use the scriptaculous.js file like you normally would. The reason for this is that scriptaculous.js loads each javascript file individually. If I use the scriptaculous.js file I will get the benefit of compression, but the different files won’t be combined into a single file.Unfortunately I noticed a nasty side effect of the combination of these two methods. If you combine many files the resulting files can be come quite large. Compressing those files takes some time and on a busy server that time will become large enough to negate a significant portion of the improvements you made earlier. But this problem can also be solved by simply adding a cache that stores an already combined and compressed version of the files. The cached version is automatically created the first time that particular combination of files is used and used every time – as long as the files are not changed. The result is that once the cache is created there is almost no overhead and the compressed file is delivered almost instantly.I’ve done some informal testing on my own website and I did get some impressive results. Before this script was added to my website you needed to download 8 javascript files, in total 168 Kb – the prototype and scriptaculous libraries. On average this took about 1905 ms. After installing this script you now need to download only a single file of 37 Kb which only takes around 400 ms. Your results may vary of course, but given that it shaved 1.5 seconds of a total loading time of 3.5 seconds, this script almost cut the time needed to load a page on my weblog in two.Configurating this script is easy. First you need to download and configure the combine.php script. By default this script look in the javascript and css directory in the root of your website, but if you are currently using different directories you can change these values at the top of the combine.php script. Upload the combine.php script to the root of your website. Secondly you need to create a cache directory that is writable by the web server. Again, by default this script will look for the cache directory in the root of the website, but you can change this in the combine.php script. Finally you need to create or modify your .htaccess file. If you do not have a .htaccess file you can create it in the root of your website and add the following lines. If you already have an preexisting .htaccess file you can simply add the following lines to the file:

RewriteEngine On
RewriteBase /
RewriteRule ^css/(.*\.css) /combine.php?type=css&files=$1
RewriteRule ^javascript/(.*\.js) /combine.php?type=javascript&files=$1

Note: if your preexisting .htaccess file already uses URL rewriting you do not need to add the first two lines. You can simply add the last two lines to the bottom of the .htaccess file.

Powered by WordPress | Theme: by 85ideas. Editor by Khoanguyen