SharePoint Server是一個易於使用的協做平臺,目前在愈來愈多的企業中被應用開來。SharePoint Server是經過網站的形式向最終用戶提供服務的,而這個網站是基於ASP.NET 的技術實現的。因爲ASP.NET技術的特色,網站啓動以後,頁面在第一個用戶第一次訪問的時候,會須要進行所謂的JIT 編譯,而這個時間,對於該用戶來講,可能會顯得有點長。這也是你們廣泛反映的問題,爲何第一次要比較慢,而之後就較快了。css
另外,因爲ASP.NET網站會使用到應用程序池的技術,而應用程序池會定時或者不定時地進行回收。回收以後的網站,若是再次訪問,那麼又會發生JIT編譯。這就是爲何有些用戶反映說,爲何以前都比較快,而忽然次日又慢了,而後又快了。html
對於SharePoint網站的優化,若是從系統角度來講,是有不少方面的。我在之前的一篇文章中(http://www.cnblogs.com/chenxizhang/archive/2011/11/13/2246958.html)提到過幾點建議(請參考該文的結尾處)。但我今天要談一下的是,如何在不改變網站結構和設計的前提下,採用一些輔助手段,對網站進行預熱(warm up),以便能達到提升響應速度的目的。web
預熱的原理,其實很簡單,既然說ASP.NET的頁面第一次的JIT編譯是沒法避免的,那麼可否在第一個用戶第一次訪問以前,就經過某種方式去請求這個頁面,使得其編譯過程提早發生,這樣在用戶真正來訪問的時候,因爲頁面已經編譯好了,因此就能直接使用。shell
有這樣的思路以後,咱們就會想怎麼來作到呢?windows
請參考下面這篇文章,做者介紹了一個Powershell腳本,用來對網站api
使用這個腳本的方式,你能夠將腳本保存爲一個ps1文件,例如若是你是使用SharePoint 2010,則能夠將下面這段保存爲一個文件服務器
cls function get-webpage([string]$url,[System.Net.NetworkCredential]$cred=$null) { $wc = new-object net.webclient if($cred -eq $null) { $cred = [System.Net.CredentialCache]::DefaultCredentials; } $wc.credentials = $cred; return $wc.DownloadString($url); } # end Function foreach ($WebApp in (Get-SPWebApplication -IncludeCentralAdministration)) { $sites = $WebApp | Get-SPSite | get-spweb -Limit 15 foreach($site in $sites) { write-host "Warming up " $site.Url $html= get-webpage -url $site.Url -cred $cred $site.Dispose(); } # end loop for each sites } # end foreach web app
而後打開SharePoint 2010 Management Shell,運行這個ps1文件(注意,是ps1,而不是psl)app
我這邊運行的效果以下oop
該腳本運行以後,我再去訪問上面列出的網站,就幾乎無需等待,立刻能夠看到頁面。優化
上面提到的方式是手工地運行腳本,那是否有辦法定時自動地運行這個腳本呢?固然能夠,只要你稍微掌握一些Powershell的概念,咱們能夠結合Windows自帶的「任務計劃」組件來實現自動化調度。
首先,咱們須要在這個腳本的頂部添加一句腳本:
Add-PsSnapin Microsoft.SharePoint.PowerShell
這句話的做用是將SharePoint的管理命令添加到Powershell。
而後,在控制面板中的任務計劃中,添加一個定時的任務
【備註】這裏的Program路徑以下,請替換掉紅色部分 C:\WINDOWS\System32\WindowsPowerShell\v1.0\PowerShell.exe -Version 2 "d:\training\moss2010\warmup.ps1"
另外,因爲該任務是自動運行的,請將下面兩個選項選中
上面這種用腳本的方式看起來很不錯,不是嗎?除此以外,咱們還有一種服務器端的解決方案。由於SharePoint網站是被宿主在IIS這個服務器裏面的,微軟也針對咱們提到的這類問題改進了IIS。
若是使用IIS 8.0,則這個模塊已經內置在IIS中了,關於如何使用,請參考
http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization
須要注意的是,雖然咱們這篇文章討論的是關於SharePoint網站的預熱,但實際上以上兩個方案對於其餘網站也是適用的。