溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

WEB開發(fā)中flush讓頁面分塊逐步呈現(xiàn)

發(fā)布時(shí)間:2021-06-24 09:17:42 來源:億速云 閱讀:150 作者:chen 欄目:web開發(fā)

本篇內(nèi)容主要講解“WEB開發(fā)中flush讓頁面分塊逐步呈現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“WEB開發(fā)中flush讓頁面分塊逐步呈現(xiàn)”吧!

正對(duì)這種情況,還有一種處理方法,就是讓response分塊編碼進(jìn)行傳輸。response分塊編碼,可以先傳輸一部分不需要處理的html代碼到客戶端,等其他耗時(shí)代碼執(zhí)行完畢后再傳輸另外的html代碼。

分塊編碼(chunked encoding)

chunked encoding 是http1.1 才支持編碼格式(當(dāng)然目前沒有哪個(gè)瀏覽器不支持1.1了),chunked encoding 與一般的響應(yīng)區(qū)別如下:

正常的響應(yīng):      HTTP/1.1 200 OK      Cache-Control: private, max-age=60     Content-Length: 75785      Content-Type: text/html; charset=utf-8      ..其他response headers               <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
chunked encoding 響應(yīng):     HTTP/1.1 200 OK     Cache-Control: private, max-age=60    Content-Length: 75785     Content-Type: text/html; charset=utf-8     Transfer-Encoding: chunked     ..其他response headers           chunk #1(這里通常是16進(jìn)制的數(shù)字,標(biāo)志這個(gè)塊的大小)     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"....         chunk #2     <div .....         chunk #3     ....</body></html>

實(shí)例(JSP)

一個(gè)簡(jiǎn)單的頁面,分為頭部(header)和內(nèi)容(部分),假設(shè)內(nèi)容部分需要讀取數(shù)據(jù)庫,花費(fèi)3秒時(shí)間,然后顯示csdn的logo。header部分顯示cnblogs的logo。代碼如下:

<body>     <div id="head" style="border:1px solid #ccc;">        cnblogs logo <img src="http://images.cnblogs.com/logo_small.gif" />         </div>     <br />     <div id="content" style="border:1px solid blue;">     <%          // 睡眠3秒          Thread.currentThread().sleep(3000);      %>         csdn logo<br />         <img src="http://csdnimg.cn/www/images/csdnindex_piclogo.gif" />         </div> </body>

演示地址:http://213.186.44.204:8080/ChunkTest/nochunk.jsp (服務(wù)器比較差,請(qǐng)大家溫柔點(diǎn))

打開這個(gè)演示地址發(fā)現(xiàn)很正常的頁面,在3秒后才開始下載顯示2個(gè)logo,資源加載瀑布圖如下:

WEB開發(fā)中flush讓頁面分塊逐步呈現(xiàn)

現(xiàn)在把代碼改成如下,加上flush,讓response把之前的html分塊輸出:

<div id="head" style="border:1px solid #ccc;">    cnblogs logo <img src="http://images.cnblogs.com/logo_small.gif" />     </div> <%      out.flush(); // flush response,分塊輸出  %> <br /> <div id="content" style="border:1px solid blue;">     <%          // 睡眠3秒          Thread.currentThread().sleep(3000);      %>     csdn logo<br />     <img src="http://csdnimg.cn/www/images/csdnindex_piclogo.gif" />     </div>

演示地址:http://213.186.44.204:8080/ChunkTest/chunk.jsp

打開這個(gè)演示地址,是不是發(fā)現(xiàn)cnblogs logo先下載顯示出來,3秒后csdn logo才顯示,資源加載圖如下:

WEB開發(fā)中flush讓頁面分塊逐步呈現(xiàn)

從這個(gè)圖發(fā)現(xiàn),cnblogs的logo在jsp頁面還沒執(zhí)行完就開始下載了,這就是分塊輸出的效果。

監(jiān)控工具:

如何知道我們是否成功使用了chunk encoding了 ,只要用工具查看response header 中是否包含了Transfer-Encoding: chunked,如果包含了,則是分塊了。但要想監(jiān)控分塊的詳細(xì)信息,據(jù)我所知,目前只有httpwatch支持,可以查看我們到底分了多少塊,但是數(shù)量好像都多顯示了1個(gè),如下圖:

WEB開發(fā)中flush讓頁面分塊逐步呈現(xiàn)

到此,相信大家對(duì)“WEB開發(fā)中flush讓頁面分塊逐步呈現(xiàn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI