我想alert在瀏覽器中修補物件以顯示其他文本,但我需要等待一些資料以在警報中顯示必要的內容。但是,我不能推遲alert通話。
另外,我不知道如何關閉警報并在沒有用戶操作的情況下顯示另一個警報(如果存在,它也可以解決我的問題)。
所以,我必須等待一些資料,但我不能破壞alert阻止代碼執行的行為。
要等待回復,我可以這樣做:
var start = performance.now();
while(true) {
var time = performance.now() - start;
if (time >= 3000) break;
}
console.log('done');
但我不會檢查計時器,而是檢查一些資料。
這種方式應該可以作業,但這對性能來說很糟糕,因為它與alert只是凍結執行緒并且在關閉對話框之前什么都不做的相反,我們將用無用的作業加載 CPU。
是否可以凍結執行緒以提高能源效率?
我必須凍結執行緒,直到我從工人那里得到一些資料。
為什么 promise 不能解決你的問題?
Promises 不會阻塞主執行緒,所以這不會重現alert我需要的行為。
阻塞執行緒不是用戶友好的,并不是你需要等待一些資料
我知道這一點,這個筆記對于開發網頁和應用程式來說是公平的。
但這種情況很特殊。我為瀏覽器擴展開發了一項功能,用于翻譯警報。瀏覽器擴展不得修改頁面的行為。所以當一個網站呼叫警報時,執行緒必須被凍結。瀏覽器擴展不得推遲alert呼叫以避免頁面上出現意外行為。
您可以在此處查看該功能的說明:Feat:實作警報和控制臺日志的可選翻譯 #102
uj5u.com熱心網友回復:
我能想到的在不消耗 CPU 的情況下“阻塞”的唯一方法是創建一個同步 XMLHttpRequest(由于阻塞不是用戶友好的,因此不推薦使用)。您需要設定一個服務器,該服務器可以讀取請求的有效負載并在指定的時間后回復。
const xh = new XMLHttpRequest();
xh.open('GET', urlToYourServer, false);
xh.send('3');
其中“3”是服務器決議的請求正文(并在 3 秒后回應)。
也就是說,您不應該這樣做- 這是一種非常不雅且對用戶不友好的方法。在此程序中,它將阻止任何其他操作(包括瀏覽器重繪和其他請求)發生。最好適當地等待您需要的任何東西(無論是通過.thenPromise 還是回呼或其他方式) - 但如果問題中沒有更多背景關系,具體如何實作這一點尚不清楚。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474472.html
標籤:javascript 表现
上一篇:將int[]轉換為Integer[]的哪種方式最快?
下一篇:OR上的Mysql查詢例外緩慢
