YSLOW性能測試前端調優23大規則:十九---減少cookie的大小

YSLOW性能測試前端調優23大規則:十九---減少cookie的大小

HTTP Cookie(也叫Web Cookie或瀏覽器Cookie)是服務器發送到用戶瀏覽器並保存在本地的一小塊數據,它會在瀏覽器下次向同一服務器再發起請求時被攜帶併發送到服務器上。通常,它用於告知服務端兩個請求是否來自同一瀏覽器,如保持用戶的登錄狀態。HTTP協議是無狀態的,即所有發送過的請求都不會被記錄下來,為了實現記錄一些穩定的狀態信息,在這些過程中添加了Cookie。

Cookie主要用於以下三個方面:

a) 會話狀態管理(如用戶登錄狀態、購物車、遊戲分數或其它需要記錄的信息)

b) 個性化設置(如用戶自定義設置、主題等)

c) 瀏覽器行為跟蹤(如跟蹤分析用戶行為等)

當服務器收到HTTP請求時,服務器可以在響應頭裡面添加一個Set-Cookie選項。瀏覽器收到響應後通常會保存下Cookie,之後對該服務器每一次請求中都通過Cookie請求頭部將Cookie信息發送給服務器。另外,Cookie的過期時間、域、路徑、有效期、適用站點都可以根據需要來指定。

服務器使用Set-Cookie響應頭部向用戶代理(一般是瀏覽器)發送Cookie信息。一個簡單的Cookie可能像這樣:

Set-Cookie: <cookie>=<cookie>/<cookie>

關於cookie通常有兩種類型:一是會話cookie;二是持久性cookie。

會話cookie是比較簡單的cookie,當瀏覽器關閉之後會話的cookie會被自動刪除,即會話cookie只在會話期內有效,所以會話期的cookie不需要指定過期時間(Expires)或有效期(Max-Age)。但需要注意的是有的瀏覽器提供會話恢復功能,這樣關閉瀏覽器會話cookie也會被保留下來。

持久cookie也會話cookie不同,持久cookie可以指定一個特定的過期時間,可以通過過期時間(Expires)或有效期(Max-Age)來指定。

Set-Cookie: id=a3fWa; Expires=Wed, 20 Oct 2019 08:27:00 GMT;

Cookie的工作原理如圖所示。

YSLOW性能測試前端調優23大規則:十九---減少cookie的大小

使用抓包工具可以看到一個請求中cookie工作的過程,如圖就是一個cookie的處理過程。

YSLOW性能測試前端調優23大規則:十九---減少cookie的大小

首先根據服務器響應頭中的Set-Cookie計算出Cookie的值,然後發送請求時在請求頭中會附帶Cookie一塊發送到服務器。上圖中的Cookie值內容如下。

