我正在學習開發(fā) chrome 擴展(同時也在學習 javascript)。我正在試驗在 youtube 網頁上運行的擴展。事情是當我滾動時,有時網頁有點緊張。于是,我開始尋找可能的原因。我看到了一些不錯的視頻,包括Philip Roberts 的“事件循環(huán)到底是什么”,他在視頻中談到了事件循環(huán)和其他相關內容。這讓我想知道是否正是因為這個原因,網頁才會感到緊張。內容腳本中的代碼是同步的,我對 javascript 中的異步編碼沒有太多經驗。promises,之類的概念async/await對我來說是新的。這是內容腳本中非常高級別的代碼。chrome.storage.sync.get(); // getting some data herelet activateButton = document.createElement("div");activateButton.id = "activate-ext";activateButton.addEventListener("click", getData);有一個對 chrome 存儲 api 的調用一些代碼來呈現(xiàn)一個按鈕(有一個click事件監(jiān)聽器附加到這個呈現(xiàn)另一個 UI 的按鈕。)然后我將這個按鈕添加到 dom現(xiàn)在,大部分事情都發(fā)生在getData回調中。當用戶單擊該按鈕時。擴展名:從網頁檢索數(shù)據(jù)并進行一些正則表達式匹配,然后將我想要的字符串值存儲在一個數(shù)組a中。然后當我有數(shù)組時a,我map在它上面使用一個來創(chuàng)建另一個數(shù)組b然后對的所有元素進行另一個操作b以獲得另一個數(shù)組c。現(xiàn)在終于有了數(shù)組c,我調用了另一個生成最終 UI 的函數(shù)(使用數(shù)組中的值c)這getData看起來像:function getdata(){ const regex = /some_regex/g; let match = regex.exec(data); while (match) { a.push(match[index]); match = regex.exec(description) } b = createAnotherArray(a) // this function returns array b c = anotherOperation(b) generateUI(c) // in this function I am rendering the UI}現(xiàn)在,所有這些代碼都是同步的(除了調用 chrome 存儲 API 和一些回調),我相信其中一些操作(如正則表達式匹配)需要時間來阻止事件循環(huán)。那么使用 promises(async/await) 重構整個代碼的最佳方式是什么,這樣它就不會阻止瀏覽器呈現(xiàn)/更新 UI。我也看到了一些循環(huán)async/await,我的代碼中也有循環(huán)。那么,我也需要這樣做嗎?
將同步代碼轉換為異步代碼
犯罪嫌疑人X
2022-12-09 15:16:36