JavaScript File Compressor for ASP.NET Applications

Nov 6, 2007

2 min read

.NET2.0

WinXP

Win2003

VS2005

.NET3.0

.NET3.5

VS2008

C#

ASP.NET

XML

Windows

.NET

Visual-Studio

Dev

WebForms

Intermediate

Author picture

by asithangae

Contributor

52k Views

Introduction

This article explains how to compress a js file while rendering by the browser.

Using the code

Download the code and build the DLL. Create a Website, and add a reference of the DLL to the Website. In the Web.Config file, add a new HTTP Handler in the HttpHandlers section:

<add verb="*" path="*.js" validate="false" 
  type="ClassLibrary1.Handler, ClassLibrary1, Version=1.0.0.0, Culture=neutral" />

That's all. The rest of the work will be done by our handler. Now, let us see how it works.

Basically, the HttpHandlers are used to handle requests of a Web Application. This handler is used to handle the JavaScript file. It removes white spaces, new line characters, inline comments, and multiline comments. The Handler class is inherited from the IHttpHandler Interface, and it implements the ProcessRequest method:

//Getting the script file name from request 
Uri url = context.Request.Url; 
string filename = url.Segments[url.Segments.Length-1]; 

//Creating a file stream to read the script file. 
FileStream fs = new FileStream(context.Server.MapPath(filename), FileMode.Open); 
StreamReader sr = new StreamReader(fs); 
string js = sr.ReadToEnd(); 
string a = string.Empty , b = string.Empty; 
//Removing the single line comments 
while (js.IndexOf("//")!=-1) 
{
 a = js.Substring(0, js.IndexOf("//"));
 b = js.Substring(js.IndexOf("\r\n", js.IndexOf("//")));
 js = a+b; 
} 
//Removing multiline comments 
while (js.IndexOf("/*") != -1) 
{
 a = js.Substring(0, js.IndexOf("/*"));
 b = js.Substring(js.IndexOf("*/", js.IndexOf("/*"))+2);
 js = a + b; 
} 
//To Remove Blank spaces 
js = js.Replace(" ", string.Empty); 
//To remove Carrige retun and new line character 
js = js.Replace("\r", string.Empty); 
js = js.Replace("\n", string.Empty); 
//Flushing it in response 
context.Response.Write(js); 
//Closing the resourses used 
sr.Close(); 
fs.Close(); 
sr.Dispose(); 
fs.Dispose();

This makes the file compressed, and if any intruder tries to access your code, he will feel difficult to trace back the functionalities since the indentation and comments are missing. But he can still do it if he has patience:).

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)