WebAssembly,options, 一道this題,finally

WebAssembly

看一下WebAssembly的來源,JIT的出現確實帶來了可觀的性能提升,但是受限於JS動態類型和運行時編譯的特點,判斷類型成爲了限制JIT的一個重要因素。對此Mozilla提出了asm.js,通過註解和檢測等手段確保強類型,減少JS依據上下文判斷類型的損耗,優化機器碼的解釋過程。

後來各家各戶覺得Mozilla這思路挺好,於是聯合起來,設定了WebAssembly,即一份字節碼標準,以字節碼的形式依賴虛擬機在瀏覽器中運行。

首先要明確的一點,WASM並不能達到Assembly的性能,它只是一種約定的字節碼,既然是字節碼,肯定還是需要解釋器翻譯成機器碼執行。它的優點是相對於JS字節碼,它的翻譯速度要快上許多。

其次對於CPU密集型任務,WASM也只是多提供了一種選擇,有些時候使用WEBGL來做GPU加速往往是更好的選擇。

最後,並不是指使用WASM就一定比JS快,V8使用的JIT有個很重要的優點,就是它會對熱點代碼進行抽取,直接編譯生成二進制機器碼方便接下來的調用。

options

今天查看自己網址的options請求時發現找不到,查了資料發現chrome需要更改一個設置:

chrome://flags/#out-of-blink-cors

在這裏插入圖片描述
因爲是瀏覽器的緣故,用火狐還是可以看到的。

一個this題

var length = 10;
function fn(){
  console.log(this.length)
}
var obj = {
  length:5,
  method: function(fn){
    fn()
    arguments[0]()
  }
}

首先會輸出10是沒有什麼異議的,因爲函數傳參,this丟失。

其次因爲arguments[0]其實也是代指fn,但是因爲是arguments調用的函數,因此這裏的this指向的是arguments。它的length自然是2了。

Promise.prototype.finally

之前對finally理解有偏頗,一直以爲是和resolve一樣的靜態方法,這次終於發現原來也是個實例方法。

無論當前 Promise 是成功還是失敗,調用finally之後都會執行 finally 中傳入的函數,並且將值原封不動的往下傳。

做個題吧LeetCode300

給定一個無序的整數數組,找到其中最長上升子序列的長度。

示例:

輸入: [10,9,2,5,3,7,101,18]
輸出: 4
解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。

dp的題,列方程,首先我們找到i之前的最大序列,設它的最大值爲j,dp[j]即爲i爲j時的答案。

我們當i>j時,我們若想要arr[i]能夠連接到arr[j]後面,必須要滿足arr[i]>arr[j],因此:

var lengthOfLIS = function(nums) {
    if(!nums.length) return 0
    let res = new Array(nums.length).fill(1)
    for(let i = 0;i<nums.length;i++){
        for(let j = 0;j<i;j++){
            if(nums[i]>nums[j]) res[i]=Math.max(res[i],res[j]+1)
        }
    }
    return Math.max(...res)
};

總結

有點焦慮,做題加複習來緩解。抽空還要彙總起來,現在知識點太零散,對自己複查和他人看都不方便。但是最近確實是查缺補漏的狀態,先這樣寫了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章