摘要:更多文章循環展開是一種程序變換,通過增加每次迭代計算的元素的數量,減少循環的迭代次數。用代碼來說明就是將替換為循環展開對于算術運算來說,優化的作用是很大的。
更多文章
循環展開是一種程序變換,通過增加每次迭代計算的元素的數量,減少循環的迭代次數。
用代碼來說明就是將
for (i = 0; i < len; i++) { sum += arry[i] }
替換為
for (i = 0; i < len; i += 2) { newSum += arry[i] + arry[i + 1] }
循環展開對于算術運算來說,優化的作用是很大的。我分別對整數運算和浮點數運算作了多次測試,得出表格如下:
操作 | 整數 | 整數(優化后) | 浮點數 | 浮點數(優化后) |
---|---|---|---|---|
+ | 360 | 163 | 354 | 164 |
- | 379 | 167 | 341 | 177 |
* | 350 | 160 | 364 | 163 |
/ | 118 | 57 | 152 | 63 |
cpu:i5-7400
瀏覽器: chrome 70.0.3538.110
運算是用了1千萬個數,取值是運行十次測試得出的平均數。附上加法測試的代碼
const arry = [] let num = 10000000 while (num) { arry.push(num) num-- } let sum = 0 let last = new Date() let i let len = arry.length for (i = 0; i < len; i++) { sum += arry[i] } let now = new Date() console.log(now - last) let newSum = 0 last = new Date() for (i = 0; i < len; i += 2) { newSum += arry[i] + arry[i + 1] } now = new Date() console.log(now - last) console.log(sum, newSum)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/101093.html
摘要:一個解決的辦法是從算法上解決,把遞歸算法改良成只依賴于少數狀態的迭代算法,然而此事知易行難,線性遞歸還容易,樹狀遞歸就難以轉化了,而且并不是所有遞歸算法都有非遞歸實現。 前言 眾所周知,遞歸函數容易爆棧,究其原因,便是函數調用前需要先將參數、運行狀態壓棧,而遞歸則會導致函數的多次無返回調用,參數、狀態積壓在棧上,最終耗盡棧空間。 一個解決的辦法是從算法上解決,把遞歸算法改良成只依賴于少...
摘要:用局部變量存儲本地范圍之外的變量值,如果它們在函數中的使用多于一次。將它的值存入一個局部變量,消除一次搜索過程。地將此值存入一個局部變量中。 總結了一下《高性能javascript》書中比較核心的點,并補充了一些點。 第一章 DOM標簽 將所有 標簽放置在頁面的底部,緊靠 body 關閉標簽的上方。此法可以保證頁面在腳本 運行之前完成解析。 將腳本成組打包。頁面的 標簽越少,頁面的加...
摘要:這樣就改進了代碼的性能,看代碼將保存在局部變量中所以啊,我們在開發中,如果在函數中會經常用到全局變量,把它保存在局部變量中避免使用語句用語句延長了作用域,查找變量同樣費時間,這個我們一般不會用到,所以不展開了。 本來在那片編寫可維護性代碼文章后就要總結這篇代碼性能文章的,耽擱了幾天,本來也是決定每天都要更新一篇文章的,因為以前欠下太多東西沒總結,學過的東西沒去總結真的很快就忘記了...
摘要:線性循環神經網絡這部分教程我們來設計一個簡單的模型,這個模型的輸入是一個二進制的數據流,任務是去計算這個二進制的數據流中存在幾個。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/160... 這篇教程是翻譯Peter Roelants寫的循環神經網絡教程,作者已經授權翻譯,這是原文。 該...
閱讀 756·2023-04-26 01:30
閱讀 3307·2021-11-24 10:32
閱讀 2193·2021-11-22 14:56
閱讀 1988·2021-11-18 10:07
閱讀 561·2019-08-29 17:14
閱讀 632·2019-08-26 12:21
閱讀 3111·2019-08-26 10:55
閱讀 2947·2019-08-23 18:09