Learning TypeScript 0x5 應用性能

性能和資源

一個好的應用程序應該集功能性、可靠性、可用性、可複用性、效率、可維護性和可移植性等理想特性於一身。

有限的資源:

  • 中央處理單元 CPU
  • 圖形處理單元 GPU
  • 內存 RAM
  • 硬盤(HDD)和固態硬盤(SSD)
  • 網絡吞吐量

性能指標

可用性

響應時間

  • 等待時間:該請求等待其他較早產生的請求完成所花的時間
  • 服務時間:完成服務所消耗的時間
  • 傳輸時間:任務單元完成後該響應會被髮送回請求者。傳輸響應所消耗的時間爲傳輸時間

處理速度

時鐘頻率,處理單元(CPU或GPU)的運行頻率。

延遲

網絡數據通信中發生的延遲

帶寬

數據傳輸速率

可伸縮性

系統處理更大規模任務的能力

性能分析

網絡性能分析

window.performance 性能計時

Chrome-developer-Network

  •  DOMContentLoaded事件在引擎解析完文檔後發生
  • load在頁面資源加載完成後觸發

當鼠標懸浮在timing列,可以看到每一個性能計時API數據點

 

網絡性能與用戶體驗

網絡性能最佳實踐和規則

  •  避免頁面重定向
  • 啓用壓縮
  • 優化服務器響應時間
  • 善用瀏覽器緩存
  • 壓縮靜態資源
  • 優化圖片尺寸
  • 優化CSS加載
  • 優化考慮首屏內容
  • 移除阻塞渲染的JavaScript
  • 使用異步腳本
  • 使用CDN
  • 避免空的src和href屬性
  • 把樣式表放在頂部
  • 把腳本放在底部
  • 避免css表達式(動態屬性)
  • 把JavaScript和CSS放到外部鏈接
  • 減少DNS查詢
  • 移除重複腳本
  • 配置ETags
  • AJAX多用GET請求
  • 減少DOM節點數目
  • 避免404錯誤
  • 減小cookie大小
  • 爲組件使用無cookie站點
  • 避免過濾
  • 不在HTML中擴展圖片
  • 將favicon.ico壓縮並存儲

GPU性能分析

  • 每秒傳輸幀數 FPS 即幀率

CPU性能分析

內存性能分析

垃圾回收器

避免內存泄露

  • 及時清除計時器
  • 及時清除事件監聽
  • 閉包會記住上下文環境,即佔用部分內存
  • 使用對象組合時,若存在循環引用,也會有部分變量佔據內存導致無法釋放的情況

性能自動化

性能自動優化

主要集中在將應用組件文件進行拼接和壓縮,可用Gulp。Gulp的諸多插件可以完成合並壓縮、優化圖片、生成緩存清單以及其他自動化性能優化的任務。

性能監測自動化

通過收集數據進行性能比較,收集方式有

  • 真實用戶監測:在瀏覽器中加載小段js實現,主要用於收集數據、發現性能趨勢和模式
  • 模擬瀏覽器:收集模擬瀏覽器的性能數據,但是不能準確模擬用戶操作
  • 真實瀏覽器監測

性能測試自動化

  • 加載測試 
  • 壓力測試
  • 滲透測試
  • 峯值測試
  • 配置測試

錯誤處理

Error類

擴展

module CustomException {
    export declare class Error {
        public name : string
        public message : string
        public stack : string
        constructor(message?: string)
    }
    export class Exception extends Error {
        constructor(public message: string) {
            super(message)
            this.name = 'Exception'
            this.message = message
            this.stack = (<any>new Error()).stack
        }
        toString() {
            return this.name + ':' + this.message
        }
    }
}

聲明瞭一個Error類,該類存在於運行時,但並非TS自帶,所以需要自己聲明,然後創建一個繼承自Error的Exception類,最後創建了customError繼承自Exception類

try.catch和throw

在大多數語言中,拋出和接收異常的操作很耗資源,應儘量避免。在會影響性能的函數和循環中儘量不要使用。

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