Alachisoft.com

Caching SharePoint View State

SharePoint web interface is an ASP.NET application running on WFE servers and just like any other ASP.NET application it also has to deal with View State becoming a performance overhead. StorageEdge helps you cache View State on WFE servers and send a much smaller payload to the user’s browser containing only a unique ID for this ViewState. As a result, your page performance improves and your SharePoint also scales much better.

Why Cache View State?

View State is an encrypted text string containing the state of web form controls and widgets and is sent to the user’s browser to preserve this state across post-backs. For forms with lot of controls, DataGrid control, or some other complex controls, the View State can become quite large. Here are some reasons why you should consider caching the View State.

  • View State is large (tens of kb) on large forms & DataGrid
  • Large View State slows down page download time
  • Large View State slows down post-back request time
  • Can cache View State on WFE servers & send only a token to user
  • View State cache is distributed to all WFE servers in the farm

How StorageEdge Caches View State?

View State is included in the response of a web request as a hidden form field called __VIEWSTATE. On all page visits during the save view state stage, the Page class gathers the collective view state for all of the controls in its control hierarchy and serializes the state to a base-64 encoded string. Below is an example of a View State.



<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kFgQCAQ9kFgICBQ9kFgJmD2QWAgIBDxYCHhNQcm
V2aW91c0NvbnRyb2xNb2RlCymIAU1pY3Jvc29mdC5TaGFyZVBvaW50LldlYkNvbnRyb2xzLlNQQ29udHJ
vbE1vZGUsIE1pY3Jvc29mdC5TaGFyZVBvaW50LCBWZXJzaW9uPTEyLjAuMC4wLCBDdWx0dXJlPW5ldXRy
YWwsIFB1YmxpY0tleVRva2VuPTcxZTliY2UxMTFlOTQyOWMBZAIDD2QWDgIBD2QWBgUmZ19lMzI3YTQwM
F83ZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD2RkZAUmZ18yNDQ3NmI4YV8xY2FlXzRmYTVfOTkxNl
8xYjIyZGYwNmMzZTQPZBYCZg8PZBYCHgVjbGFzcwUbbXMtc2J0YWJsZWFsdCBtcy1zYnRhYmxlLWV4ZAU
mZ181NmIxMzIzMV9kYjllXzRlYTZfOTc5ZF9iYWZlNDk3MDkyOWUPZBYCAgEPZBYCAgEPPCsADQEADxYE
HgtfIURhdGFCb3VuZGceC18hSXRlbUNvdW50Av////8PZGQCAw9kFgQCDQ9kFgJmD2QWBmYPFgIeBFRle
HQFJjxzcGFuIHN0eWxlPSdwYWRkaW5nLWxlZnQ6M3B4Jz48L3NwYW4+ZAICDw8WBB8EBQdNeSBTaXRlHg
tOYXZpZ2F0ZVVybAUlaHR0cDovL3Rlc3Q3Ojc3MC9fbGF5b3V0cy9NeVNpdGUuYXNweGRkAgQPFgIfBAU
5PHNwYW4gc3R5bGU9J3BhZGRpbmctbGVmdDo0cHg7cGFkZGluZy1yaWdodDozcHgnPnw8L3NwYW4+ZAIP
D2QWAmYPZBYCAgMPFgIfBAUBfGQCCQ9kFgICAQ9kFgJmD2QWAgIBDw9kFgIfAQUYbXMtc2J0YWJsZSBtc
y1zYnRhYmxlLWV4ZAILD2QWAgIDD2QWAmYPZBYEAgIPZBYIAgEPFgIeB1Zpc2libGVoZAIDDxYCHwZoZA
IFDxYCHwZoZAIHD2QWAmYPDxYGHhxQcmV2aW91c0F1dGhvcmluZ0l0ZW1WZXJzaW9uBQIxNR4aUHJldml
vdXNBdXRob3JpbmdJdGVtT3duZXIFATEeHFByZXZpb3VzQXV0aG9yaW5nQ29udHJvbE1vZGULKwQBZGQC
Aw8PFgIeCUFjY2Vzc0tleQUBL2RkAg8PZBYCAgEPZBYCZg9kFgICAw9kFgICAQ9kFgQCAQ8PFgIfBmhkF
hwCAQ8PFgIfBmhkZAIDDxYCHwZoZAIFDw8WAh8GaGRkAgcPFgIfBmhkAgkPDxYCHwZoZGQCCw8PFgIfBm
hkZAINDw8WAh8GaGRkAg8PDxYEHgdFbmFibGVkaB8GaGRkAhEPDxYCHwZoZGQCEw8PFgQfC2gfBmhkZAI
VDw8WAh8GaGRkAhcPFgIfBmhkAhkPFgIfBmhkAhsPDxYCHwZnZGQCAw9kFgICAw8PFgQeGHBlcnNpc3Rl
ZEVycm9yQWN0aW9uVHJlZWQeG3BlcnNpc3RlZEVycm9yQWN0aW9uVHJlZUlkc2RkZAIlD2QWAgIHDw8WA
h8GaGQWAgIFD2QWAgIBDzwrAAkBAA8WAh4NTmV2ZXJFeHBhbmRlZGdkZAIvD2QWAgIED2QWDgIDDxYCHw
ALKwQBZAIFDxYCHwALKwQBZAIHD2QWAmYPDxYCHwZoZGQCCQ9kFgJmDw8WAh8GaGRkAgsPZBYCZg8PFgI
fBmhkZAIND2QWAmYPDxYCHwZoZGQCDw9kFgJmDw8WAh8GaGRkGAIFOWN0bDAwJG0kZ181NmIxMzIzMV9k
YjllXzRlYTZfOTc5ZF9iYWZlNDk3MDkyOWUkY3RsMDEkZ3JpZA8UKwADPCsACgEIZgL/////DwL/////D
2QFRWN0bDAwJFBsYWNlSG9sZGVyVG9wTmF2QmFyJFBsYWNlSG9sZGVySG9yaXpvbnRhbE5hdiRUb3BOYX
ZpZ2F0aW9uTWVudQ8PZAUKQWxsIGluIE9uZWQiMPVaPthHdSA3rH8zgoNOvWxd4w==" />

Once StorageEdge caches this View State, it replaces the “id” and “value” fields with its own data. Here is an example of that.

<input type="hidden" name="__NCPVIEWSTATE" id="__NCPVIEWSTATE"
value="vs:cf8c8d3927ad4c1a84da7f891bb89185" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" />

Notice, how it is preserved the original "__VIEWSTATE" hidden field so everything works as if there was no View State. But, it has inserted its own "__NCPVIEWSTATE" field that it will read when a post-back request comes from the user to the web server. StorageEdge uses the "value" as the key to fetch the corresponding original View State from the in-memory cache and serves it to the ASP.NET page so it can populate the web form with data from the View State.

And, since the in-memory cache is distributed and synchronized across all WFE servers, even if the post-back request goes to a different WFE server in the farm than the original server where the View State was created, StorageEdge is able to find the View State value in the cache.