31
Overview Introduction to ASP.NET caching Output caching Fragment caching Data caching 1

Overview Introduction to ASP.NET caching Output caching Fragment caching Data caching 1

Embed Size (px)

Citation preview

Page 1: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Overview

Introduction to ASP.NET caching Output caching Fragment caching Data caching

1

Page 2: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

What is Caching

Cache = “secret store”Armies: cache weaponsSquirrels: cache nutsComputers: cache data

Benefits of caching data:Reuse

○ Process once, reuse many times○ Faster, cheaper

Page 3: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Where to Cache

Client-sideBrowsers

○ Images○ Pages

Reduces download times

Server-sideReduces server processing load

Page 4: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Introduction to Caching in ASP.NET Caching is the most critical factor in creating

scalable, high performance Web applications Caching locations

Web server, proxy server, and client browsers Types of caching

Output cachingFragment cachingData caching

4

Page 5: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Output Caching

What is output caching? @ OutputCache directive and the cache object Output caching attributes:

DurationLocationVaryByParamVaryByHeaderVaryByCustom

5

Page 6: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

What Is Output Caching?

Pages that use the output cache are executed one time, and the page results are cached

The pre-executed page is then served to later requests

Performance and scalability both benefitServer response times reducedCPU load reduced

Appropriate caching of pages affects site performance dramatically

6

Page 7: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

@ OutputCache Directive and the Cache Object

@ OutputCache declaratively controls caching behaviorFor .aspx, .asmx, or .ascx

The cache object programmatically controls caching behavior

7

<%@ OutputCache Duration="600“ Location="Any“VaryByParm=“none” %>

