真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Ajax請求與瀏覽器緩存的示例分析

這篇文章主要為大家展示了“Ajax請求與瀏覽器緩存的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Ajax請求與瀏覽器緩存的示例分析”這篇文章吧。

成都創(chuàng)新互聯(lián)公司長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為南海企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,南海網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

在現(xiàn)代Web應(yīng)用程序中,前端代碼充斥著大量的Ajax請求,如果對于Ajax請求可以使用瀏覽器緩存,那么可以顯著地減少網(wǎng)絡(luò)請求,提高程序響應(yīng)速度。

1. Ajax Request

使用jQuery框架可以很方便的進(jìn)行Ajax請求,示例代碼如下:

$.ajax({
  url : 'url',
  dataType : "xml",
  cache: true,
  success : function(xml, status){  
      }
});

非常簡單,注意其中的第4行代碼:cache:true,顯式的要求如果當(dāng)前請求有緩存的話,直接使用緩存。如果該屬性設(shè)置為 false,則每次都會向服務(wù)器請求,Jquery的Comments如下:

If set to false, it will force requested pages not to be cached by the browser. Setting cache to false also appends a query string parameter, "_=[TIMESTAMP]", to the URL.

前端的工作也就這么多了,這樣的話Ajax請求就可以利用瀏覽器緩存了嗎?

繼續(xù)看。

2. Http 協(xié)議

Http協(xié)議的header部分定義了關(guān)于客戶端是否應(yīng)該做Cache,以及如何做Cache。具體參見Http Header Field Definitions 的 14.9 Cache-Control 和 14.21 Expires。這里簡單說一下:

Cache-Control

Cache-control用于控制HTTP緩存(在HTTP/1.0中可能部分沒實(shí)現(xiàn),僅僅實(shí)現(xiàn)了Pragma: no-cache)

數(shù)據(jù)包中的格式:

Cache-Control: cache-directive

cache-directive可以為以下:

request時(shí)用到:

| "no-cache"
| "no-store"
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| "cache-extension"

response時(shí)用到:

| "public"
| "private" [ "=" <"> field-name <"> ]
| "no-cache" [ "=" <"> field-name <"> ]
| "no-store"
| "no-transform"
| "must-revalidate"
| "proxy-revalidate"
| "max-age" "=" delta-seconds
| "s-maxage" "=" delta-seconds
| "cache-extension"

說明:

-Public  指示響應(yīng)可被任何緩存區(qū)緩存。

-Private  指示對于單個(gè)用戶的整個(gè)或部分響應(yīng)消息,不能被共享緩存處理。這允許服務(wù)器僅僅描述當(dāng)用戶的部分響應(yīng)消息,此響應(yīng)消息對于其他用戶的請求無效。

-no-cache  指示請求或響應(yīng)消息不能緩存(HTTP/1.0用Pragma的no-cache替換)

-no-store  用于防止重要的信息被無意的發(fā)布。在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存。

-max-age  指示客戶端可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)。

-min-fresh  指示客戶端可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。

-max-stale  指示客戶端可以接收超出超時(shí)期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶端可以

接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。

Expires

Expires 表示Cache的有效時(shí)間,允許客戶端在這個(gè)時(shí)間之前不去發(fā)請求,等同max-age的效果。但是如果同時(shí)存在,則被Cache-Control的max-age覆蓋。
格式:Expires = "Expires" ":" HTTP-date
示例:Expires: Thu, 01 Dec 1994 16:00:00 GMT

Last-Modified

Last-Modified用GMT格式表明了文檔的最后修改時(shí)間,客戶端第二次請求此URL時(shí),會在頭部加入一個(gè)屬性,詢問該時(shí)間之后文件是否有被修改過。如果服務(wù)器端的文件沒有被修改過,則返回狀態(tài)是304,內(nèi)容為空,這樣就節(jié)省了傳輸數(shù)據(jù)量。

3. 我的問題

這幾天在做Web前端的時(shí)候,發(fā)現(xiàn)客戶端的每次Ajax都會從服務(wù)器端請求數(shù)據(jù),而這些數(shù)據(jù)的即時(shí)性沒有那么高,沒必要每次都請求。

在顯式的給Ajax加上cache為true后,發(fā)現(xiàn)問題依舊。于是懷疑是服務(wù)端的問題,服務(wù)端使用 jersey 搭建了基于Restful的服務(wù),代碼片段如下:

@GET
@Produces("application/xml")
public Response getProducts() {
     Response.ResponseBuilder response = Response.ok(data);
     return response.build();
}

添加Cache控制后,進(jìn)行測試,一切OK。

最后的代碼如下:

@GET
@Produces("application/xml")
public Response getProducts() {
     Response.ResponseBuilder response = Response.ok(data);
     // Expires 3 seconds from now..this would be ideally based
     // of some pre-determined non-functional requirement.
     Date expirationDate = new Date(System.currentTimeMillis() + 3000);
     response.expires(expirationDate);
     return response.build();
}

只是示例代碼,還可以進(jìn)行更精細(xì)的控制,例如使用CacheControl、Last-Modified等等。

以上是“Ajax請求與瀏覽器緩存的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁標(biāo)題:Ajax請求與瀏覽器緩存的示例分析
標(biāo)題URL:http://weahome.cn/article/jssejp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部