Javascript性能优化【内联缓存】 V8引擎特性
生活随笔
收集整理的這篇文章主要介紹了
Javascript性能优化【内联缓存】 V8引擎特性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
javascript 是單線程、動態類型語言,那么我們在編碼時候如何編寫性能最優代碼呢?下面將講解V8引擎的內聯優化。利用內聯緩存這個特性我們可以編寫更加優秀的代碼。
什么是內聯緩存
引用官方的描述:內聯緩存(Inline caching)是部分編程語言的運行時系統采用的優化技術,最早為Smalltalk開發。內聯緩存的目標是通過記住以前直接在調用點上方法查詢的結果來加快運行時方法綁定的速度。內聯緩存對動態類型語言尤為有用,其中大多數(如非全部)方法綁定發生在運行時,因此虛方法表通常無法使用。
- 我們可以理解為javascript每一次的棧執行遇到調用外部函數、對象時候都產生地址緩存記錄,下回執行到這個位置時候直接從緩存中取出對應記錄,省去重新查找這一過程從加快程序執行速度。
轉換成代碼
模擬計算邏輯(偽代碼)
為了更好提現出現內聯緩存的優化,我們把對象所有方法邏輯為一致。
let value = 0const Calculator = {add1(val) {value += val},add2(val) {value += val},add3(val) {value += val},add4(val) {value += val},add5(val) {value += val},add6(val) {value += val},add7(val) {value += val},add8(val) {value += val},add9(val) {value += val},add10(val) {value += val}}####### 不實用內聯優化策略的代碼
function notOptimization(val, type) {Calculator[type](val) // 動態執行函數,當前調點無法確定地址}const CalculatorKey = Object.keys(Calculator)console.time('notOptimization')for(let i = 0; i < 1000000; i ++) {const key = CalculatorKey[Math.floor(Math.random() * CalculatorKey.length)]notOptimization(1, key)}console.timeEnd('notOptimization')上面這段代碼使用哈希快速查找對應函數,但是放棄內聯緩存策略。代碼5次執行結果,平均為80ms左右
####### 使用內聯緩存策略代碼
這段代碼用了多層if else 進行函數調用(為了提現內聯緩存策略的優化,正確應該用switch或數組查找),我們看看執行5次結果,速度為55~50ms
總結,所以在編碼過程我們盡量少使用動態調用運算,但是相對對象屬性值獲取哈希、數組的方式是遠遠快于if、switch的
總結
以上是生活随笔為你收集整理的Javascript性能优化【内联缓存】 V8引擎特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器故障英文邮件,服务器一般故障排除(
- 下一篇: mysql字段是否存在_Mysql判断表