相親原始碼的效能為何這麼重要,該怎樣實現優化?

雲豹科技程式設計師發表於2021-12-09
相親原始碼的穩定執行與相親原始碼的效能息息相關,只有實現了效能方面的優化,才能提升使用者的使用體驗。對於開發者而言,效能優化的方式有很多種,今天我們挑選出比較重要的幾點和大家一起分享。

一、使用 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章