如何對SharePoint網站進行預熱(warmup)以提升響應速度

問題描述

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

SharePoint 2007, 2010 or 2013 Application Warm-up Script

http://gallery.technet.microsoft.com/office/SharePoint-2007-2010-or-d1884b4b

 

使用這個腳本的方式,你能夠將腳本保存爲一個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

image

該腳本運行以後,我再去訪問上面列出的網站,就幾乎無需等待,立刻能夠看到頁面。優化

 

上面提到的方式是手工地運行腳本,那是否有辦法定時自動地運行這個腳本呢?固然能夠,只要你稍微掌握一些Powershell的概念,咱們能夠結合Windows自帶的「任務計劃」組件來實現自動化調度。

首先,咱們須要在這個腳本的頂部添加一句腳本:

Add-PsSnapin Microsoft.SharePoint.PowerShell

這句話的做用是將SharePoint的管理命令添加到Powershell。

而後,在控制面板中的任務計劃中,添加一個定時的任務

image

image

image

image

image

image

【備註】這裏的Program路徑以下,請替換掉紅色部分  C:\WINDOWS\System32\WindowsPowerShell\v1.0\PowerShell.exe -Version 2   "d:\training\moss2010\warmup.ps1"

image

另外,因爲該任務是自動運行的,請將下面兩個選項選中

image

 

 

第二個方案是結合IIS 的一個新模塊來實現

 

上面這種用腳本的方式看起來很不錯,不是嗎?除此以外,咱們還有一種服務器端的解決方案。由於SharePoint網站是被宿主在IIS這個服務器裏面的,微軟也針對咱們提到的這類問題改進了IIS。

在IIS 7(7.5)中,須要單獨安裝一個模塊

Warm up your SharePoint Web Applications on Windows 2008 R2 using the IIS 7.5 Application Warm-Up module

http://sharepointgeorge.com/2010/warm-sharepoint-web-applications-windows-2008-r2-iis-75-application-warmup-module/

 

若是使用IIS 8.0,則這個模塊已經內置在IIS中了,關於如何使用,請參考

IIS 8.0 Application Initialization

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization

 

須要注意的是,雖然咱們這篇文章討論的是關於SharePoint網站的預熱,但實際上以上兩個方案對於其餘網站也是適用的。

相關文章
相關標籤/搜索