<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-10412725.post114613516876376623..comments</id><updated>2007-05-30T04:19:46.396+05:30</updated><category term='mobile'/><category term='node.js'/><category term='flash'/><category term='eee'/><category term='javascript'/><category term='funny'/><category term='apple'/><category term='comics'/><category term='javscript'/><category term='lazy'/><category term='iphone'/><category term='fefoo'/><category term='css'/><category term='adwords'/><category term='mileap'/><category term='python'/><category term='tips'/><category term='spam'/><category term='windows'/><category term='invite'/><category term='tv'/><category term='stratus'/><category term='windows mobile'/><category term='pagerank'/><category term='flashlite'/><category term='rant'/><category term='safari'/><category term='linux'/><category term='facebook'/><category term='xml'/><category term='e61i'/><category term='sarcasm'/><category term='tech'/><category term='p2p'/><category term='java'/><category term='personal'/><category term='photography'/><category term='programming'/><category term='javame'/><category term='music'/><category term='hcl'/><category term='game'/><category term='adult'/><category term='simplexml'/><category term='open social'/><category term='bday'/><category term='movie'/><category term='digg'/><category term='html'/><category term='twitter'/><category term='mac'/><category term='sucks'/><category term='i780'/><category term='weird'/><category term='futurebazaar'/><category term='fitness'/><category term='json'/><category term='joost'/><category term='google'/><title type='text'>Comments on Vivek live and kickin': Speed up your AJAX based webapps</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.vivekjishtu.com/feeds/114613516876376623/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html'/><author><name>Vivek Jishtu</name><uri>https://profiles.google.com/111592989305925550275</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-jzyzO0Fb7Ro/AAAAAAAAAAI/AAAAAAAAAsY/l8GKMCf0RzY/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10412725.post-437039236647612678</id><published>2007-05-30T04:19:00.000+05:30</published><updated>2007-05-30T04:19:00.000+05:30</updated><title type='text'>In HTTP 1.1 Specifications it states about the Exp...</title><content type='html'>In HTTP 1.1 Specifications it states about the Expires field:&lt;BR/&gt;&lt;BR/&gt;To mark a response as "never expires," an origin server sends an Expires date approximately one year from the time the response is sent. HTTP/1.1 servers SHOULD NOT send Expires dates more than one year in the future.&lt;BR/&gt;&lt;BR/&gt;So, you SHOULD NOT set the expires date to 2011</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/437039236647612678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/437039236647612678'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1180478940000#c437039236647612678' title=''/><author><name>Daniel Gomes Silveira</name><uri>http://www.blogger.com/profile/04835900309147606607</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1970569887'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-117119016318002920</id><published>2007-02-11T16:06:00.000+05:30</published><updated>2007-02-11T16:06:00.000+05:30</updated><title type='text'>Hi! I've been reading your blog from the beginning...</title><content type='html'>Hi! I've been reading your blog from the beginning..Thank you for your wonderful work! Keep up the good work.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/117119016318002920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/117119016318002920'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1171190160000#c117119016318002920' title=''/><author><name>purse</name><uri>http://ret.php0h.com/purse-all/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2042016324'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114981894439178058</id><published>2006-06-09T07:39:00.000+05:30</published><updated>2006-06-09T07:39:00.000+05:30</updated><title type='text'>To answer the questions: yes, all browsers do cach...</title><content type='html'>To answer the questions: yes, all browsers do cache file.js?a=1 differently from file.js?a=2. The Rails team tested it extensively.&lt;BR/&gt;&lt;BR/&gt;Also, author, rewrite that damn .NET code! .NET (finally) gives full date formatting that is tied into the OS. Native code can format a real date much faster than you can, and much more accurately.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114981894439178058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114981894439178058'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1149818940000#c114981894439178058' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-999328565'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114644186229075630</id><published>2006-05-01T05:34:00.000+05:30</published><updated>2006-05-01T05:34:00.000+05:30</updated><title type='text'>The queston that needs to be answered here is: &lt;br...</title><content type='html'>The queston that needs to be answered here is: &lt;BR/&gt;&lt;BR/&gt;will /scripts/script.js?version=1 be cached  assuming the expiry is set into the future?&lt;BR/&gt; &lt;BR/&gt;&lt;BR/&gt;if so, the simple answer is to append the version to the request so that once the version is cached, it stays cached.  when the script is updated, ensure the version key/value is changed.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114644186229075630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114644186229075630'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146441840000#c114644186229075630' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2141610970'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114626215345308910</id><published>2006-04-29T03:39:00.000+05:30</published><updated>2006-04-29T03:39:00.000+05:30</updated><title type='text'>Dude, throw away all that old ASP 3.0 crap that sp...</title><content type='html'>Dude, throw away all that old ASP 3.0 crap that spawns from the function &lt;B&gt;DateToHTTPDate&lt;/B&gt; to format the date in RFC 1123. The .NET has the &lt;B&gt;Date.Now.ToString("r")&lt;/B&gt; that automatically formats the date for you.&lt;BR/&gt;&lt;BR/&gt;That is, replace this:&lt;BR/&gt;&lt;B&gt;Response.AddHeader("Last-Modified", DateToHTTPDate(Date.Now))&lt;/B&gt;&lt;BR/&gt;with this:&lt;BR/&gt;&lt;B&gt;Response.AddHeader("Last-Modified", Date.Now.ToString("r"))&lt;/B&gt;&lt;BR/&gt;&lt;BR/&gt;-Gianni</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114626215345308910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114626215345308910'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146262140000#c114626215345308910' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-686564799'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114626104727218199</id><published>2006-04-29T03:20:00.000+05:30</published><updated>2006-04-29T03:20:00.000+05:30</updated><title type='text'>I simply use jsmin (which removes comments and whi...</title><content type='html'>I simply use jsmin (which removes comments and whitespace) and append all javascript files into one file named all-VERSION.js, where VERSION is the svn revision number. The goal here was twofold: Enable versioning, plus keep the javascript parsing and downloading to a minimum. The effect of using jsmin really speeds up client side interpretation of the javascript. I suppose I could gzip the all-VERSION.js file as well.&lt;BR/&gt;&lt;BR/&gt;Here's the script:&lt;BR/&gt;&lt;BR/&gt;#!/bin/bash&lt;BR/&gt;&lt;BR/&gt;rm -f all-*.js&lt;BR/&gt;&lt;BR/&gt;ver=$(svn info js | grep Revision | awk '{ print $2 }')&lt;BR/&gt;&lt;BR/&gt;oldver=`cat VERSION`&lt;BR/&gt;&lt;BR/&gt;echo "Old version is $oldver, version is $ver"&lt;BR/&gt;&lt;BR/&gt;file="all-$ver.js"&lt;BR/&gt;&lt;BR/&gt;cat &gt; $file &amp;lt;&amp;lt;EOF&lt;BR/&gt;/*&lt;BR/&gt;&lt;BR/&gt;In order to keep this file as small as possible, all license texts have been&lt;BR/&gt;removed. For a copy of the license text for all javascript code used throughout&lt;BR/&gt;this site, please see:&lt;BR/&gt;&lt;BR/&gt;http://www.lapdonline.org/crimemap/license.txt&lt;BR/&gt;&lt;BR/&gt;*/&lt;BR/&gt;EOF&lt;BR/&gt;&lt;BR/&gt;if [ ! -f jsmin ]&lt;BR/&gt;then&lt;BR/&gt;        gcc -Wall -o jsmin ../assets/jsmin/jsmin.c&lt;BR/&gt;fi&lt;BR/&gt;&lt;BR/&gt;for i in js/* # Oversimplified, as the files must be in order, but you get the idea&lt;BR/&gt;do&lt;BR/&gt;        echo $i&lt;BR/&gt;        ./jsmin &lt; $i &gt;&gt; $file&lt;BR/&gt;done&lt;BR/&gt;&lt;BR/&gt;echo -n ${ver} &gt; VERSION</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114626104727218199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114626104727218199'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146261000000#c114626104727218199' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1422754285'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114624418248509671</id><published>2006-04-28T22:39:00.000+05:30</published><updated>2006-04-28T22:39:00.000+05:30</updated><title type='text'></title><content type='html'>This comment has been removed by a blog administrator.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114624418248509671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114624418248509671'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.contentRemoved' value='true'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-75114671'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114623487223602829</id><published>2006-04-28T20:04:00.000+05:30</published><updated>2006-04-28T20:04:00.000+05:30</updated><title type='text'>Here is an idea -- keep your file named the same t...</title><content type='html'>Here is an idea -- keep your file named the same thing, ie mfile.js. Then reference it like myfile.1.js or myfile.2.js each time you change the content. Then set up your server rewrites to ignore any numbers after that second period, using a regex like&lt;BR/&gt;&lt;BR/&gt;([0-9a-zA-Z]+)(\.[\d]*)?(\.js)&lt;BR/&gt;&lt;BR/&gt;And then use match 1 and 3, who cares if 2 is blank or has stuff in it.&lt;BR/&gt;&lt;BR/&gt;PS - I know this will work with ISAPI rewrite; I dont really have any experience with apache mod_rewrite, but I imagine it can use regexes and that one or a slightly modified one should work there.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114623487223602829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114623487223602829'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146234840000#c114623487223602829' title=''/><author><name>Corey Tisdale</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-570836542'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114622439140828122</id><published>2006-04-28T17:09:00.000+05:30</published><updated>2006-04-28T17:09:00.000+05:30</updated><title type='text'></title><content type='html'>This comment has been removed by a blog administrator.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622439140828122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622439140828122'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.contentRemoved' value='true'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-571586427'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114622255483772890</id><published>2006-04-28T16:39:00.000+05:30</published><updated>2006-04-28T16:39:00.000+05:30</updated><title type='text'></title><content type='html'>This comment has been removed by a blog administrator.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622255483772890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622255483772890'/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.contentRemoved' value='true'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-70159840'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114622214485110777</id><published>2006-04-28T16:32:00.000+05:30</published><updated>2006-04-28T16:32:00.000+05:30</updated><title type='text'>This is exactly the way ASP.NET 2.0 webresources w...</title><content type='html'>This is exactly the way ASP.NET 2.0 webresources work : It appends (among other things) the assembly timestamp in the querystring when requesting the resource.&lt;BR/&gt;&lt;BR/&gt;It may be worth mentioning that you can apply the same technique to CSS files and images (link and img tags),  the server will ignore the querystring when serving the resource, but the browser will keep it in the cached resource name.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622214485110777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622214485110777'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146222120000#c114622214485110777' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1139188935'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114622106381762125</id><published>2006-04-28T16:14:00.000+05:30</published><updated>2006-04-28T16:14:00.000+05:30</updated><title type='text'>If you use Ruby on Rails it automatically appends ...</title><content type='html'>If you use Ruby on Rails it automatically appends the timestamp to anything when you use the asset helpers. Just in case anyone thought about implementing something like this in Rails.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622106381762125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114622106381762125'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146221040000#c114622106381762125' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1585878360'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114620912970297209</id><published>2006-04-28T12:55:00.000+05:30</published><updated>2006-04-28T12:55:00.000+05:30</updated><title type='text'></title><content type='html'>This comment has been removed by a blog administrator.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620912970297209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620912970297209'/><author><name>Vivek Jishtu</name><uri>http://www.blogger.com/profile/16622503044343820788</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.contentRemoved' value='true'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2027324225'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114620151860732912</id><published>2006-04-28T10:48:00.000+05:30</published><updated>2006-04-28T10:48:00.000+05:30</updated><title type='text'>Don't forget that in ASP.NET you can use generic h...</title><content type='html'>Don't forget that in ASP.NET you can use generic handlers (.ashx files) for time you don't need to full overhead of a page.  Here is a sample:&lt;BR/&gt;&lt;BR/&gt;&amp;lt;%@ WebHandler Language="VB" Class="HelloWorld" %&amp;gt;&lt;BR/&gt;&lt;BR/&gt;Imports System&lt;BR/&gt;Imports System.Web&lt;BR/&gt;&lt;BR/&gt;Public Class HelloWorld : Implements IHttpHandler&lt;BR/&gt;    &lt;BR/&gt;    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest&lt;BR/&gt;        context.Response.ContentType = "text/plain"&lt;BR/&gt;        context.Response.Write("Hello World")&lt;BR/&gt;    End Sub&lt;BR/&gt; &lt;BR/&gt;    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable&lt;BR/&gt;        Get&lt;BR/&gt;            Return True&lt;BR/&gt;        End Get&lt;BR/&gt;    End Property&lt;BR/&gt;&lt;BR/&gt;End Class</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620151860732912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620151860732912'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146201480000#c114620151860732912' title=''/><author><name>Austin</name><uri>http://www.blogger.com/profile/16085867224817846690</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1769427146'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114620098784861979</id><published>2006-04-28T10:39:00.000+05:30</published><updated>2006-04-28T10:39:00.000+05:30</updated><title type='text'>Or how about leaving it big to encourage dial-up u...</title><content type='html'>Or how about leaving it big to encourage dial-up users to switch to broadband and get out of the stone age. Or petition their local phone company for broadband.. Costs is no matter, broadband dsl as cheap as dialup now =P</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620098784861979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620098784861979'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146200940000#c114620098784861979' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1090342950'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114620043973933361</id><published>2006-04-28T10:30:00.000+05:30</published><updated>2006-04-28T10:30:00.000+05:30</updated><title type='text'>Thanks Anonymous (2) I removed the filename from t...</title><content type='html'>Thanks Anonymous (2) I removed the filename from the JavaScript. That should take care of the security hole.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620043973933361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114620043973933361'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146200400000#c114620043973933361' title=''/><author><name>Vivek Jishtu</name><uri>http://www.blogger.com/profile/16622503044343820788</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2027324225'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114619435886337657</id><published>2006-04-28T08:49:00.000+05:30</published><updated>2006-04-28T08:49:00.000+05:30</updated><title type='text'>In agreeance with, and expanding upon the 1st and ...</title><content type='html'>In agreeance with, and expanding upon the 1st and 3rd anonymous posters' comments, why couldn't the call to the js file be appended with a query var everytime that a new version was posted? It appears that editing of the js call is happening anyway (with the version number being changed in calls) in this implementation, but I believe that this additional hit on the server to call the PHP file could be avoided.&lt;BR/&gt;&lt;BR/&gt;From my understanding, and the previous posters comments will validate this, the browser will cache based on unique URLs. So test.js?a=1 will not be seen as the same as test.js?a=2. Why then do we need this additional call to the server, when instead of modifying the file,we could merely modify the src reference of the script tag? (Like the Timestamp method mentioned earlier).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619435886337657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619435886337657'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146194340000#c114619435886337657' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1788377607'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114619286677869318</id><published>2006-04-28T08:24:00.000+05:30</published><updated>2006-04-28T08:24:00.000+05:30</updated><title type='text'>His point is not to stop caching of js, but indeed...</title><content type='html'>His point is not to stop caching of js, but indeed to allow js to be cached by the browser, but to immediately invalidate browser cache if and when the js changes.  Can be handled by server etags, though that still means the browser will need to ping the server to see if the js has changed.  I got around this by using rewrite rules, and a perl script, which added cvs version info to my urls.  Set a 4 week freshness setting on all the js, images, css, etc. and change the url only when cvs version changes (which immediately invalidates the browser cache).  Since I am using mod_rewrite, don't ever need to actually maintain multiple dirs.  Works well.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619286677869318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619286677869318'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146192840000#c114619286677869318' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1453663408'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114619221036501899</id><published>2006-04-28T08:13:00.000+05:30</published><updated>2006-04-28T08:13:00.000+05:30</updated><title type='text'>I believe the point of this post was to SELECTIVEL...</title><content type='html'>I believe the point of this post was to SELECTIVELY cache javascript files. &lt;BR/&gt;&lt;BR/&gt;Seems to me like a good solution to this problem.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619221036501899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619221036501899'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146192180000#c114619221036501899' title=''/><author><name>AeH</name><uri>http://www.blogger.com/profile/03611856564841876685</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1818860384'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114619042922933776</id><published>2006-04-28T07:43:00.000+05:30</published><updated>2006-04-28T07:43:00.000+05:30</updated><title type='text'>Or you can just rename the javascript file to some...</title><content type='html'>Or you can just rename the javascript file to something else.&lt;BR/&gt;&lt;BR/&gt;However, I did post the &lt;A HREF="http://www.trajano.net/2006/04/ajax-queue.html" REL="nofollow"&gt;AjaxQueue pattern&lt;/A&gt; on &lt;A HREF="http://www.trajano.net/" REL="nofollow"&gt;my blog&lt;/A&gt; which in &lt;I&gt;theory&lt;/I&gt; speed up part of the AJAX equation.  Namely the response since it can group them all together in one chunk rather than dealing with a lot of small requests.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619042922933776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114619042922933776'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146190380000#c114619042922933776' title=''/><author><name>Archimedes Trajano</name><uri>http://www.blogger.com/profile/15993184075121538415</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1064161697'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114618979926496212</id><published>2006-04-28T07:33:00.000+05:30</published><updated>2006-04-28T07:33:00.000+05:30</updated><title type='text'>i agree with the first anonymous, I make AJAX appl...</title><content type='html'>i agree with the first anonymous, I make AJAX applications almost every day, appending a timestamp or some other random number is the easiest way to keep it from getting cached.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114618979926496212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114618979926496212'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146189780000#c114618979926496212' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-702942067'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114618750945822532</id><published>2006-04-28T06:55:00.000+05:30</published><updated>2006-04-28T06:55:00.000+05:30</updated><title type='text'>Bad form outputting possible dangerous output, e.g...</title><content type='html'>Bad form outputting possible dangerous output, e.g., alert( ... filename. A specially crafted URL could allow the attacker to execute JS on the client's machine as if it were your domain, for example, stealing or deleting cookies and/or session ids.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114618750945822532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114618750945822532'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146187500000#c114618750945822532' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-975321908'/></entry><entry><id>tag:blogger.com,1999:blog-10412725.post-114618613321984414</id><published>2006-04-28T06:32:00.000+05:30</published><updated>2006-04-28T06:32:00.000+05:30</updated><title type='text'>You could have also just appended the timestamp of...</title><content type='html'>You could have also just appended the timestamp of the JS file when you call it... implementing that would take a lot less logic.&lt;BR/&gt;&lt;BR/&gt;somescripts.js?1146185994</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114618613321984414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10412725/114613516876376623/comments/default/114618613321984414'/><link rel='alternate' type='text/html' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html?showComment=1146186120000#c114618613321984414' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.vivekjishtu.com/2006/04/speed-up-your-ajax-based-webapps.html' ref='tag:blogger.com,1999:blog-10412725.post-114613516876376623' source='http://www.blogger.com/feeds/10412725/posts/default/114613516876376623' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1421313972'/></entry></feed>
