一種基于javascript的主動(dòng)監(jiān)聽(tīng)方法及裝置的制造方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種基于javascript的主動(dòng)監(jiān)聽(tīng)方法及裝置。所述方法包括以下步驟:(1)執(zhí)行特定的功能函數(shù),并獲取下步執(zhí)行標(biāo)簽和時(shí)間間隔參數(shù);(2)當(dāng)執(zhí)行標(biāo)簽為否時(shí),結(jié)束監(jiān)聽(tīng);否則,即當(dāng)執(zhí)行標(biāo)簽為是時(shí),等待所述間隔時(shí)間,當(dāng)間隔時(shí)間到達(dá)時(shí),進(jìn)入步驟(1)。所述裝置包括:計(jì)時(shí)模塊,用于在間隔時(shí)間到時(shí)通知執(zhí)行模塊,并在執(zhí)行完成后獲取間隔時(shí)間,繼續(xù)計(jì)時(shí);所述執(zhí)行模塊,用于接收計(jì)時(shí)模塊的通知后執(zhí)行指定功能。所述方法及裝置優(yōu)化了基于javascript的主動(dòng)監(jiān)聽(tīng)性能,幾乎沒(méi)有延時(shí)。
【專(zhuān)利說(shuō)明】
一種基于javascr i pt的主動(dòng)監(jiān)聽(tīng)方法及裝置
技術(shù)領(lǐng)域
[0001 ]本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,更具體地,涉及一種基于javascript的主動(dòng)監(jiān)聽(tīng)方 法及裝置。
【背景技術(shù)】
[0002] JavaScript-種直譯式腳本語(yǔ)言,是一種動(dòng)態(tài)類(lèi)型、弱類(lèi)型、基于原型的語(yǔ)言,內(nèi) 置支持類(lèi)型。它的解釋器被稱(chēng)為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶(hù)端的腳 本語(yǔ)言,最早是在HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)網(wǎng)頁(yè)上使用,用來(lái)給HTML網(wǎng)頁(yè)增 加動(dòng)態(tài)功能。
[0003] Javascript-般采用set interval原生的監(jiān)聽(tīng)方法,即每隔一段時(shí)間執(zhí)行一次功 能函數(shù),然而這種使得程序的可擴(kuò)展性和可維護(hù)性不強(qiáng),甚至影響運(yùn)行環(huán)境的性能,導(dǎo)致功 能紊亂。因此需要基于javascript,重構(gòu)一種主動(dòng)監(jiān)聽(tīng)方法。
【發(fā)明內(nèi)容】
[0004] 針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于javascript的主動(dòng) 監(jiān)聽(tīng)方法及裝置,其目的在于通過(guò)優(yōu)化函數(shù)實(shí)現(xiàn)主動(dòng)監(jiān)聽(tīng)方法,實(shí)現(xiàn)性能優(yōu)化,由此解決現(xiàn) 有的基于j a v a s c r i p t的主動(dòng)監(jiān)聽(tīng)方法性能不佳的技術(shù)問(wèn)題。
[0005] 為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了種基于javascript的主動(dòng)監(jiān)聽(tīng) 方法,包括以下步驟:
[0006] (1)執(zhí)行特定的功能函數(shù),并獲取下步執(zhí)行標(biāo)簽和時(shí)間間隔參數(shù);
[0007] (2)當(dāng)執(zhí)行標(biāo)簽為否時(shí),結(jié)束監(jiān)聽(tīng);否則,即當(dāng)執(zhí)行標(biāo)簽為是時(shí),等待所述間隔時(shí) 間,當(dāng)間隔時(shí)間到達(dá)時(shí),進(jìn)入步驟(1)。
[0008] 優(yōu)選地,所述基于javascript的主動(dòng)監(jiān)聽(tīng)方法,其步驟(1)所述時(shí)間間隔為定值。
[0009] 優(yōu)選地,所述基于javascript的主動(dòng)監(jiān)聽(tīng)方法,其還包括步驟:
[0010] (3)獲取立刻執(zhí)行標(biāo)簽,當(dāng)所述立刻執(zhí)行標(biāo)簽為是時(shí),立即執(zhí)行步驟(1)。
[0011] 按照本發(fā)明的另一個(gè)方面提供了一種基于javascript的主動(dòng)監(jiān)聽(tīng)裝置,其特征在 于,包括:
[0012] 計(jì)時(shí)模塊,用于在間隔時(shí)間到時(shí)通知執(zhí)行模塊,并在執(zhí)行完成后獲取間隔時(shí)間,繼 續(xù)計(jì)時(shí);
[0013] 所述執(zhí)行模塊,用于接收計(jì)時(shí)模塊的通知后執(zhí)行指定功能。
[0014] 優(yōu)選地,所述基于javascript的主動(dòng)監(jiān)聽(tīng)裝置,包括
[0015] 控制模塊,用于提供控制狀態(tài),當(dāng)控制狀態(tài)為是時(shí),使得計(jì)時(shí)模塊有效,否則使得 計(jì)時(shí)模塊無(wú)效。
[0016] 優(yōu)選地,所述基于javascript的主動(dòng)監(jiān)聽(tīng)裝置,其執(zhí)行模塊包括任務(wù)隊(duì)列,所述任 務(wù)隊(duì)列中存在多個(gè)執(zhí)行節(jié)點(diǎn),所述執(zhí)行節(jié)點(diǎn)用于執(zhí)行特定功能。
[0017] 總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,由于采用 sett imeout函數(shù),通過(guò)計(jì)時(shí)函數(shù)實(shí)現(xiàn)主動(dòng)監(jiān)聽(tīng)的功能,能夠取擴(kuò)展性強(qiáng),性能優(yōu)化,延時(shí)短 的有益效果。
【附圖說(shuō)明】
[0018] 圖1是本發(fā)明提供的方法的流程圖;
[0019] 圖2是本發(fā)明提供的裝置的結(jié)構(gòu)示意圖;
[0020] 圖3是本發(fā)明實(shí)施例2提供的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0021] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì) 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要 彼此之間未構(gòu)成沖突就可以相互組合。
[0022] 本發(fā)明提供的基于javascript的主動(dòng)監(jiān)聽(tīng)方法,如圖1所示,在javascript環(huán)境 下,執(zhí)行輪詢(xún)步驟:
[0023] (1)執(zhí)行特定的功能函數(shù),并獲取下步執(zhí)行標(biāo)簽和時(shí)間間隔參數(shù);時(shí)間間隔優(yōu)選為 定值。
[0024] (2)當(dāng)執(zhí)行標(biāo)簽為否時(shí),結(jié)束監(jiān)聽(tīng);否則,即當(dāng)執(zhí)行標(biāo)簽為是時(shí),等待所述間隔時(shí) 間,當(dāng)間隔時(shí)間到達(dá)時(shí),進(jìn)入步驟(1)。
[0025] (3)獲取立刻執(zhí)行標(biāo)簽,當(dāng)所述立刻執(zhí)行標(biāo)簽為是時(shí),立即執(zhí)行步驟(1)。
[0026] 本發(fā)明提供的基于javascript的主動(dòng)監(jiān)聽(tīng)裝置,如圖2所示,在javascript的運(yùn)行 環(huán)境下,包括:
[0027] 計(jì)時(shí)模塊,用于在控制狀態(tài)為是時(shí),在間隔時(shí)間到時(shí)通知執(zhí)行模塊,并在執(zhí)行完成 后獲取間隔時(shí)間,繼續(xù)計(jì)時(shí);
[0028] 所述執(zhí)行模塊,用于接收到計(jì)時(shí)模塊的通知后執(zhí)行指定功能;
[0029] 優(yōu)選所述執(zhí)行模塊包括任務(wù)隊(duì)列,所述任務(wù)隊(duì)列中存在多個(gè)執(zhí)行節(jié)點(diǎn),所述執(zhí)行 節(jié)點(diǎn)為任務(wù)執(zhí)行的最小單位,用于執(zhí)行特定功能。
[0030] 控制模塊,用于提供控制狀態(tài),當(dāng)控制狀態(tài)為是時(shí),使得計(jì)時(shí)模塊有效,否則使得 計(jì)時(shí)模塊無(wú)效。
[0031] 以下為實(shí)施例:
[0032] 實(shí)施例1
[0033] -種基于javascript的主動(dòng)監(jiān)聽(tīng)方法,包括以下核心代碼:
[0036] 其中next即下步執(zhí)行標(biāo)簽,step為時(shí)間間隔,functionO為特定的功能函數(shù)。
[0037] 本方法中,使用setTimeout遞歸為中心思想實(shí)現(xiàn)了無(wú)阻塞的輪詢(xún)機(jī)制,如果功能 函數(shù)返回false,所述方法結(jié)束;函數(shù)Interval的第一個(gè)參數(shù)(next)執(zhí)行標(biāo)簽為next〇函數(shù) 獲取,包含要被執(zhí)行的邏輯,如果此函數(shù)返回false,則所述方法結(jié)束;函數(shù)Interval的第二 個(gè)參數(shù)(step)為時(shí)間間隔,也就是配置項(xiàng)中的執(zhí)行間隔;函數(shù)Interval的第三個(gè)參數(shù) (right)為"是否立刻執(zhí)行該方法",如果此值為true,則會(huì)在時(shí)間軸初始化的時(shí)候立刻執(zhí)行 功能函數(shù)。
[0038] 實(shí)施例2
[0039] -種基于javascript的主動(dòng)監(jiān)聽(tīng)裝置,如圖3所示,在javascript的運(yùn)行環(huán)境下, 包括:
[0040] 計(jì)時(shí)模塊,即時(shí)間軸,在執(zhí)行點(diǎn)會(huì)使得執(zhí)行模塊執(zhí)行任務(wù)隊(duì)列中該時(shí)刻的節(jié)點(diǎn)執(zhí) 行相應(yīng)任務(wù),任務(wù)執(zhí)行時(shí)所述時(shí)間軸暫停計(jì)時(shí),計(jì)時(shí)模塊的功能隊(duì)列中的節(jié)點(diǎn)發(fā)送心跳包, 將當(dāng)前時(shí)間信息傳遞給隊(duì)列中的每一個(gè)節(jié)點(diǎn);執(zhí)行模塊完成本次執(zhí)行后,時(shí)間軸繼續(xù)計(jì)時(shí), 在指定的時(shí)間間隔到時(shí)到達(dá)下一個(gè)執(zhí)行點(diǎn),使得執(zhí)行模塊執(zhí)行任務(wù)隊(duì)列中該時(shí)刻的節(jié)點(diǎn)執(zhí) 行相應(yīng)任務(wù)。
[0041] 當(dāng)時(shí)間軸在執(zhí)行點(diǎn)會(huì)根據(jù)配置項(xiàng)中的重啟周期,判斷是否到了輪詢(xún)重啟點(diǎn),如果 到了重啟點(diǎn),則重啟時(shí)間軸,重新開(kāi)始計(jì)時(shí)。
[0042] 所述執(zhí)行模塊,所述執(zhí)行模塊包括任務(wù)隊(duì)列,所述任務(wù)隊(duì)列中存在多個(gè)執(zhí)行節(jié)點(diǎn), 所述執(zhí)行節(jié)點(diǎn)為任務(wù)執(zhí)行的最小單位。
[0043] 所述執(zhí)行模塊提供接口實(shí)現(xiàn)新增節(jié)點(diǎn)、銷(xiāo)毀節(jié)點(diǎn)、移除節(jié)點(diǎn)、遍歷節(jié)點(diǎn)、獲取節(jié)點(diǎn) 的功能;
[0044] 新增節(jié)點(diǎn):節(jié)點(diǎn)可以隨時(shí)被第三方插入;
[0045] 銷(xiāo)毀節(jié)點(diǎn):將節(jié)點(diǎn)標(biāo)記為死亡狀態(tài),無(wú)法被遍歷;
[0046] 移除節(jié)點(diǎn):只對(duì)時(shí)間軸開(kāi)放,時(shí)間軸在運(yùn)行期間會(huì)自動(dòng)將死亡節(jié)點(diǎn)清除;
[0047] 遍歷節(jié)點(diǎn):如果某一節(jié)點(diǎn)被銷(xiāo)毀,將無(wú)法被遍歷到;
[0048]所述任務(wù)隊(duì)列采用先進(jìn)先出的執(zhí)行原則,保證功能順序執(zhí)行。
[0049] 所述節(jié)點(diǎn)包括編號(hào)和心跳函數(shù),所述編號(hào)用于唯一的標(biāo)記所述節(jié)點(diǎn),所述心跳函 數(shù)用于接收隊(duì)列通知并執(zhí)行具體功能。
[0050] 控制模塊,用于提供控制狀態(tài),當(dāng)控制狀態(tài)為是時(shí),使得計(jì)時(shí)模塊有效,否則使得 計(jì)時(shí)模塊無(wú)效。
[0051] 具體的,控制模塊用于配置重啟周期,判斷是否到了主動(dòng)監(jiān)聽(tīng)的重啟點(diǎn),如果到了 重啟點(diǎn),則啟動(dòng)計(jì)時(shí)模塊。
[0052]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以 限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含 在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. 一種基于javascript的主動(dòng)監(jiān)聽(tīng)方法,其特征在于,包括以下步驟: (1) 執(zhí)行特定的功能函數(shù),并獲取下步執(zhí)行標(biāo)簽和時(shí)間間隔參數(shù); (2) 當(dāng)執(zhí)行標(biāo)簽為否時(shí),結(jié)束監(jiān)聽(tīng);否則,即當(dāng)執(zhí)行標(biāo)簽為是時(shí),等待所述間隔時(shí)間,當(dāng) 間隔時(shí)間到達(dá)時(shí),進(jìn)入步驟(1)。2. 如權(quán)利要求1所述的基于javascript的主動(dòng)監(jiān)聽(tīng)方法,其特征在于,步驟(1)所述時(shí) 間間隔為定值。3. 如權(quán)利要求1所述的基于javascript的主動(dòng)監(jiān)聽(tīng)方法,其特征在于,還包括步驟: (3) 獲取立刻執(zhí)行標(biāo)簽,當(dāng)所述立刻執(zhí)行標(biāo)簽為是時(shí),立即執(zhí)行步驟(1)。4. 一種基于javascript的主動(dòng)監(jiān)聽(tīng)裝置,其特征在于,包括: 計(jì)時(shí)模塊,用于在間隔時(shí)間到時(shí)通知執(zhí)行模塊,并在執(zhí)行完成后獲取間隔時(shí)間,繼續(xù)計(jì) 時(shí); 所述執(zhí)行模塊,用于接收計(jì)時(shí)模塊的通知后執(zhí)行指定功能。5. 如權(quán)利要求4所述的基于javascript的主動(dòng)監(jiān)聽(tīng)裝置,其特征在于,包括 控制模塊,用于提供控制狀態(tài),當(dāng)控制狀態(tài)為是時(shí),使得計(jì)時(shí)模塊有效,否則使得計(jì)時(shí) 模塊無(wú)效。6. 如權(quán)利要求4所述的主動(dòng)監(jiān)聽(tīng)裝置,其特征在于,所述執(zhí)行模塊包括任務(wù)隊(duì)列,所述 任務(wù)隊(duì)列中存在多個(gè)執(zhí)行節(jié)點(diǎn),所述執(zhí)行節(jié)點(diǎn)用于執(zhí)行特定功能。
【文檔編號(hào)】G06F9/44GK106095452SQ201610427185
【公開(kāi)日】2016年11月9日
【申請(qǐng)日】2016年6月15日
【發(fā)明人】杜偉
【申請(qǐng)人】武漢斗魚(yú)網(wǎng)絡(luò)科技有限公司