Cookie:vjuids=173461ebf.1681c520089.0.f2ff3662a3228; vjlast=1546663363.1548567229.11; _ntes_nnid=a6e42f42f62a6885cfb245a50e5e7e73,1546663362710; _ntes_nuid=a6e42f42f62a6885cfb245a50e5e7e73; vinfo_n_f_l_n3=14dc7d14c27e42b0.1.34.1546663363061.1548567289154.1549176394131; UM_distinctid=1681c52358563c-077c8afbdaebad8-143a7540-100200-1681c523586365; __gads=ID=5fe7d3386d1856c9:T=1546663524:S=ALNI_Mb4nIopouscq3fAV-foo5zHXtu3jw; hb_MA-BFF5-63705950A31C_source=cp.study.163.com; mail_psc_fingerprint=12b8e026089881a72506b688d269cfda; Province=0; City=0; usertrack=ezq0o1xF23YwSdniI3xpAg==; NNSSPID=ceff2dd2db5c4497b308fb0feab0a16d; ne_analysis_trace_id=1549176348973; s_n_f_l_n3=14dc7d14c27e42b01549110593684; _antanalysis_s_id=1549110647552; NTES_SESS=v24UIcTIQBgw9lOLD1E5Y72JTzoDmsqOH0DhZYhfB.Qe.6Js.4TFkUJCi8zBkK6IlursgxxIw8oyOTANs9oLWilDD2uoLUftfP_LY5wa5GtUP29SV6AADiDOnYvbOod01Kx0WGaN.jyE1hct5CMbZ72l8AjC7.gDcjDlHuu21Z_SNbugkuflI.wNjolEikGLYcU9zNTPtPIyU; S_INFO=1549193437|0|2&70##|arivnhuang#[email protected]; [email protected]|1549193437|0|mail163|00&99|gud&1546868878&study#gud&440300#10#0#0|&0||[email protected]; mail_upx=t4gd.mail.163.com|t1gd.mail.163.com|t2gd.mail.163.com|t3gd.mail.163.com|t2bj.mail.163.com|t3bj.mail.163.com|t4bj.mail.163.com|t1bj.mail.163.com; mail_upx_nf=; mail_idc=; Coremail=987b4db0582ea%bAzIoQAhJvPRAomttbhhZapEEkiIEEcz%g3a25.mail.163.com; MAIL_MISC=arivnhuang#[email protected]; cm_last_info=dT1hcml2bmh1YW5nJTQwMTYzLmNvbSZkPWh0dHBzJTNBJTJGJTJGbWFpbC4xNjMuY29tJTJGanM2JTJGbWFpbi5qc3AlM0ZzaWQlM0RiQXpJb1FBaEp2UFJBb210dGJoaFphcEVFa2lJRUVjeiZzPWJBeklvUUFoSnZQUkFvbXR0YmhoWmFwRUVraUlFRWN6Jmg9aHR0cHMlM0ElMkYlMkZtYWlsLjE2My5jb20lMkZqczYlMkZtYWluLmpzcCUzRnNpZCUzRGJBeklvUUFoSnZQUkFvbXR0YmhoWmFwRUVraUlFRWN6Jnc9aHR0cHMlM0ElMkYlMkZtYWlsLjE2My5jb20mbD0tMSZ0PS0xJmFzPXRydWU=; MAIL_SESS=v24UIcTIQBgw9lOLD1E5Y72JTzoDmsqOH0DhZYhfB.Qe.6Js.4TFkUJCi8zBkK6IlursgxxIw8oyOTANs9oLWilDD2uoLUftfP_LY5wa5GtUP29SV6AADiDOnYvbOod01Kx0WGaN.jyE1hct5CMbZ72l8AjC7.gDcjDlHuu21Z_SNbugkuflI.wNjolEikGLYcU9zNTPtPIyU; MAIL_SINFO=1549193437|0|2&70##|arivnhuang#[email protected]; [email protected]|1549193437|0|mail163|00&99|gud&1546868878&study#gud&440300#10#0#0|&0||[email protected]; secu_info=1; mail_entry_sess=094fcd32f180436f814d019bf2f5fb228a56e60b9093b1387c31f785e7a9cb24407b006d97a01c7482850c4038132b507b3872c7cc276f04c77f2421407a21afa8b2a5f060170251c32bc6d7cdd0a31e4a8ab6fb0d7d70ac4be60338ce1da496e9ff8aab7a553b40f3632f157d544b99891c2061ec1d608ba71dbd0cecc510d99875de12ffb02ab89b164dd80a786af845ee1e82f38efb95920f47501109a1d85834a67e14ea8e33c6279fa245b3aebbde150a3c8e55757fce40215b53dcedb9; mail_style=js6; [email protected]; mail_host=mail.163.com

Cookie作為請求的一部分從瀏覽器發送到服務器端,所以我們希望Cookie的值越小越好,因為Cookie的值越小,傳輸的時間就會越少。

那麼如何計算Cookie的值呢?計算Cookie的大小就是按所包含的字符所佔的字節數來計算,對我們國內來說一般只有兩類字符,一是英文字符;二是中文字符。對於英文字符一般都是佔一個字節,對於中文編碼的字符,UTF8一箇中文佔3個字節,GB2312一箇中文佔2個字節,其他ASCII編碼都是一個字節。

當然在瀏覽器關於Cookie數據管理中也可以看到每個Cookie的大小,如圖為FireFox瀏覽器中關於Cookie管理的信息。

YSLOW性能測試前端調優23大規則:十九---減少cookie的大小

對於Cookie的使用,瀏覽器會有一定的限制,一般情況下每個Cookie大小不能超過4KB即4096個字節,並且每個域名所允許的Cookie數也會有限制,下面是一些常見瀏覽器對Cookie的限制,見表。

YSLOW性能測試前端調優23大規則:十九---減少cookie的大小

一般情況下對Cookie優化的方法有以下幾種:

1) 刪除不必要的Cookie,將一些不需要的Cookie可以禁用或直接刪除。

2) 減小Cookie的大小,儘量將Cookie的大小減小到最小化,這樣可以減少HTTP請求報文的大小。

3) 為Cookie設置一個合適的過期時間。

4) 通過使用不同的domain來減少cookie的使用,Cookie有時候在訪問一些資源時,如JS、CSS等,會出現很多一些多餘的Cookie,這樣可以使用domain來存儲這些靜態的資源,這樣不需要每次發送多餘的Cookie到服務器端


分享到:


相關文章: