前言 為何最佳化效能與前端工程師重要
在業界有句話不知道大家有沒有聽說過,'懂得性能優化並且研究過jquery源代碼的人和不懂得性能優化寫出來的代碼對於性能的消耗會相差上百倍甚至上千倍',現在的javascript屬於從ECMAscript3到ECMAscript5以及ECMAscript6的一個過渡的過程。在javascript的寫不健全的時候寫程式方法不得當,造成的問題也是不容忽視的。
效能最佳化
以下將一些關於效能最佳化的見解與大家分享;
1.精靈圖
最基本的是盡可能的背景圖片做成精靈圖,減少圖片的請求,所以一般web工程師的另一個基礎本能就是精靈圖的製作。
2.css選擇器最佳化
在css中要盡量的使用子代選擇器>,少使用後代選擇器,使用後代選擇器時,搜素引擎會將所有的後代元素都進行搜索,如果我們使用子代選擇器時,可以將搜尋的範圍縮小,從而減少搜尋引擎的效能消耗。
3.js改變樣式直接運算類別
js操作元素樣式時,不要用style去直接添加樣式,一般屬性少時不會影響多少性能,其實則不然,每次添加樣式時,頁面都會重繪一次,重繪是不得不重視的,操作樣式時,直接操作類別名,只引起一次重繪,用style直接添加樣式會造成多次的重繪。
4.js直接操作dom節點
當操作節點時盡量將節點加在元素的後面,如果插入到節點的前面時,會使插入節點之後的節點都引起回流,而插入到後面時只需要被插入的節點回流一次就可以了。
可能有人不懂重繪與回流的概念
5.正規配對選擇器
在css3以及jQuery中的屬性選擇器,這些選擇器中有的是用正則進行匹配的盡量不要去使用,當然如果對於性能優化不進行考慮的話,這些方法還是比較好用的,正規匹配選擇器會使搜尋引擎搜尋所有的標籤,很大的影響效能
6.js取得元素最佳化
在js中獲得元素時,正常是使用document.getElementsById,搜尋引擎會從Dom樹的最底端,進行搜索,直到搜尋到window中的document再進行返回搜索,所以在獲得元素時最好是將document.body進行儲存,當再次使用時,只需將這個變數取出使用,可以節省搜尋引擎的效能
7.記憶體溢位
一般在遞迴運作時,會產生記憶體溢出,造成在運作遞歸時效能大幅下降,在運作結束後記憶體會被系統回收,所以在運作遞迴時需要用物件將數值保存,在每次遞歸運算時檢測,如果存在則直接返回,不存在則添加,這樣就可以解決遞歸的很大性能。
8.對Ajax用GET請求
POST請求是透過先發送HTTP請求頭,再發送資料來實現的,GET而是沒有請求頭的,但是需要注意:GET大小限制約4K,POST則沒有限制。
9.延遲載入圖片
在頁面啟動請求時,請求量過大,可將圖片進行懶加載,當頁面滾到圖片的位置時,再進行載入圖片。
下面推薦一個圖片懶得載入的外掛程式
jquery.lazyload.js
10.避免图片src属性为空
src 属性是空字符串的图片很常见,主要以两种形式出现:
var img = new Image();img.src = “”;
这两种形式都会引起相同的问题:浏览器会向服务器发送另一个请求。
技巧
1.排他思想
先排除当前所有的,再进行下一次操作;一般在进行动画、添加样式等时,在二次操作时先清楚前面的样式再从新添加新的样式,避免同时进行动画的冲突。
2.短路运算(||)
一般在一个值需要判断是否存在时,尽量不要使用if语句,可以使用短路运算符,可以省去代码占用的内存。比如:
a=a||b;
a存在则使用a,a不存在则使用b。
3.运算(&&)
可以运用在条件匹配时,以便条件的多余查询,比如判断一个对象是否为数组时,
a && a.length&& a.length>=0
4.伪数组以及数组
当需要封装一个非数组元素变为一个数组时,最简单的办法就是给其添加一个[],如果需要是一个伪数组时,可以给其设置一个length属性。
5.节流阀
一般运用在动画中,设定一个值,开始时设置为true,判断其值,在进入动画时给这个值赋值为false,在动画结束时使用回调函数再重新赋值为true。
6.解除文本的被动选中状态(纯干货)
当在点击一些按钮时,有时会出现文本被选中的情况,让客户看见就犹如bug一般,以下是解除这一状态的代码,粘贴即可。
if(document.all){ document.onselectstart= function(){return false}; //for ie }else{ document.onmousedown= function(){return false}; document.onmouseup= function(){return true}; } document.onselectstart = new Function('event.returnValue=false');
7.巧妙使用三元运算符
当需要判断一个值是否存在,也可以使用三元运算符使代码更加优化。比如
obj=obj===undefined?Object:obj;
补充:
上述是自己在工作中,总结的前端优化以及一些技巧与大家分享,如果大家有什么好的优化以及技巧希望可以多多评论,个人认为技术是需要多沟通才可以更好的进步。

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中