頁收發(fā)消息是一個常見的系統(tǒng)應(yīng)用場景,通常我們有兩種方式來完成消息的發(fā)送,一種是通過客戶端來拉取消息,一種是服務(wù)端推送消息,到底使用哪種方式好一點(diǎn)呢?
具體使用哪種方式,我們需要根據(jù)實(shí)際的業(yè)務(wù)場景來分析,沒有絕對正確的方式,只有適不適合。所以,我們分析一下網(wǎng)頁端的用戶一般都存在哪些應(yīng)用場景:
我們拋開純技術(shù)實(shí)現(xiàn)不談,只是從解決方案來談,由于是使用的是網(wǎng)頁端,HTTP協(xié)議是通過“請求-響應(yīng)”的方式傳遞,網(wǎng)頁端和服務(wù)端之間是沒有消息通道的,那么怎么來實(shí)現(xiàn)消息的接收呢?
輪詢拉取可以說是所有消息的實(shí)現(xiàn)方案中最簡單的一種,實(shí)現(xiàn)起來也非常簡單。
大致的實(shí)現(xiàn)方法如下:
這種方式最大的優(yōu)勢就是實(shí)現(xiàn)非常簡單,而且容易理解,早期的聊天室基本都是這種實(shí)現(xiàn)方式,我曾經(jīng)給朋友做過一個答題的系統(tǒng),有多個終端,每個終端看到的內(nèi)容需要有所不同,也是使用的這種實(shí)現(xiàn)方式。
當(dāng)然這種實(shí)現(xiàn)方式的缺點(diǎn)也是非常明顯:
使用這種方式,時效性和效率是矛盾的,我降低timer的間隔時間,就可以提高時效性,但是會降低效率,例如:間隔時間降低到1秒,這種基本就可以趨近于實(shí)時了,但是可能300次輪詢才會拉到1條消息,有效性只有0.3%了。
所以,由于這個不可調(diào)和的矛盾存在,這種解決方案只能適用于一些同時在線用戶少,對實(shí)時性要求不高的場景中。
如果想要同時保證時效性和效率,其實(shí)長連接是一個不錯的選擇,一般我們的PC端聊天軟件都是使用的長連接方式來實(shí)現(xiàn)。而網(wǎng)頁端的長連接實(shí)現(xiàn)方式通常有兩種:
FlashSocket就不說了,如果不是網(wǎng)頁游戲的話其實(shí)很少會用到這個方案來做長連接,它要求用戶必須安裝了Flash插件。如果是HTML網(wǎng)頁端的話,其實(shí)更多會選擇WebSocket這種方案,WebSocket的優(yōu)點(diǎn)非常明顯,建立一次握手以后,服務(wù)端和網(wǎng)頁端就可以雙向通信了,擺脫了HTTP的Request-Response的限制,消息的及時性和效率都大幅度的提升了。
但是WebSocket也不是那么簡單,其中的坑也非常的多,如何單個生產(chǎn)者推送給多個消費(fèi)者,如何保證不重復(fù)推送,斷線以后的重連等等。當(dāng)然更重要的是,不同的瀏覽器對于WebSocket的支持可能不同,兼容性也是一大問題,所以使用得并不是很多。
那有沒有一種更常用的方法來處理消息的接收呢?
想要建立一條HTTP長輪詢的通道,我們需要在瀏覽器和服務(wù)器之間建立一條通知連接。
而這條通知連接不同于普通的HTTP連接,它要有一些特殊性:
怎么來Hold住這個請求呢?
個人認(rèn)為,長輪詢的請求就一直保持對消息隊列的數(shù)據(jù)拉取就行,如果有實(shí)時的消息來了,也等到它進(jìn)入消息隊列以后再處理,這樣可以防止消息丟失,也可以降低系統(tǒng)的復(fù)雜度。
總的來說,網(wǎng)頁端的消息接收,用什么方式好呢?拉和推都可以,每種方式有每種方式的優(yōu)缺點(diǎn)。
融界2024年7月9日消息,天眼查知識產(chǎn)權(quán)信息顯示,稅友軟件集團(tuán)股份有限公司取得一項名為“一種數(shù)據(jù)交互方法、系統(tǒng)、電子設(shè)備及存儲介質(zhì)“,授權(quán)公告號CN113010237B,申請日期為2021年3月。
專利摘要顯示,本發(fā)明公開了一種數(shù)據(jù)交互方法,包括:HTML程序利用HTML容器提供的服務(wù)接口生成本地資源獲取請求,并通過HTML容器的容器進(jìn)程將本地資源獲取請求發(fā)送至本地服務(wù)容器;本地服務(wù)容器利用本地服務(wù)容器中包含的業(yè)務(wù)服務(wù)對接收到的本地資源獲取請求進(jìn)行處理,得到相應(yīng)的本地資源數(shù)據(jù),并將本地資源數(shù)據(jù)發(fā)送至HTML容器;HTML容器接收本地資源數(shù)據(jù),并將本地資源數(shù)據(jù)發(fā)送至HTML程序;本方法中的HTML程序可直接使用HTML容器及本地服務(wù)容器進(jìn)行本地資源獲取,可確保HTML程序擺脫HTTP服務(wù)的束縛,以使HTML能夠更好地在本地程序中進(jìn)行應(yīng)用;本發(fā)明還提供數(shù)據(jù)交互系統(tǒng)、電子設(shè)備及存儲介質(zhì),具有上述有益效果。
本文源自金融界
覽器解析HTML文件的過程是網(wǎng)頁呈現(xiàn)的關(guān)鍵步驟之一。具體介紹如下:
HTML文檔的接收和預(yù)處理
解析為DOM樹
CSS解析與CSSOM樹構(gòu)建
JavaScript加載與執(zhí)行
渲染樹的構(gòu)建
布局計算(Layout)
繪制(Paint)
因此,我們開發(fā)中要注意以下幾點(diǎn):
綜上所述,瀏覽器解析HTML文件是一個復(fù)雜而高度優(yōu)化的過程,涉及從網(wǎng)絡(luò)獲取HTML文檔到最終將其渲染到屏幕上的多個步驟。開發(fā)者需要深入理解這些步驟,以優(yōu)化網(wǎng)頁性能和用戶體驗(yàn)。通過合理組織HTML結(jié)構(gòu)、優(yōu)化資源加載順序、減少不必要的DOM操作和合理安排CSS和JavaScript的加載與執(zhí)行,可以顯著提升頁面加載速度和運(yùn)行效率。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。