相親原始碼的效能為何這麼重要,該怎樣實現優化?
相親原始碼的穩定執行與相親原始碼的效能息息相關,只有實現了效能方面的優化,才能提升使用者的使用體驗。對於開發者而言,效能優化的方式有很多種,今天我們挑選出比較重要的幾點和大家一起分享。
一、使用 requestAnimationFrame 來實現視覺變化
大多數相親原始碼裝置螢幕重新整理率為 60 次/秒,也就是說每一幀的平均時間為 16.66 毫秒。在使用 JavaScript 實現動畫效果的時候,最好的情況就是每次程式碼都是在幀的開頭開始執行。而保證 JavaScript 在幀開始時執行的唯一方式是使用 requestAnimationFrame。
/** * If run as a requestAnimationFrame callback, this * will be run at the start of the frame. */ function updateScreen(time) { // Make visual updates here. } requestAnimationFrame(updateScreen);
如果採取 setTimeout 或 setInterval 來實現相親原始碼中的動畫的話,回撥函式將在幀中的某個時點執行,可能剛好在末尾,而這可能經常會使我們丟失幀,導致卡頓。
二、使用 Web Workers
Web Worker 使用其他工作執行緒從而獨立於主執行緒之外,它可以執行任務而不干擾使用者介面。一個 worker 可以將訊息傳送到建立它的 JavaScript 程式碼, 通過將訊息傳送到該程式碼指定的事件處理程式(反之亦然)。
Web Worker 適用於那些處理純資料,或者與瀏覽器 UI 無關的長時間執行相親原始碼。
建立一個新的 worker 很簡單,指定一個指令碼的 URI 來執行 worker 執行緒(main.js):
var myWorker = new Worker('worker.js'); // 你可以通過postMessage() 方法和onmessage事件向worker傳送訊息。 first.onchange = function() { myWorker.postMessage([first.value,second.value]); console.log('Message posted to worker'); } second.onchange = function() { myWorker.postMessage([first.value,second.value]); console.log('Message posted to worker'); }
在 worker 中接收到訊息後,我們可以寫一個事件處理函式程式碼作為響應(worker.js):
onmessage = function(e) { console.log('Message received from main script'); var workerResult = 'Result: ' + (e.data[0] * e.data[1]); console.log('Posting message back to main script'); postMessage(workerResult); }
onmessage處理函式在接收到訊息後馬上執行,程式碼中訊息本身作為事件的data屬性進行使用。這裡我們簡單的對這2個數字作乘法處理並再次使用postMessage()方法,將結果回傳給主執行緒。
回到主執行緒,我們再次使用onmessage以響應worker回傳的訊息:
myWorker.onmessage = function(e) { result.textContent = e.data; console.log('Message received from worker'); }
在這裡我們獲取訊息事件的data,並且將它設定為result的textContent,所以相親原始碼使用者可以直接看到運算的結果。
不過在worker內,不能直接操作DOM節點,也不能使用window物件的預設方法和屬性。然而你可以使用大量window物件之下的東西,包括WebSockets,IndexedDB以及FireFox OS專用的Data Store API等資料儲存機制。
三、使用位操作
JavaScript 中的數字都使用 IEEE-754 標準以 64 位格式儲存。但是在位操作中,數字被轉換為有符號的 32 位格式。即使相親原始碼需要轉換,位操作也比其他數學運算和布林操作快得多。
取模
由於偶數的最低位為 0,奇數為 1,所以取模運算可以用位操作來代替。
if (value % 2) { // 奇數 } else { // 偶數 } // 位操作 if (value & 1) { // 奇數 } else { // 偶數 }
取整
~~10.12 // 10 ~~10 // 10 ~~'1.5' // 1 ~~undefined // 0 ~~null // 0
位掩碼
const a = 1 const b = 2 const c = 4 const options = a | b | c
通過定義這些選項,可以用按位與操作來判斷 a/b/c 是否在 options 中。
// 選項 b 是否在選項中 if (b & options) { ... }
四、不要覆蓋原生方法
無論你的 JavaScript 程式碼如何優化,都比不上原生方法。因為原生方法是用低階語言寫的(C/C++),並且被編譯成機器碼,成為相親原始碼瀏覽器的一部分。當原生方法可用時,儘量使用它們,特別是數學運算和 DOM 操作。
五、降低 CSS 選擇器的複雜性
(1). 瀏覽器讀取選擇器,遵循的原則是從選擇器的右邊到左邊讀取。
看個示例
#block .text p { color: red; }
1、查詢所有 P 元素。
2、查詢結果 1 中的元素是否有類名為 text 的父元素
3、查詢結果 2 中的元素是否有 id 為 block 的父元素
(2). CSS 選擇器優先順序
內聯 > ID選擇器 > 類選擇器 > 標籤選擇器
根據以上兩個資訊可以得出結論。
1、選擇器越短越好。
2、在相親原始碼中儘量使用高優先順序的選擇器,例如 ID 和類選擇器。
3、避免使用萬用字元 *。
最後要說一句,據我查詢的資料所得,CSS 選擇器沒有優化的必要,因為最慢和慢快的選擇器效能差別非常小。
六、使用 flexbox 而不是較早的佈局模型
在早期的 CSS 佈局方式中我們能對元素實行絕對定位、相對定位或浮動定位。而現在,我們有了新的佈局方式 flexbox,它比起早期的佈局方式來說有個優勢,那就是效能比較好。
下面的截圖顯示了在 1300 個框上使用浮動的佈局開銷:
然後我們用 flexbox 來重現這個例子:
現在,對於相同數量的元素和相同的視覺外觀,佈局的時間要少得多(本例中為分別 3.5 毫秒和 14 毫秒)。
不過 flexbox 相容性還是有點問題,不是所有相親原始碼瀏覽器都支援它,所以要謹慎使用。
各瀏覽器相容性:
-
Chrome 29+
-
Firefox 28+
-
Internet Explorer 11
-
Opera 17+
-
Safari 6.1+ (prefixed with -webkit-)
-
Android 4.4+
-
iOS 7.1+ (prefixed with -webkit-)
七、使用 transform 和 opacity 屬性更改來實現動畫
在 CSS 中,transforms 和 opacity 這兩個屬性更改不會觸發重排與重繪,它們是可以由合成器(composite)單獨處理的屬性。
八、合理使用規則,避免過度優化
相親原始碼效能優化主要分為兩類:
1、載入時優化
2、執行時優化
通常來說,沒有必要所有的效能優化規則都用上,根據相親原始碼使用者群體來做針對性的調整是最好的,節省精力,節省時間。
在解決問題之前,得先找出問題,否則無從下手。所以在做效能優化之前,最好先調查一下相親原始碼的載入效能和執行效能。
檢查載入效能
相親原始碼載入效能如何主要看白屏時間和首屏時間。
-
白屏時間:指從輸入網址,到頁面開始顯示內容的時間。
-
首屏時間:指從輸入網址,到頁面完全渲染的時間。
將以下指令碼放在 前面就能獲取白屏時間。
<script> new Date() - performance.timing.navigationStart // 通過 domLoading 和 navigationStart 也可以 performance.timing.domLoading - performance.timing.navigationStart </script>
在 window.onload 事件裡執行 new Date() - performance.timing.navigationStart 即可獲取首屏時間。
檢查執行效能
配合 chrome 的開發者工具,我們可以檢視相親原始碼在執行時的效能。
開啟網站,按 F12 選擇 performance,點選左上角的灰色圓點,變成紅色就代表開始記錄了。這時可以模仿使用者使用網站,在使用完畢後,點選 stop,然後你就能看到相親原始碼執行期間的效能報告。如果有紅色的塊,代表有掉幀的情況;如果是綠色,則代表 FPS 很好。
通過檢查載入和執行效能,相信你對相親原始碼效能已經有了大概瞭解。所以這時候要做的事情,就是使用上述建議盡情地去優化你的相親原始碼,加油!
本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2846766/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何實現相親交友原始碼的CPU效能優化?解決方案梳理原始碼優化
- 相親交友原始碼實現相親直播間,移動終端的優化方案原始碼優化
- 相親交友原始碼前端效能優化,通常使用哪些手段?原始碼前端優化
- 為什麼凸優化這麼重要?優化
- 要想實現遊戲陪玩app原始碼的效能測試與調優,應該怎麼做?遊戲APP原始碼
- 相親交友原始碼中,音訊AAC解碼的實現程式碼原始碼音訊
- 軟體教練說:效能優化與效能設計,“相親相愛”的一對優化
- 相親原始碼中移動支付的實現,沒有想象中那麼難原始碼
- 相親交友原始碼開發,前端如何實現水印功能?原始碼前端
- 婚戀app原始碼開發,如何實現介面效能優化?APP原始碼優化
- mongodb核心原始碼實現及效能優化系列:Mongodb write寫(增、刪、改)模組原始碼實現MongoDB原始碼優化
- Kafka 效能篇:為何 Kafka 這麼快?Kafka
- 相親原始碼開發,使用了哪些設計模式來優化業務程式碼?原始碼設計模式優化
- 實現語音社交原始碼介面效能優化,從索引入手原始碼優化索引
- 怎麼實現像這樣草稿功能
- 在相親原始碼的多人音視訊聊天中插入現場直播的實現方式原始碼
- 讓人頭疼的婚戀交友原始碼效能優化,該如何解決?原始碼優化
- 相親交友原始碼實現程式內快取,提升高併發能力!原始碼快取
- 搭建相親交友原始碼 ,API 介面統一格式返回的實現原始碼API
- 為何雲遊戲很重要,它將創造怎樣的體驗?遊戲
- 為什麼凸最佳化這麼重要?
- 怎麼做好Java效能優化Java優化
- 婚戀app原始碼開發,相親直播間聊天訊息列表卡頓優化APP原始碼優化
- Android 效能優化(十二)之我為什麼寫效能優化Android優化
- 從快取角度入手實現聊天室軟體原始碼的前端效能優化快取原始碼前端優化
- 如何在相親交友原始碼中實現正方形驗證碼輸入框?原始碼
- ios效能優化相關iOS優化
- 相親交友原始碼中語音連麥的實現方式,值得一看原始碼
- 在相親原始碼開發中,如何實現圓角及特殊圓角的使用?原始碼
- 做了這麼多年優化師,才發現遊戲廣告素材指令碼是這樣寫的……優化遊戲指令碼
- 效能優化的相關策略整理優化
- 為何語音社交app原始碼的開發始終都這麼火爆?APP原始碼
- 編寫相親交友原始碼,註釋方面應該重視哪些問題?原始碼
- 婚戀交友原始碼開發,採用連線複用實現效能優化原始碼優化
- mongodb核心原始碼實現、效能調優系列-為何要對開源mongodb資料庫核心做二次開發MongoDB原始碼資料庫
- 相親原始碼開發,從程式碼級別減少資料請求次數的實現原始碼
- 在相親交友原始碼中實現視訊連麥直播需要哪些步驟?原始碼
- 異地資料中心的資料實時同步,該怎樣智慧化實現?