Is equivalent to:[C#]Response.Cache.SetExpires(DateTime.Now.AddSeconds(600));Response.Cache.SetCacheability(HttpCacheability.Public);

Page 8: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

OutputCache Members: Duration and Location

Duration sets the time to cache the output(expiration time) In seconds Required

Location sets the location to cache the output Server: The output is held in memory on the Web server and is

used to satisfy requests Downstream: A header is added to the response to indicate to

proxy servers to cache the page Client: A header is added to the response indicating to browsers to

cache the page Any: Output cache can be located on any of these locations None: No output caching is turned on for the item

8

<%@ OutputCache Duration="600" Location="Any“VaryByParam=“none” %>

Page 9: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

OutputCache Members: VaryByParam and VaryByHeader

VaryByParam The cache stores multiple copies of a page based on specific

Querystring or Form parameters and any combinations thereof

VaryByHeader The cache stores multiple copies of a page based on HTTP

headers

9

<%@ OutputCache Duration="10“ VaryByParam="location;count" %>

<%@ OutputCache Duration="60“ VaryByHeader="Accept-Language" %>

Page 10: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

OutputCache Members: VaryByCustom

VaryByCustom If the value is “Browser,” cache varies by browser type and major

version If the value is a custom string, you must override

HttpApplication.GetVaryByCustomString in the Global.asax and implement your own caching logic

10

Page 11: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Fragment Caching

What is fragment caching? VaryByControl Nested cached user controls Cached controls are not programmable

11

Page 12: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

<%@ OutputCache Duration="#ofseconds" Location="Any | Client | Downstream | Server | None | ServerAndClient "

Shared="True | False" VaryByControl="controlname" VaryByCustom="browser | customstring" VaryByHeader="headers" VaryByParam="parametername" VaryByContentEncoding="encodings" CacheProfile="cache profile name | ''" NoStore="true | false" SqlDependency="database/table name pair | CommandNotification" %>

12

Page 13: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

What Is Fragment Caching? Just as you can vary the versions of a page that

are output cached, you can output cache regions of a page

Regions are defined based on user controls User controls contain their own @OutputCache

directive Fragment caching supports

VaryByParamVaryByControl

Location not supported because fragments must reside on server to be assembled

13

Page 14: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Fragment Caching a User Control[*.ascx][*.ascx]<%@ Language="C#" %> <%@ Language="C#" %> <%@ OutputCache Duration="10“ <%@ OutputCache Duration="10“

VaryByControl="State;Country" VaryByControl="State;Country" VaryByParam="*"%> VaryByParam="*"%> <script runat=server> <script runat=server> public String State { public String State { get { return state.Value; } get { return state.Value; } set { state.Value = State; } } set { state.Value = State; } }

public String Country { public String Country { get { return country.Value; } get { return country.Value; } set { country.Value = Country; } } set { country.Value = Country; } } </script></script>

14

Page 15: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

VaryByControl

VaryByControlThe sixth attribute supported by OutputCacheOnly supported in user control cachingCaching is based on user control properties

15

<%@ OutputCache Duration="10“ VaryByControl="State;Country“ VaryByParam="*"%>

Page 16: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Post cache substitution

Allows to substitute (Replace/modify) a (Small) portion of a cached page output

Very useful to use where little content in the rendered page varies depending on parameter(s)

Use an asp:substitution to implement the Post cache substitute

Provide a method for the call back, that renders the markup for the substitution.

16

Page 17: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

SQL dependency

Output Caching/ Fragment caching could be configured to use SQL dependency so that, cached Page/User control will be updated when corresponding table(s) data is/are updated

SQL dependency is usable in Both SQL server 2000 and SQL server 2005

17

Page 18: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

SQL dependency The “Polling model” has to be used in SQL

server 2000 to use Cache dependency--Application “Polls” data after a given period of time--Requires more effort in configuring--More resource intensive

The “Notification model” can be used in SQL server 2005 to use Cache dependency--Requires less effort in configuring--DB server “Notifies” application with Updates--Less resource intensive

18

Page 19: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

SQL dependency:Example In ASPX, or, ASCX page, use

<asp:SqlDataSource EnableCaching="True" SqlCacheDependency="Northwind:Products" ... />

In web.config, use the following configuration:<caching>

<sqlCacheDependency enabled="true“ pollTime="1000"> <databases> <add name="Northwind“

connectionStringName="NorthwindConnectionString1"/> </databases> </sqlCacheDependency> </caching> Enable SQL server for SQL dependency: Execute following command in the

command prompt aspnet_regsql.exe -S %Server% -U %uid% -P %pwd% -d %Database% -t %TableName%

-et

19

Page 20: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Page/Fragment output cache : Best practices

Don’ts Generally use of output cache in pages that contain input

forms is not a good idea. Generally, it is good practice to not to use output caching

in pages that requires authentication. Don’t use output cache for static page. Don’t use output cache for page that contains lighter

content Don’t use output cache for page that generally executes

faster

20

Page 21: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Page/Fragment output cache : Best practices

Do’s Use output cache in public pages Use output cache for pages that executes slower Use output cache for pages that contains heavy

contents Use output cache for pages that are frequently

being accessed. Use Fragment cache (Output cache at User

controls) to cache varying common dynamic contents across the pages

21

Page 22: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Page/Fragment output cache : Best practices

Do’s Use Post cache substitution for fewer contents

in the pages that vary across different parameters

Use SQL dependency (With longer durations) with output cache for pages that uses data that are very frequently accessed, expensive to retrieve and that are not changed often.

Set smaller durations for output cache in pages that varies too much depending on input parameters, and/or, that are not frequently accessed

22

Page 23: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Page/Fragment output cache : Best practices

Do’s Use moderate duration for pages that are less

frequently accessed and/or that doesn’t vary too much with input parameters

Use long duration for pages that are very frequently accessed and/or that vary little with input parameters

Use Output cache profiles for better manageability (Configuring profiles in web.config)

23

Page 24: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Data Caching

What is data caching? Working with the cache object Cache dependencies Scavenging memory Using callbacks with caching

24

Page 25: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

What Is Data Caching?

The data cache holds application data such as strings, datasets, and other objects

Adding items to the data cache is easy

Although similar to the familiar application variables model, it is much more powerful

25

Cache [“counter”] = mycount.text

Application[“counter”] = mycount.text

Page 26: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Working with the Cache Object Cache object features

Dependencies allow logic to invalidate cached itemsScavenging (automatic expiration)Callbacks when an item is removed from cache

To use dependencies or callbacks, use Cache.Insert or Cache.Add

Code using cached items must be able to both create or insert, and retrieve cached items

26

Public DataSet GetProductData(){ if (Cache["ProductData“] = null) { Cache["ProductData“] = LoadDataSet(); }  Return Cache["ProductData“];}

Page 27: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Cache Dependencies File-based dependencies

Cached item invalidated when files change Key-based dependencies

Cached item invalided when another cached item changes

Time-based dependenciesAbsolute time-based invalidationsSliding time-based invalidations

SQL dependenciesSQL based invalidations

27

Page 28: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Scavenging(searching) Memory Automatic system that initiates when memory

becomes scarce(limited) Tag cached items with relative importance

CacheItemPriority CacheItemPriorityDecay

Items must be added to cache using .Add or .Insert to make use of these enumerations

28

Page 29: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

Using Callbacks with Caching Create Callbacks with this delegate:

CacheItemRemovedCallback Callbacks are used to receive notification when

an item is evicted from the cacheCleanupUpdateRecreateLogging

Items must be added to caching using .Add or .Insert to use callback functionality

29

Page 30: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

When to Cache on server Frequently hit pages

Content changes infrequently○ NYTimes.com○ ESPN.com○ Microsoft.com

Data is expensive to retrieveMIS 324

○ Weather forecast○ Amazon Best Sellers

Page 31: Overview  Introduction to ASP.NET caching  Output caching  Fragment caching  Data caching 1

When NOT to cache

Pages that change frequentlyShopping cartAmazon.com

○ Customized for each user

Personal data Infrequently accessed data

Cache must be stored Overheadcost depends upon caching method