Need to decide what is "High" – sometimes need to trade between scale and availability – is sometimes a judgement call
Speed of response is critical to website success – Amazon found that a 100ms increase in page response time led to a 1% drop in sales
Toolkit
Browser Test Tools
- Fiddler
- IE Developer Toolbar
- YSlow
Load Test Tools
- TinyGet
- Visual Studio Test Edition
- HP LoadRunner (aka Mercury)
External Tools
- SaaS load testers (eg Keynote)
What Impacts Performance ?
The Workload on the servers
Reducing the Workload on the Servers
- Follow best practice for scalability of SharePoint Farms
- Switch off unused services in SharePoint and Windows
- Separate Authoring Farm from Production Farm
- Set Content Databases on production to be Read-Only
- Use SQL Mirroring to synchronise between the Author and Production Farm (MSS 2010 feature)
- Can switch off services very easily on MSS 2010
-
Dont mix secure and insecure content
-
Apply standard .NET best practices
- Exception handling
- Defensively code your applications
- Do not catch exceptions you cannot handle
- Fail Early
- Clean up in Finaly {} blocks
- Understand how .NET manages objects
-
Managed Code best practises
- Be careful of what is going on under the hood
- List.items.count will hydrate every item in the list - use SPLIST.ItemCount
- Properly dispose of objects
- Aggregation / Rollup
- Use out of the box controls
-
Use SPLinq
- Never iterate through collections of strongly typed objects
-
Deployment techniques
- Deploy via Features and Solutions
- Keep Files uncustomized (safe mode parser is very expensive)
- Output caching – use anonymous profile
- BLOB caching
-
Offload work to other servers
- SSL - Resource intensive Can be dealt with by the firewall or dedicated hardware
-
Use 2010 Custom Service Apps
- Allows you to Offload expensive workloads to other servers
- In MSS 2010 use the developer dashboard – tells you where time is being spent loading the page
-
For SQL: scale UP to 8 procs, scale OUT after 8 procs
- Don't skimp on DB Server memory. Recommend 8G small, 16G medium, 32G large
- In MSS 2010 use resource throttling
Reducing the page payload
- Minimise Viewstate – must be as small as possible
- Use Valid XHTML – no INLINE STYLE
- Lazy Load JavaScript Files - remove them on the production farm f possible
- Use IIS Compression
- Payload could be 50% Images
- In web.config -> compilation -> debug =false could save up to 20% of payload.
Reducing the number of requests
-
Consolidate files together during the build
- Minimize the number of js and css files you are deploying – either manually or in MSBuild scripts
-
Use content delivery methods
- Use css sprites – something that allows you consolidate into one image many images and use css to display the correct image - Use the Aptimize product to do this
-
Use Content Delivery Networks (CDNs) – if site needs to go worldwide
- Content Delivery Networks cache content around the world
- Eg Host streaming media – Smooth HD from Microsoft and Akamai
- Host standard frameworks – JQuery and AJAX
- Host Complete Sites - uses Akamai or similar
High Availability
Farm topology
- Apply general availability best practise
- Move other services off your web front end servers
- Consider the usage profile
2010 improvements
-
Sandboxed solutions
- Allow system admin control over resourecs used by custom code
- Small performance hit for running in a separate thread
- Health Analyser and server monitoring – catch issues earlier
- Patch Management