本申請(qǐng)涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種頁(yè)面異步渲染方法及裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,越來(lái)越多的用戶通過(guò)網(wǎng)絡(luò)獲取信息。用戶可以在終端上安裝瀏覽器,然后通過(guò)瀏覽器向服務(wù)器請(qǐng)求信息,服務(wù)器向?yàn)g覽器發(fā)送請(qǐng)求的信息,瀏覽器打開(kāi)頁(yè)面展示接收到的信息,其中,瀏覽器打開(kāi)頁(yè)面的過(guò)程就是渲染頁(yè)面的過(guò)程。
通常,一個(gè)頁(yè)面會(huì)包括多個(gè)區(qū)塊,區(qū)塊之間采用異步渲染的方式,并且一個(gè)區(qū)塊進(jìn)行渲染時(shí)可能需要依賴另一個(gè)區(qū)塊的區(qū)塊信息。如圖1所示為一個(gè)頁(yè)面的結(jié)構(gòu)示意圖,該頁(yè)面包括區(qū)塊A和區(qū)塊B,區(qū)塊B還包括一個(gè)子區(qū)塊,區(qū)塊B需要依賴區(qū)塊A的區(qū)塊信息完成對(duì)子區(qū)塊的渲染,下面說(shuō)明該頁(yè)面的異步渲染過(guò)程:區(qū)塊A和區(qū)塊B分別從服務(wù)器獲取各自的區(qū)塊信息并進(jìn)行渲染,區(qū)塊A將自身的區(qū)塊信息發(fā)送給區(qū)塊B,區(qū)塊B繼續(xù)根據(jù)區(qū)塊A的區(qū)塊信息對(duì)子區(qū)塊進(jìn)行渲染,從而完成整個(gè)頁(yè)面的渲染。為了及時(shí)獲取區(qū)塊A的區(qū)塊信息,區(qū)塊B需要定期輪詢區(qū)塊A,檢測(cè)到區(qū)塊A獲取區(qū)塊信息后,從區(qū)塊A獲取區(qū)塊A的區(qū)塊信息,然后根據(jù)區(qū)塊A的區(qū)塊信息完成渲染。
上述頁(yè)面異步渲染方法中,區(qū)塊B需要定期輪詢區(qū)塊A來(lái)檢測(cè)區(qū)塊A是否接收到區(qū)塊信息,這就會(huì)過(guò)多消耗中央處理器(Central Processing Unit,CPU)資源,影響整個(gè)頁(yè)面渲染效率。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供一種頁(yè)面異步渲染方法及裝置,用以解決相關(guān)技術(shù)中存在的過(guò)多消耗CPU資源,影響整個(gè)頁(yè)面渲染效率的問(wèn)題。
根據(jù)本申請(qǐng)實(shí)施例,提供一種頁(yè)面異步渲染方法,包括:
分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的;
保存接收到的區(qū)塊信息;
監(jiān)控是否已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
若已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,則將所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
具體的,保存接收到的區(qū)塊信息,具體包括:
確定數(shù)據(jù)變量中是否已保存接收到的區(qū)塊信息;
若數(shù)據(jù)變量中未保存接收到的區(qū)塊信息,則根據(jù)接收到的區(qū)塊信息的數(shù)量更新數(shù)量變量,并將接收到的區(qū)塊信息保存在所述數(shù)據(jù)變量中。
具體的,監(jiān)控是否已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,具體包括:
獲取所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量;
確定所述數(shù)量變量的數(shù)值是否等于所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量;
若所述數(shù)量變量的數(shù)值等于所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
若所述數(shù)量變量的數(shù)值小于所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定未保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息。
具體的,將所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,具體包括:
組合所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到所述當(dāng)前頁(yè)面的區(qū)塊信息集合;
將所述區(qū)塊信息集合分別發(fā)送給所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊。
具體的,組合所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到所述當(dāng)前頁(yè)面的區(qū)塊信息集合,具體包括:
獲取所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
隨機(jī)組合或者按照接收區(qū)塊信息的時(shí)間先后順序組合所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到所述當(dāng)前頁(yè)面的區(qū)塊信息集合。
具體的,以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染,具體包括:
以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊確定自身區(qū)塊是否完成渲染;
對(duì)于已完成渲染的區(qū)塊,則忽略接收到的所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
對(duì)于未完成渲染的區(qū)塊,則接收所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,從所述當(dāng) 前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
根據(jù)本申請(qǐng)實(shí)施例,還提供一種頁(yè)面異步渲染方法,包括:
分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的;
確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊;
將存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給關(guān)聯(lián)的區(qū)塊,以使接收到區(qū)塊信息的區(qū)塊完成對(duì)自身區(qū)塊的渲染。
具體的,確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊,具體包括:
獲取區(qū)塊信息與區(qū)塊的關(guān)聯(lián)關(guān)系表;
從所述關(guān)聯(lián)關(guān)系表中查找包括每個(gè)區(qū)塊信息的表項(xiàng);
從查找到的表項(xiàng)中獲取每個(gè)區(qū)塊信息對(duì)應(yīng)的區(qū)塊。
根據(jù)本申請(qǐng)實(shí)施例,還提供一種頁(yè)面異步渲染裝置,包括:
接收單元,用于分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的;
保存單元,用于保存接收到的區(qū)塊信息;
監(jiān)控單元,用于監(jiān)控是否已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
發(fā)送單元,用于若已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,則將所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
具體的,所述保存單元,用于保存接收到的區(qū)塊信息,具體用于:
確定數(shù)據(jù)變量中是否已保存接收到的區(qū)塊信息;
若數(shù)據(jù)變量中未保存接收到的區(qū)塊信息,則根據(jù)接收到的區(qū)塊信息的數(shù)量更新數(shù)量變量,并將接收到的區(qū)塊信息保存在所述數(shù)據(jù)變量中。
具體的,所述監(jiān)控單元,用于監(jiān)控是否已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,具體用于:
獲取所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量;
確定所述數(shù)量變量的數(shù)值是否等于所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量;
若所述數(shù)量變量的數(shù)值等于所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
若所述數(shù)量變量的數(shù)值小于所述當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定未保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息。
具體的,所述發(fā)送單元,用于將所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,具體用于:
組合所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到所述當(dāng)前頁(yè)面的區(qū)塊信息集合;
將所述區(qū)塊信息集合分別發(fā)送給所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊。
具體的,所述發(fā)送單元,用于組合所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到所述當(dāng)前頁(yè)面的區(qū)塊信息集合,具體用于:
獲取所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
隨機(jī)組合或者按照接收區(qū)塊信息的時(shí)間先后順序組合所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到所述當(dāng)前頁(yè)面的區(qū)塊信息集合。
具體的,所述發(fā)送單元,用于以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染,具體用于:
以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊確定自身區(qū)塊是否完成渲染;
對(duì)于已完成渲染的區(qū)塊,則忽略接收到的所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
對(duì)于未完成渲染的區(qū)塊,則接收所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
根據(jù)本申請(qǐng)實(shí)施例,還提供一種頁(yè)面異步渲染裝置,包括:
接收單元,用于分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的;
確定單元,用于確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊;
發(fā)送單元,用于將存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給關(guān)聯(lián)的區(qū)塊,以使接收到區(qū)塊信息的區(qū)塊完成對(duì)自身區(qū)塊的渲染。
具體的,所述確定單元,用于確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊,具體用于:
獲取區(qū)塊信息與區(qū)塊的關(guān)聯(lián)關(guān)系表;
從所述關(guān)聯(lián)關(guān)系表中查找包括每個(gè)區(qū)塊信息的表項(xiàng);
從查找到的表項(xiàng)中獲取每個(gè)區(qū)塊信息對(duì)應(yīng)的區(qū)塊。
本申請(qǐng)實(shí)施例提供一種頁(yè)面異步渲染方法及裝置,分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的;保存接收到的區(qū)塊信息;監(jiān)控是否已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;若已保存所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,則將所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。該方案中,無(wú)需一個(gè)區(qū)塊對(duì)另一個(gè)區(qū)塊定期輪詢,而是直接將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,由于當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都能接收到當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,從而確保當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都可以順利完成渲染,進(jìn)而確保整個(gè)當(dāng)前頁(yè)面完成異步渲染,由于區(qū)塊無(wú)需定期輪詢,從而節(jié)省了CPU資源,提高了整個(gè)當(dāng)前頁(yè)面的渲染效率。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1為相關(guān)技術(shù)中一個(gè)頁(yè)面的結(jié)構(gòu)示意圖;
圖2為本申請(qǐng)實(shí)施例中一種頁(yè)面異步渲染方法的流程圖;
圖3為本申請(qǐng)實(shí)施例中S22的流程圖;
圖4為本申請(qǐng)實(shí)施例中S23的流程圖;
圖5為本申請(qǐng)實(shí)施例中S24的流程圖;
圖6為本申請(qǐng)實(shí)施例中另一種頁(yè)面異步渲染方法的流程圖;
圖7為本申請(qǐng)實(shí)施例中再一種頁(yè)面異步渲染方法的流程圖;
圖8為本申請(qǐng)實(shí)施例中一種頁(yè)面異步渲染裝置的結(jié)構(gòu)示意圖;
圖9為本申請(qǐng)實(shí)施例中另一種頁(yè)面異步渲染裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本申請(qǐng)所要解決的技術(shù)問(wèn)題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合 附圖和實(shí)施例,對(duì)本申請(qǐng)進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本申請(qǐng),并不用于限定本申請(qǐng)。
為了解決相關(guān)技術(shù)中存在的過(guò)多消耗CPU資源,影響整個(gè)頁(yè)面渲染效率的問(wèn)題,本申請(qǐng)實(shí)施例提供一種頁(yè)面異步渲染方法,該方法可以但不限于應(yīng)用在終端設(shè)置的瀏覽器中,該方法的流程如圖2所示,包括如下步驟:
S21:分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的。
終端上設(shè)置的瀏覽器可以同時(shí)打開(kāi)多個(gè)頁(yè)面,當(dāng)前正在顯示的頁(yè)面為當(dāng)前頁(yè)面。
當(dāng)前頁(yè)面可能包括多個(gè)區(qū)塊,每個(gè)區(qū)塊可以單獨(dú)向服務(wù)器請(qǐng)求各自的區(qū)塊信息,每個(gè)區(qū)塊接收到服務(wù)器反饋的區(qū)塊信息后對(duì)自身區(qū)塊進(jìn)行渲染,并將接收到的區(qū)塊信息發(fā)送給瀏覽器。
S22:保存接收到的區(qū)塊信息。
瀏覽器接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,并進(jìn)行保存。
S21和S22兩個(gè)步驟的實(shí)現(xiàn)方式可以靈活設(shè)置,可以是實(shí)時(shí)的,即接收到當(dāng)前頁(yè)面包括的一個(gè)區(qū)塊發(fā)送的區(qū)塊信息就會(huì)保存一個(gè);也可以是非實(shí)時(shí)的,即接收到設(shè)定個(gè)數(shù)的區(qū)塊信息后再保存。
S23:監(jiān)控是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息。
以設(shè)定周期監(jiān)控是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,其中,設(shè)定周期可以根據(jù)實(shí)際需要進(jìn)行設(shè)定,例如,設(shè)定為1秒、5秒、10秒等等。
S21與S23沒(méi)有嚴(yán)格的先后順序,兩個(gè)步驟可以同時(shí)執(zhí)行,也可以先后執(zhí)行。
S24:若已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,則將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,以使當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
瀏覽器需要監(jiān)控是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,若未保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,說(shuō)明瀏覽器未獲取到當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊進(jìn)行渲染所需要的區(qū)塊信息,還需要繼續(xù)執(zhí)行S23進(jìn)行監(jiān)控;若已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,說(shuō)明瀏覽器已獲取到當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊進(jìn)行渲染所需要的區(qū)塊信息,則可以將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊確定自身區(qū)塊是否完成渲染,對(duì)于在S21之前已完成渲染的區(qū)塊,則忽略接收到的當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;對(duì)于在S21之前未完成渲染的區(qū)塊, 則接收當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,從當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染,從而實(shí)現(xiàn)對(duì)整個(gè)頁(yè)面的異步渲染。
該方案中,無(wú)需一個(gè)區(qū)塊對(duì)另一個(gè)區(qū)塊定期輪詢,而是直接將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,由于當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都能接收到當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,從而確保當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都可以順利完成渲染,進(jìn)而確保整個(gè)當(dāng)前頁(yè)面完成異步渲染,由于區(qū)塊無(wú)需定期輪詢,從而節(jié)省了CPU資源,提高了整個(gè)當(dāng)前頁(yè)面的渲染效率。
下面詳細(xì)介紹上述頁(yè)面異步渲染方法的每個(gè)步驟。
具體的,上述S22中的保存接收到的區(qū)塊信息的實(shí)現(xiàn)過(guò)程,如圖3所示,具體包括以下步驟:
S221:確定數(shù)據(jù)變量中是否已保存接收到的區(qū)塊信息。
S222:若數(shù)據(jù)變量中未保存接收到的區(qū)塊信息,則根據(jù)接收到的區(qū)塊信息的數(shù)量更新數(shù)量變量,并將接收到的區(qū)塊信息保存在數(shù)據(jù)變量中。
可以設(shè)置兩個(gè)變量來(lái)保存接收到的區(qū)塊信息,即數(shù)量變量(data)和數(shù)據(jù)變量(state),data標(biāo)識(shí)接收到的區(qū)塊信息的數(shù)量,state保存接收到的區(qū)塊信息。
在保存接收到的區(qū)塊信息時(shí),首先確定state中是否保存接收到的區(qū)塊信息,若未保存,則根據(jù)接收到的區(qū)塊信息的數(shù)量更新data,并將接收到的區(qū)塊信息保存在state中,例如,在接收到區(qū)塊信息時(shí),若區(qū)塊信息的數(shù)量為1,則將data增加1,若區(qū)塊信息的數(shù)量為5,則將data增加5,同時(shí)將接收到的區(qū)塊信息保存在state中。
當(dāng)然保存接收到的區(qū)塊信息的方式有很多種,其他方式這里不再贅述。
具體的,上述S23中的監(jiān)控是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息的實(shí)現(xiàn)過(guò)程,如圖4所示,具體包括以下步驟:
S231:獲取當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量。
當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量是一定的,獲取的方式有多種,既可以從服務(wù)器獲取,也可以從當(dāng)前頁(yè)面的屬性信息中獲取,還可以直接統(tǒng)計(jì)當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量。
S232:確定數(shù)量變量的數(shù)值是否等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,若數(shù)量變量的數(shù)值等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則執(zhí)行S233;若數(shù)量變量的數(shù)值小于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則執(zhí)行S234。
S233:確定已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息。
S234:確定未保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息。
區(qū)塊信息的保存方式不同時(shí),確定是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息的方式也可能不同,若采用數(shù)量變量標(biāo)識(shí)接收到的區(qū)塊信息的數(shù)量,可以根據(jù)數(shù)量變量的數(shù)值是否等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量來(lái)確定是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,若數(shù)量變量的數(shù)值等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;若數(shù)量變量的數(shù)值小于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定未保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息。
具體的,上述S24中的將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊的實(shí)現(xiàn)過(guò)程,如圖5所示,具體包括以下步驟:
S241:組合當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合。
將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊時(shí),可以首先組合當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合。具體實(shí)現(xiàn)過(guò)程為,首先獲取當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,然后隨機(jī)組合或者按照接收區(qū)塊信息的時(shí)間先后順序組合當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合。
S242:將區(qū)塊信息集合分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊。
將S241中得到的當(dāng)前頁(yè)面的區(qū)塊信息集合發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,從而便于當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從該區(qū)塊信息集合中獲取需要的區(qū)塊信息完成渲染,進(jìn)而保證當(dāng)前頁(yè)面順利完成異步渲染,由于區(qū)塊無(wú)需定期輪詢,從而節(jié)省了CPU資源,提高了整個(gè)當(dāng)前頁(yè)面的渲染效率。
本申請(qǐng)實(shí)施例還提供另一種頁(yè)面異步渲染方法,該方法以圖1所示的頁(yè)面進(jìn)行異步渲染為例進(jìn)行說(shuō)明,該方法可以但不限于應(yīng)用在終端上設(shè)置的瀏覽器中,流程如圖6所示,具體包括以下步驟:
S61:分別接收區(qū)塊A和區(qū)塊B發(fā)送的各自的區(qū)塊信息。
區(qū)塊A和區(qū)塊B的區(qū)塊信息是區(qū)塊A和區(qū)塊B分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送給瀏覽器的。
S62:確定state中是否已保存接收到的區(qū)塊信息;若state中未保存接收到的區(qū)塊信息,則根據(jù)接收到的區(qū)塊信息的數(shù)量更新data,并將接收到的區(qū)塊信息保存在state中。
在保存區(qū)塊A的區(qū)塊信息或者區(qū)塊B的區(qū)塊信息后,若data當(dāng)前的數(shù)值為0,則將data的數(shù)值更新為1;若data的數(shù)值為1,則將data的數(shù)值更新為2;并將接收到區(qū)塊信息保存在state中。
S63:獲取當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量。
由于當(dāng)前頁(yè)面包括兩個(gè)區(qū)塊,所以該數(shù)量為2。
S64:確定數(shù)量變量的數(shù)值是否等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,若數(shù)量變量的數(shù)值等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則執(zhí)行S65;若數(shù)量變量的數(shù)值小于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則執(zhí)行S66。
S65:確定已保存區(qū)塊A和區(qū)塊B的區(qū)塊信息,執(zhí)行S67。
S66:確定未保存區(qū)塊A和區(qū)塊B的區(qū)塊信息,執(zhí)行S64。
S67:獲取區(qū)塊A和區(qū)塊B的區(qū)塊信息,然后隨機(jī)組合區(qū)塊A和區(qū)塊B的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合。
S68:將區(qū)塊信息集合分別發(fā)送給區(qū)塊A和區(qū)塊B,以使區(qū)塊A和區(qū)塊B從當(dāng)前頁(yè)面的區(qū)塊信息集合中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
由于區(qū)塊A僅根據(jù)自身的區(qū)塊信息就可以完成渲染,在S61之前區(qū)塊A已完成渲染,因此區(qū)塊A接收到區(qū)塊信息集合后無(wú)需再對(duì)自身區(qū)塊進(jìn)行渲染;而區(qū)塊B不僅需要自身的區(qū)塊信息,還需要區(qū)塊A的區(qū)塊信息,因此,在S61之前區(qū)塊B僅完成部分渲染,那么在接收到區(qū)塊信息集合后,還需要從區(qū)塊信息集合中獲取區(qū)塊A的區(qū)塊信息,并根據(jù)區(qū)塊A的區(qū)塊信息對(duì)子區(qū)塊進(jìn)行渲染,從而完成整個(gè)當(dāng)前頁(yè)面的渲染。
該方案中,無(wú)需區(qū)塊B對(duì)定期輪詢區(qū)塊A,而是直接組合區(qū)塊A的區(qū)塊信息和區(qū)塊B的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合,然后將區(qū)塊信息集合發(fā)送給區(qū)塊A和區(qū)塊B,由于區(qū)塊A和區(qū)塊B都能接收到區(qū)塊信息集合,從而確保區(qū)塊A和區(qū)塊B都可以順利完成渲染,進(jìn)而確保整個(gè)當(dāng)前頁(yè)面完成異步渲染,由于區(qū)塊B無(wú)需定期輪詢區(qū)塊A,從而節(jié)省了CPU資源,提高了整個(gè)當(dāng)前頁(yè)面的渲染效率。
基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供再一種頁(yè)面異步渲染方法,該方法可以但不限于應(yīng)用在終端設(shè)置的瀏覽器中,該方法的流程如圖7所示,具體包括以下步驟:
S71:分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的。
終端上設(shè)置的瀏覽器可以同時(shí)打開(kāi)多個(gè)頁(yè)面,當(dāng)前正在顯示的頁(yè)面為當(dāng)前頁(yè)面。
當(dāng)前頁(yè)面可以包括很多區(qū)塊,每個(gè)區(qū)塊可以單獨(dú)向服務(wù)器請(qǐng)求各自的區(qū)塊信息,每個(gè)區(qū)塊接收到服務(wù)器反饋的區(qū)塊信息后對(duì)自身區(qū)塊進(jìn)行渲染,并將接收到的區(qū)塊信息發(fā)送給瀏覽器。
S72:確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊。
由于當(dāng)前頁(yè)面包括的區(qū)塊是一定的,可以預(yù)先建立區(qū)塊信息與區(qū)塊的關(guān)聯(lián)關(guān)系,在接 收到區(qū)塊信息后,獲取該關(guān)聯(lián)關(guān)系表,從該關(guān)聯(lián)關(guān)系表中查找包括每個(gè)區(qū)塊信息的表項(xiàng),從查找到的表項(xiàng)中獲取每個(gè)區(qū)塊信息對(duì)應(yīng)的區(qū)塊。參見(jiàn)圖1所示的頁(yè)面,可以關(guān)聯(lián)區(qū)塊A的區(qū)塊信息與區(qū)塊B,在接收到區(qū)塊A的區(qū)塊信息后,從而確定區(qū)塊A的區(qū)塊信息關(guān)聯(lián)的區(qū)塊為區(qū)塊B。
S73:將存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給關(guān)聯(lián)的區(qū)塊,以使接收到區(qū)塊信息的區(qū)塊完成對(duì)自身區(qū)塊的渲染。
繼續(xù)沿用上例,區(qū)塊B接收到區(qū)塊A的區(qū)塊信息后,可以根據(jù)區(qū)塊A的區(qū)塊信息完成對(duì)自身區(qū)塊的渲染,進(jìn)而實(shí)現(xiàn)整個(gè)頁(yè)面的異步渲染。
該方案中,無(wú)需一個(gè)區(qū)塊對(duì)另一個(gè)區(qū)塊定期輪詢,而是分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊,然后將存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給關(guān)聯(lián)的區(qū)塊,以使接收到區(qū)塊信息的區(qū)塊完成對(duì)自身區(qū)塊的渲染,由于直接存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給對(duì)應(yīng)的區(qū)塊,也就確保當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都能獲取到完成渲染需要的所有區(qū)塊信息,從而確保當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都可以順利完成渲染,進(jìn)而確保整個(gè)當(dāng)前頁(yè)面完成異步渲染,由于區(qū)塊無(wú)需定期輪詢,從而節(jié)省了CPU資源,提高了整個(gè)當(dāng)前頁(yè)面的渲染效率。
基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供一種頁(yè)面異步渲染裝置,該裝置與如圖2所示的頁(yè)面渲染方法相對(duì)應(yīng),可以但不限于設(shè)置在終端中,該裝置的結(jié)構(gòu)如8圖所示,包括接收單元81、保存單元82、監(jiān)控單元83和發(fā)送單元84。其中:
上述接收單元81,用于分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的;
上述保存單元82,用于保存接收到的區(qū)塊信息;
上述監(jiān)控單元83,用于監(jiān)控是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
上述發(fā)送單元84,用于若已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,則將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,以使當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
該方案中,無(wú)需一個(gè)區(qū)塊對(duì)另一個(gè)區(qū)塊定期輪詢,而是直接將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,由于當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都能接收到當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,從而確保當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都可以順利完成渲染,進(jìn)而確保整個(gè)當(dāng)前頁(yè)面完成異步渲染,由于區(qū)塊無(wú)需定期輪詢,從而節(jié)省了CPU資 源,提高了整個(gè)當(dāng)前頁(yè)面的渲染效率。
具體的,上述保存單元82,用于保存接收到的區(qū)塊信息,具體用于:
確定數(shù)據(jù)變量中是否已保存接收到的區(qū)塊信息;
若數(shù)據(jù)變量中未保存接收到的區(qū)塊信息,則根據(jù)接收到的區(qū)塊信息的數(shù)量更新數(shù)量變量,并將接收到的區(qū)塊信息保存在數(shù)據(jù)變量中。
具體的,上述監(jiān)控單元83,用于監(jiān)控是否已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,具體用于:
獲取當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量;
確定數(shù)量變量的數(shù)值是否等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量;
若數(shù)量變量的數(shù)值等于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定已保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
若數(shù)量變量的數(shù)值小于當(dāng)前頁(yè)面包括的區(qū)塊的數(shù)量,則確定未保存當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息。
具體的,上述發(fā)送單元84,用于將當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊,具體用于:
組合當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合;
將區(qū)塊信息集合分別發(fā)送給當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊。
具體的,上述發(fā)送單元84,用于組合當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合,具體用于:
獲取當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
隨機(jī)組合或者按照接收區(qū)塊信息的時(shí)間先后順序組合當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,得到當(dāng)前頁(yè)面的區(qū)塊信息集合。
具體的,上述發(fā)送單元84,用于以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染,具體用于:
以使所述當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊確定自身區(qū)塊是否完成渲染;
對(duì)于已完成渲染的區(qū)塊,則忽略接收到的所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息;
對(duì)于未完成渲染的區(qū)塊,則接收所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息,從所述當(dāng)前頁(yè)面包括的所有區(qū)塊的區(qū)塊信息中獲取需要的區(qū)塊信息,并完成對(duì)自身區(qū)塊的渲染。
基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例還提供另一種頁(yè)面異步渲染裝置,該裝置與圖7所示的頁(yè)面渲染方法相對(duì)應(yīng),可以但不限于設(shè)置在終端中,該裝置的結(jié)構(gòu)如圖9所示,包括接收單元91、確定單元92和發(fā)送單元93,其中:
上述接收單元91,用于分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,各個(gè)區(qū)塊的區(qū)塊信息是對(duì)應(yīng)區(qū)塊分別從服務(wù)器獲取的,并根據(jù)獲取的區(qū)塊信息對(duì)自身區(qū)塊進(jìn)行渲染后發(fā)送的;
上述確定單元92,用于確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊;
上述發(fā)送單元93,用于將存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給關(guān)聯(lián)的區(qū)塊,以使接收到區(qū)塊信息的區(qū)塊完成對(duì)自身區(qū)塊的渲染。
該方案中,無(wú)需一個(gè)區(qū)塊對(duì)另一個(gè)區(qū)塊定期輪詢,而是分別接收當(dāng)前頁(yè)面包括的各個(gè)區(qū)塊發(fā)送的各自的區(qū)塊信息,確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊,然后將存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給關(guān)聯(lián)的區(qū)塊,以使接收到區(qū)塊信息的區(qū)塊完成對(duì)自身區(qū)塊的渲染,由于直接存在關(guān)聯(lián)區(qū)塊的區(qū)塊信息發(fā)送給對(duì)應(yīng)的區(qū)塊,也就確保當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都能獲取到完成渲染需要的所有區(qū)塊信息,從而確保當(dāng)前頁(yè)面包括的每個(gè)區(qū)塊都可以順利完成渲染,進(jìn)而確保整個(gè)當(dāng)前頁(yè)面完成異步渲染,由于區(qū)塊無(wú)需定期輪詢,從而節(jié)省了CPU資源,提高了整個(gè)當(dāng)前頁(yè)面的渲染效率。
具體的,上述確定單元92,用于確定接收到的每個(gè)區(qū)塊信息關(guān)聯(lián)的區(qū)塊,具體用于:
獲取區(qū)塊信息與區(qū)塊的關(guān)聯(lián)關(guān)系表;
從所述關(guān)聯(lián)關(guān)系表中查找包括每個(gè)區(qū)塊信息的表項(xiàng);
從查找到的表項(xiàng)中獲取每個(gè)區(qū)塊信息對(duì)應(yīng)的區(qū)塊。
上述說(shuō)明示出并描述了本申請(qǐng)的優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本申請(qǐng)并非局限于本文所披露的形式,不應(yīng)看作是對(duì)其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過(guò)上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識(shí)進(jìn)行改動(dòng)。而本領(lǐng)域人員所進(jìn)行的改動(dòng)和變化不脫離本申請(qǐng)的精神和范圍,則都應(yīng)在本申請(qǐng)所附權(quán)利要求的保護(hù)范圍內(nèi)。