瀏覽器效能和穩定性分析

2021-06-21 01:21:33 字數 2136 閱讀 6466

現在做瀏覽器的大概有下面幾個方向吧

1. 從事瀏覽器外殼的工作,開發基於瀏覽器的各種應用和擴充套件;

2. 做瀏覽器核心優化的,大概又分為幾個部分:

a. 渲染模組優化;

b. webgl硬體加速優化;

c. 符合ecmascript5.1 規範的js引擎的優化;

e. 現在andriod很火,專門針對andriod的webkit和chromium的優化;

3. 基於瀏覽器的核心開發相關的產品;比如cef3,node-webkit等,目前主要是進行桌面端產品的開發;

4. 瀏覽器安全方面,好像沒發現有什麼公司對外招人;

5. 瀏覽器的基本移植和定製;目前來看這個很難有好的發展;

6. 瀏覽器遊戲引擎開發與優化,感覺主要是webgl的優化;

那麼瀏覽器核心的優化怎麼入手呢?我們先來看下頁面的載入顯示過程:

使用者發出指令,需要載入某個頁面;

主資源的編碼以及編碼轉換;

主資源資料的解析;

子資源的解析和快取memorycache;

js**的解析;

解析的過程中遇到主資源解析暫停的情況下,虛擬繼續解析主資源進行子資源的預載入;

外掛程式的載入與解析;

dom樹的構建以及render 樹的構建;

對box模型進行定位的layout過程;

頁面的繪製過程,包括通過無效區域的標記、共享記憶體,cpu與gpu的協同分工等。

使用者下一次行為的**以及**頁面的與解析等;

dns的快取以及預解析;

等待使用者的下一次指令或者別的事件通知;

其實從上面列出的乙個完整的過程可以看出,

在資料記載過程中,可以充分考慮併發性,同時採用執行緒池的方式來避免執行緒的建立和銷毀的開銷;

在資料的解析過程中,可以考慮利用解析順序的限制來做一些預解析和預載入的事情;

在對資料的編碼處理過程中,可以考慮編譯碼的效率;

在對頁面的布局過程中,可以考慮layout演算法的優化,比如dirty bit,dirty area的方式;

在對圖形繪製的過程中,可以考慮採用gpu的方式;

在外掛程式處理方面,考慮採用ppapi機制來替換npapi機制;

這些過程有些是可以並行處理的,考慮不同階段採用單獨的執行緒的模式來提高效率,現在的cpu基本上是多核的;

以上這些都存在對記憶體的以依賴,那麼可以考慮對記憶體管理模組的優化;

對於系統來說,i/o的效率相對其他來說很有可能會是瓶頸,那麼可以設法減少i/o的讀寫,採用共享記憶體、利用快取的方式來優化;

對css3的的動畫以及一些絢麗的ui等進行優化,包括演算法和硬體加速方面;

對於指令系統來說,可以把某些關鍵的模組針對不同的指令系統來進行優化;

也可以對使用者的行為分析了解到,使用者用的比較多的功能是前進後退,那麼可以考慮pagecache方式的優化;

對於頁面來說,可以通過建立瀏覽器伺服器端的方式來減少客戶端的工作,比如比較流行的頁面在服務端的快取,資源的壓縮,資源的轉碼,甚至是頁面針對不同解析度的裝置的重新布局等;

對於開發者來說,可以吸收同類核心的一些優雅實現方式來優化;

上面說的都是效能的問題,那麼接下來看看穩定性方面。

瀏覽器的支援的方式:

1. 多頁面、外掛程式:穩定嗎,主要就是減少依賴性,那麼就採用多程序的方式;

2. 本地能力的訪問;本地能力往往具備很大的破壞性,比如檔案操作等,因此採用某種策略對本地能力的訪問加以控制,那麼nacl就是不錯的選擇;

對於乙個基於開源專案的產品來說

1. 在利用開源帶來的優點的同時也要考慮開源專案的缺點:不穩定性,對於跟新比較快的專案,如何選擇**同步的策略和自家**的合併方式也很重要。

2. 簡化瀏覽器的介面,在ui方面對使用者的行為做出適當的引導,減少使用者的稀有操作,從而降低奔潰率;

3. 從目前chromium的發展來看,把chromium當成從桌面系統和web系統的過度了,免得直接上chromium os讓大家接受不了。說白了以後瀏覽器就是乙個平台了,所有的應用就在這個平台上執行到了,從uc+,輕應用的發展來看也可以看出一二。那麼開發者就不得不重視這套應用的執行機制和擴充套件機制了。

4. 通過沙箱模型我們也可以延生來看,瀏覽器在相容傳統的客戶端時是否也可以建立一套沙箱模型呢?這個對於有歷史包袱的企業來說很有參考意義。看了下360比較早的實現了。

排序演算法穩定性分析

首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai aj,ai原來在位置前,排序後ai還是要在aj位置前。其次,說一下穩定性的好處。排序演算法如果是穩定的,那麼從乙個鍵上排序,然後再從另乙個...

常用排序穩定性分析

選擇排序 快速排序 希爾排序 堆排序不是穩定的排序演算法 氣泡排序 插入排序 歸併排序和基數排序都是穩定的排序演算法。研究排序演算法的穩定性有何意義?首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資料其在序列中的先後位置順序與排序後它們兩個先後位置順序相同。再簡單具體一點...

排序演算法穩定性分析

氣泡排序 氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的 如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,...