[webkit-dev] WebKit caching

Adam Thorsen adam.thorsen at gmail.com
Sat Apr 11 18:54:18 PDT 2009


Thanks for this detailed response!  I've put together a demo app that  
implements techniques A, B, and C. You can find it here: http://github.com/awt/cachedemo/tree/master 
  Unfortunately javascript files are still being cached.  You can  
reproduce this by pointing the browser at a local web server serving a  
simple html file that includes a javascript file.  Before loading the  
page, however, make sure that the javascript file hasn't been modified  
for a significant period of time (let's say an hour to be safe).  Once  
the page is loaded and you have verified that your js code is  
executing as expected, modify the js code in such a way that reloading  
the page should show the change.  Once the page is reloaded, your  
change should not be reflected.  Looking at the console, you'll see  
the response headers for each resource requested (like this):

2009-04-11 12:54:46.753 CacheDemo[8364:10b] response for path:/ 
     Connection = close;
     "Content-Length" = 758;
     "Content-Type" = "text/javascript";
     Date = "Sat, 11 Apr 2009 19:53:03 GMT";
     Etag = "\"49e0bad7-2f6-4d4424\"";
     "Last-Modified" = "Sat, 11 Apr 2009 15:44:23 GMT";

I also noticed recently that there is a "Disable Caches" option under  
the Develop menu on Safari.  I tested it using the same procedure and  
it indeed did not cache the javascript, so I know this is possible one  
way or another.

Thanks again for the response,


On Apr 10, 2009, at 3:01 PM, Darin Adler wrote:

> There are three different caches involved in WebKit on Mac OS X.
>    A) The resource cache in the NSURL networking layer, which caches  
> both in memory and on disk.
>    B) The resource cache inside WebCore, which caches in memory.
>    C) The page cache in WebCore, a higher level cache which only  
> affects "go back" and "go forward" commands.
>> 1.  Overriding the NSURLCache cachedResponseForRequest and  
>> cachedResponse forRequest methods
> To turn off cache (A) you can call:
>    [[NSURLCache sharedURLCache] setMemoryCapacity:0];
>    [[NSURLCache sharedURLCache] setDiskCapacity:0];
>>   WebPreferences *prefs = [webView preferences];
>>   [prefs setUsesPageCache:NO];
> The code above turns off cache (C).
> One way to turn off cache (B) is to do this:
>    [prefs setCacheModel:WebCacheModelDocumentViewer]
> I suggest giving that a try.
>    -- Darin

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20090411/749dabbe/attachment.html>

More information about the webkit-dev mailing list