JavaShuo
欄目
標籤
高性能javascript
時間 2019-12-04
標籤
高性能
javascript
欄目
JavaScript
简体版
原文
原文鏈接
加載和運行
瀏覽器以單線程處理ui和js任務,處理方式爲串行,一次執行一個任務。(若是瀏覽器爲多線程,瀏覽器整個設計複雜程度會提升不少。)
瀏覽器在碰到script標籤時,中止其餘任務,而後下載script,解析,執行裏面的代碼。script標籤具備阻塞做用。(瀏覽器遇到href不會阻塞頁面,會並行下載,執行其中代碼,href爲在頁面和目標文件之間一種聯繫,而src則是指向一個資源,至關於插入一段資源,會阻塞頁面。因此通常將script標籤放在前一行。link標籤放在head中,優先加載基本樣式。固然script標籤放在head中䦹能夠的,能夠添加async標籤,進行異步加載。chrome穩定版中,同一域名下併發請求數爲6,
chrome相關源碼
)
下載一個100k的script比四個25k的script要快,因此儘量將小的script合併在一個文件中。
利用cdn網絡,加速下載。(內容分發網絡。CDN是構建在網絡之上的內容分發網絡,依靠部署在各地的邊緣服務器,經過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,下降網絡擁塞,提升用戶訪問響應速度和命中率。)
利用script的defer,延遲加載屬性,在頁面dom完成以後,onload方法調用以前加載腳本。
多數瀏覽器在下載動態script時,並不會按照順序下載。
利用XHR下載腳本,並動態插入到頁面中.xhr請求涉及到跨域問題,只能請求不跨域的資源.
數據訪問
數據存儲在哪裏,關係到代碼運行期間數據被檢索到的速度,在javascript中有四種基本的數據訪問的位置(1直接量,2變量,3數組項,4對象成員)。
javascript內部屬性[[Scope]]包含一個函數被建立的做用域中對象的集合。此集合被稱爲函數的做用域鏈,它決定哪些數據可由函數訪問。此函數做用域鏈中的每一個對象被稱爲一個可變對象,每一個可變對象都以「鍵值對」的形式存在。
運行一個函數時,就會創建一個內部對象,稱爲「運行期上下文」。一個運行期上下文定義了一個函數運行時的環境。它是獨一無二的。屢次調用函數,會屢次建立運行期上下文。函數執行完畢,運行期上下文就銷燬。
建立函數時,會填入一個單獨的全局對象到被建立的做用域鏈(用於標識符解析)中,此全局對象包括訪問this對象,window對象,document對象,自己的接口。同時也是建立一個被稱爲「激活對象」填入到做用域鏈中,此對象包括可訪問this,函數參數,函數內部局部變量的接口。
函數運行中,每遇到變量,標識符識別過程就要決定從哪裏獲取或存儲數據。就會在做用域鏈中查找相同的標識符,從做用域鏈的最前端開始,沒找到,就往下一個對象查找,直到找到爲止。一個標識符的所處的位置越深,讀寫速度就越慢,全局對象位置最深,出於做用域鏈中的最後一個位置,一般來講速度最慢。局部變量速度最快。而採用優化的js引擎的瀏覽器沒有此問題。
在局部做用域中,若是全局變量使用次數多於一次,可使用局部變量保存全局變量。再調用局部變量。
能夠改變運行期上下文的做用域鏈的方法:with和try catch。
對象成員中,屢次訪問的屬性,能夠用局部變量保存。避免過深的對象屬性嵌套
dom編程
避免屢次讀寫dom對象
在使用傳統循環時,能夠將length用變量保存,避免每次都須要查詢length。
使用 querySelectorAll比其餘獲取dom的api更快,且參數相似css選擇器。
觸發迴流的行爲:1添加或刪除可見的DOM元素 2元素位置改變 3元素尺寸改變(邊距,填充,邊框寬度,高度等屬性改變) 4內容改變(被更大或更小的尺寸替代) 5最初的頁面渲染 6瀏覽器窗口尺寸改變
觸發迴流的原生api:offsetTop offsetLeft offsetWidth offsetHeight scrollTop scrollLeft scrollWidth scrollHeight clientTop clientLeft clientWidth clientHeight getComputedStyle
使用cssText 合併dom修改,使用預先定義的className修改dom
對一個dom元素要進行屢次修改時,進行一下操做 a 從文檔中去除該元素(display none)/ 使用createDocumentFragment(由於文檔片斷存在於內存中,並不在DOM樹中,因此將子元素插入到文檔片斷時不會引發頁面迴流(對元素位置和幾何上的計算)。所以,使用文檔片斷一般會帶來更好的性能。過多的插入元素,會使得內存暴漲,一樣影響性能。) / 拷貝元素,應用修改,覆蓋原始元素 b 對其應用改變 c 從文檔中恢復該元素
避免進行頁面大部分區域的迴流,使用絕對定位的元素,使其脫離文檔流。不影響真個頁面。避免推移整個頁面。
每一個子元素調用事件api,訪問和修改子元素dom浪費了內存和性能,利用代理技術,由子元素的父元素代理子元素處理事件api。(利用事件api的內部對象event)
算法和流程控制
代碼量少不必定運行速度快,代碼量多不必定運行速度慢。
javascript
相關文章
1.
高性能JavaScript
2.
高性能javascript
3.
高性能JavaScript(高性能Ajax)
4.
高性能Javascript(1)
5.
《高性能javascript》pdf
6.
高性能的JavaScript
7.
web性能優化--高性能javascript
8.
高性能javascript筆記
9.
【譯】編寫高性能JavaScript
10.
JavaScript 性能提高之路
更多相關文章...
•
JavaScript 指南
-
網站建設指南
•
使用流水線(pipelined)提高Redis的命令性能
-
Redis教程
•
JDK13 GA發佈:5大特性解讀
•
SpringBoot中properties文件不能自動提示解決方法
相關標籤/搜索
高性能 javascript
高性能javascript
高性能
高性能MySQL
高性能HTML5
高性能JS
更高性能
高性能 MySQL
JavaScript性能優化
高能
JavaScript
PHP 7 新特性
Spring教程
Hibernate教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
在windows下的虛擬機中,安裝華爲電腦的deepin操作系統
2.
強烈推薦款下載不限速解析神器
3.
【區塊鏈技術】孫宇晨:區塊鏈技術帶來金融服務的信任變革
4.
搜索引起的鏈接分析-計算網頁的重要性
5.
TiDB x 微衆銀行 | 耗時降低 58%,分佈式架構助力實現普惠金融
6.
《數字孿生體技術白皮書》重磅發佈(附完整版下載)
7.
雙十一「避坑」指南:區塊鏈電子合同爲電商交易保駕護航!
8.
區塊鏈產業,怎樣「鏈」住未來?
9.
OpenglRipper使用教程
10.
springcloud請求一次好用一次不好用zuul Name or service not known
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
高性能JavaScript
2.
高性能javascript
3.
高性能JavaScript(高性能Ajax)
4.
高性能Javascript(1)
5.
《高性能javascript》pdf
6.
高性能的JavaScript
7.
web性能優化--高性能javascript
8.
高性能javascript筆記
9.
【譯】編寫高性能JavaScript
10.
JavaScript 性能提高之路
>>更多相關文章<<