最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript計劃任務(wù)后臺運行的方法

 更新時間:2015年12月18日 10:29:35   投稿:mrr  
這篇文章主要介紹了JavaScript計劃任務(wù)后臺運行的方法,需要的朋友可以參考下

即使忘了 JavaScript 的一切知識,也不會忘記:它是阻塞的。

想象一下,你的瀏覽器里住著一個魔法小精靈,負(fù)責(zé)瀏覽器的正常運轉(zhuǎn)。不論渲染 HTML,響應(yīng)菜單命令,屏幕渲染,處理鼠標(biāo)點擊,或者執(zhí)行 JavaScript 函數(shù),所有事情都歸一個小精靈處理。它哪忙得過來,一次只能處理一件事情。如果同時丟給它一堆任務(wù),它會列一個長長的待辦列表,按順序完成它們。

人們常常希望初始化組件和事件處理的 JavaScript 可以盡快被執(zhí)行??墒牵行┎惶匾暮笈_任務(wù)不會直接影響用戶體驗,比如:

記錄統(tǒng)計數(shù)據(jù)

發(fā)送數(shù)據(jù)到社交網(wǎng)絡(luò)(或添加‘分享'按鈕)

預(yù)加載內(nèi)容

預(yù)處理或預(yù)渲染 HTML

他們對時序要求不嚴(yán)格,但是為了讓頁面仍然響應(yīng),直到用戶滾動頁面或者與內(nèi)容交互時才被執(zhí)行。

選擇之一是 Web Workers ,它可以在獨立的線程同時執(zhí)行代碼。用于預(yù)加載和預(yù)處理再好不過,但是你沒有權(quán)限直接訪問或更新 DOM。你可以在自己的代碼中避開這點,但是無法保證第三方腳本比如 Google Analytics 永遠不需要這個。

另一個選擇是setTimeout,比如setTimeout(doSomething, 1);。一旦其它的立即執(zhí)行任務(wù)執(zhí)行完畢,瀏覽器將執(zhí)行doSomething()函數(shù)。實際上,它被放到了待辦列表的底部。不幸的是,函數(shù)將被調(diào)用,而不顧處理需求。

#requestIdleCallback

requestIdleCallback 是新API,當(dāng)瀏覽器稍作喘息的時候,用來執(zhí)行不太重要的后臺計劃任務(wù)。 難免讓人想起 requestAnimationFrame ,在下次重繪之前,執(zhí)行函數(shù)更新動畫。 想了解更多戳這里: 使用 requestAnimationFrame 做簡單的動畫 。

requestIdleCallback特性監(jiān)測:

if ('requestIdleCallback' in window) {
 // requestIdleCallback supported
 requestIdleCallback(backgroundTask);
}
else {
 // no support - do something else
 setTimeout(backgroundTask1, 1);
 setTimeout(backgroundTask2, 1);
 setTimeout(backgroundTask3, 1);
}

也可以指定配置參數(shù)對象,比如 timeout,

requestIdleCallback(backgroundTask, { timeout: 3000; }); 

確保函數(shù)在3秒之內(nèi)調(diào)用,不管瀏覽器是否空閑。

deadline對象傳入以下參數(shù)時,requestIdleCallback僅執(zhí)行一次回調(diào):

didTimeout—— 如果可選的 timeout 觸發(fā),則設(shè)置為 true
timeRemaining()—— 函數(shù)返回執(zhí)行任務(wù)剩余的毫秒數(shù)
timeRemaining()最多分配50ms用于任務(wù)的執(zhí)行,超過這個限制,也不會停止任務(wù),但是,最好重新調(diào)用requestIdleCallback安排進一步的處理。

我們來創(chuàng)建一個簡單的例子,讓幾個任務(wù)按序執(zhí)行。任務(wù)的函數(shù)引用儲存在數(shù)組中:

//待執(zhí)行的函數(shù)數(shù)組
var task = [
  background1,
  background2,
  background3
];
if ('requestIdleCallback' in window) {
 //支持 requestIdleCallback
 requestIdleCallback(backgroundTask);
}
else {
 //不支持 —— 立刻執(zhí)行所有任務(wù)
 while (task.length) {
  setTimeout(task.shift(), 1);
 }
}
//requestIdleCallback 回調(diào)函數(shù)
function backgroundTask(deadline) {
 //如果存在,執(zhí)行下一個任務(wù)
 while (deadline.timeRemaining() > 0 && task.length > 0) {
  task.shift()();
 }
 //需要的話,安排進一步任務(wù)
 if (task.length > 0) {
  requestIdleCallback(backgroundTask);
 }
}

#一次 requestIdleCallback 之間不應(yīng)該做什么?

Paul Lewis 在 他的文章 中提到,一次 requestIdleCallback 執(zhí)行的任務(wù)應(yīng)該切成小塊。它不適用于不可預(yù)知時間的情況(比如操作 DOM,使用 requestAnimationFrame 回調(diào)更好些)。resolving(或者 rejecting)Promises 時也要謹(jǐn)慎,即使沒有更多的剩余時間,空閑回調(diào)完成之后,回調(diào)函數(shù)也將立即執(zhí)行。

#requestIdleCallback 瀏覽器支持情況

requestIdleCallback是試驗性特性,規(guī)范仍不穩(wěn)定,碰到 API 變更時不足為奇。Chrome 47 已支持… 2015年結(jié)束前應(yīng)該可用了。Opera 應(yīng)該會緊跟其后。Microsoft 和 Mozilla 都在考慮 API 是否應(yīng)該支持 Promises 。Apple 像往常一樣不鳥。

Paul Lewis(上文提到的)寫了一個簡單的 requestIdleCallback shim ,它可以模擬瀏覽器的空閑監(jiān)測行為,但不是一個 polyfill( shim 和 polyfill 的區(qū)別 )。

requestIdleCallback shim代碼如下:

/*!
 * Copyright Google Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version . (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * @see https://developers.google.com/web/updates///using-requestidlecallback
 */
window.requestIdleCallback = window.requestIdleCallback ||
 function (cb) {
  var start = Date.now();
  return setTimeout(function () {
   cb({
    didTimeout: false,
    timeRemaining: function () {
     return Math.max(, - (Date.now() - start));
    }
   });
  }, );
 }
window.cancelIdleCallback = window.cancelIdleCallback ||
 function (id) {
  clearTimeout(id);
 }

ps: 如何運行計劃任務(wù)

1、運行 GPEDIT.MSC

2、選擇計算機配置

  --- Windows 設(shè)置
      --- 安全設(shè)置
        --- 本地策略
          --- 用戶權(quán)利指派
雙擊右邊的 從網(wǎng)絡(luò)訪問此計算機
把需要的用戶名添加到列表。

3、    --- 安全設(shè)置

             ---安全選擇
         開啟允許服務(wù)器操作員計劃任務(wù)

4、-----本地策略

    --- 作為批處理作業(yè)登錄
     把需要的用戶名添加到列表。

5、-----本地策略

   --- 允許計算機和用戶被信任以便于委托
把需要的用戶名添加到列表。
最好是administrator用戶。

如果任務(wù)計劃無法啟動,提示代碼:0X80041315

解決方法:這有兩種可能,一是系統(tǒng)中的“Task Scheduler”服務(wù)沒有啟動,你可在運行中鍵入“services.msc”,查看“Task Scheduler”服務(wù)是否被設(shè)置成了“已禁用”,若是,只要雙擊它將啟動類型改為“自動”,重新設(shè)定一個計劃任務(wù)就可以執(zhí)行了。

如果你當(dāng)前賬戶設(shè)置了自動登錄,而其登錄密碼又為空,也有可能導(dǎo)致任務(wù)計劃不能按時執(zhí)行,在XP專業(yè)版中,需要運行“gpedit.msc”來編輯組策略:展開“計算機配置→Windows設(shè)置→安全設(shè)置→本地計算機策略→安全選項”;雙擊右側(cè)的“賬戶:使用空白密碼的本地賬戶只允許進行控制臺登錄”項,在彈出對話框中選擇“已禁用”。

相關(guān)文章

  • JS實現(xiàn)復(fù)制粘貼文字及圖片功能

    JS實現(xiàn)復(fù)制粘貼文字及圖片功能

    Clipboard?API?是一組用于在瀏覽器中操作剪貼板的?JavaScript?API,它允許開發(fā)者在網(wǎng)頁上讀取和寫入剪貼板內(nèi)容,實現(xiàn)復(fù)制、剪切和粘貼等功能,這篇文章主要介紹了JS實現(xiàn)復(fù)制粘貼文字及圖片功能,需要的朋友可以參考下
    2024-07-07
  • 深入解析ES6中的promise

    深入解析ES6中的promise

    ES6中的promise對象很早就聽說過,據(jù)說是為了解決我們使用回調(diào)產(chǎn)生回調(diào)地獄的問題。今天小編就帶領(lǐng)大家通過本文學(xué)習(xí)下es6中的promise,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • 基于Cesium實現(xiàn)衛(wèi)星在軌繞行動畫

    基于Cesium實現(xiàn)衛(wèi)星在軌繞行動畫

    這篇文章主要為大家詳細介紹了如何利用Cesium實現(xiàn)衛(wèi)星在軌繞行動畫,文中的示例代碼講解詳細,對我們了解Cesium有一定的幫助,感興趣的可以嘗試一下
    2022-06-06
  • iframe 父窗口和子窗口相互的調(diào)用方法集錦

    iframe 父窗口和子窗口相互的調(diào)用方法集錦

    iframe 父窗口和子窗口相互的調(diào)用方法集錦,需要的朋友可以參考下。
    2010-12-12
  • js與jquery正則驗證電子郵箱、手機號、郵政編碼的方法

    js與jquery正則驗證電子郵箱、手機號、郵政編碼的方法

    這篇文章主要介紹了js與jquery正則驗證電子郵箱、手機號、郵政編碼的方法,涉及javascript與jQuery鼠標(biāo)事件的響應(yīng)與正則驗證操作字符串的相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • JavaScript中的連字符詳解

    JavaScript中的連字符詳解

    這篇文章主要是對JavaScript中的連字符進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • 解決layui中的form表單與button的點擊事件沖突問題

    解決layui中的form表單與button的點擊事件沖突問題

    今天小編就為大家分享一篇解決layui中的form表單與button的點擊事件沖突問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Redux的基本使用過程步驟詳解

    Redux的基本使用過程步驟詳解

    這篇文章主要介紹了Redux的基本使用過程詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • layui點擊按鈕添加可編輯的一行方法

    layui點擊按鈕添加可編輯的一行方法

    今天小編就為大家分享一篇layui點擊按鈕添加可編輯的一行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • D3.js實現(xiàn)繪制折線圖的教程詳解

    D3.js實現(xiàn)繪制折線圖的教程詳解

    這篇文章主要為大家詳細介紹了如何通過D3.js實現(xiàn)繪制折線圖,文中的示例代碼講解詳細,對我們學(xué)習(xí)D3.js有一定的幫助,需要的可以參考一下
    2022-11-11

最新評論

柳河县| 遂宁市| 从江县| 沅陵县| 苗栗县| 西乌珠穆沁旗| 兴安盟| 盐山县| 天峨县| 老河口市| 郁南县| 特克斯县| 柯坪县| 赫章县| 德清县| 新乡县| 安阳市| 奇台县| 万源市| 黔西| 菏泽市| 正蓝旗| 确山县| 湖北省| 长乐市| 宁武县| 特克斯县| 宽甸| 广灵县| 方城县| 西宁市| 巴塘县| 东乌| 长葛市| 城步| 亳州市| 衡山县| 罗城| 金湖县| 桦南县| 望江县|