前端Tips

前端Tips:

判斷變量是不是數(shù)組

(注意跨frame實(shí)例化對(duì)象不共享原型)

var a=[];
a.constructor===Array;
a instanceof Array ===true;

關(guān)于instanceof

用法:(object instanceof constructor)
用來(lái)檢驗(yàn)constructor.prototype是否存在于參數(shù)object的原型鏈上胸哥。
關(guān)于new(var obj=new Xxx()):
1.創(chuàng)建一個(gè)新對(duì)象
2.將這個(gè)新對(duì)象的proto指向構(gòu)造函數(shù)的prototype(即將新創(chuàng)建對(duì)象的隱式原型指向構(gòu)造函數(shù)的顯示原型)针史。
3.將構(gòu)造函數(shù)的this指向這個(gè)新創(chuàng)建的對(duì)象(即將this指向這個(gè)新對(duì)象)豆赏。
4.無(wú)返回值或非對(duì)象返回則返回這個(gè)對(duì)象竞膳,否則返回這個(gè)返回的新對(duì)象文虏。

避免XSS

(可以理解為一種js注入坑填,既然是注入就需要對(duì)輸入進(jìn)行規(guī)范)
XSS方式:a.注入出現(xiàn)在URL中裆泳,然后又隨服務(wù)器返回到瀏覽器b.這個(gè)注入會(huì)存儲(chǔ)在服務(wù)端戏蔑。
1.避免使用eval蹋凝,new Function方法可接受字符串形式的js代碼。
2.cookie的httpOnly可以阻止js讀取cookie总棵。
3.注意innerHTML,document.write方法鳍寂。
4.對(duì)用戶輸入的數(shù)據(jù)進(jìn)行HTML Entity編碼。

瀏覽器渲染原理

(不同瀏覽器大同小異):
1.一般以8K單位接受請(qǐng)求的內(nèi)容情龄,并解析其中的HTML構(gòu)建DOM Tree(display:none的元素不會(huì)渲染)迄汛。CSS構(gòu)建CSS Rule Tree。
2.DOM骤视,CSS合并生成Render Tree鞍爱。根據(jù)CSS2標(biāo)準(zhǔn),tree中每個(gè)節(jié)點(diǎn)都成為box尚胞,具有width硬霍,height,margin笼裳,padding等屬性唯卖。
3.瀏覽器根據(jù)Render Tree可以知道網(wǎng)頁(yè)中的節(jié)點(diǎn)粱玲,各節(jié)點(diǎn)的關(guān)系或樣式或位置。最后通過(guò)顯卡繪制出來(lái)拜轨。

回流(reflow)和重繪(repaint):

回流:Render Tree中一些元素尺寸布局等發(fā)生改變抽减,頁(yè)面需要重新構(gòu)建,頁(yè)面需要執(zhí)行reflow操作橄碾。
重繪:Render Tree中一些元素外觀一類的屬性發(fā)生改變卵沉,不會(huì)影響布局,這會(huì)觸發(fā)repaint法牲。

減少reflow

Dom Tree的每個(gè)節(jié)點(diǎn)都有reflow方法史汗,一個(gè)節(jié)點(diǎn)的reflow可能觸發(fā)其他節(jié)點(diǎn)的reflow,reflow不可避免拒垃,難以預(yù)測(cè)停撞。
1.將多次的樣式操作合并到一次操作,可以新建一個(gè)類選擇器悼瓮,將這些樣式添加進(jìn)來(lái)戈毒。
2.display:none不在Tree中,修改屬性不會(huì)觸發(fā)回流横堡,可以先隱藏再操作埋市,再顯示。
3.DocumentFragment緩存操作命贴,這個(gè)還沒(méi)聽(tīng)過(guò)道宅。
4.position設(shè)置為absolute或fixed。這樣改變CSS會(huì)大大減少reflow套么。
5.不要使用table布局培己。
6.避免不必要的復(fù)雜CSS選擇器,尤其是后代選擇器胚泌!

box-sizing

設(shè)置盒子模型為標(biāo)準(zhǔn)模式或者IE模式。屬性有三個(gè):
1.content-box:默認(rèn)值肃弟,border和padding不計(jì)算到width玷室。
2.padding-box:padding算入width。
3.border-box:border和padding都會(huì)算入width笤受。
4.另外標(biāo)準(zhǔn)模式下穷缤,背景其實(shí)是包括邊框的,可以使用background-clip來(lái)設(shè)置箩兽。
5.同理background-origin也可以設(shè)置背景圖片的位置津肛。

取消冒泡:

event.cancleBubble=true;這種相當(dāng)于全局取消事件冒泡。

入口函數(shù)

window.onload=function(){...}和$(document).ready(function(){...})
1.js中需要等待圖片等所有元素加載完畢才會(huì)執(zhí)行汗贫,jq中則是等待DOM結(jié)構(gòu)繪制完成即可執(zhí)行身坐。
2.js這方法只能執(zhí)行一個(gè)秸脱,jq編寫(xiě)多個(gè)入口函數(shù),多個(gè)都會(huì)執(zhí)行部蛇。
3.如果需要等待所有元素加載完畢則使用$(window).load(function(){...}),這個(gè)相當(dāng)于js中的window.onload摊唇。
4.一些問(wèn)題:jq3版本js入口函數(shù)總是會(huì)先執(zhí)行。jq2版本是正常順序涯鲁,3版本好像在網(wǎng)頁(yè)資源很少的時(shí)候js的入口函數(shù)就會(huì)先執(zhí)行巷查。
5.jq可簡(jiǎn)寫(xiě)為$(function(){...})。

promise

首先會(huì)執(zhí)行Promise里的方法抹腿,方法里會(huì)有一個(gè)resolve和result岛请,相當(dāng)于兩個(gè)指針,執(zhí)行到一個(gè)就會(huì)觸發(fā)相應(yīng)的then或者是catch警绩,then里是一個(gè)函數(shù)髓需,接受的參數(shù)通過(guò)resolve傳入。

onmouseover:移動(dòng)到子元素也會(huì)繼續(xù)觸發(fā)over房蝉。
onmouseenter:子元素不會(huì)影響僚匆。

require.js

介紹:實(shí)現(xiàn)異步加載,簡(jiǎn)化很多js文件之間的依賴搭幻,加載咧擂,引入的表示方式。

邊框陰影

邊框陰影也可以設(shè)置透明度檀蹋,這樣看起來(lái)會(huì)很美觀松申,而且還會(huì)解決沒(méi)透明度會(huì)出現(xiàn)陰影和背景色一樣的情況。

 box-shadow: -1px 0 2px rgb(000, 000, 000, 0.2),
      0 0 0 rgb(000, 000, 000, 0.2),
      1px 0 2px rgb(000, 000, 000, 0.2), 
      0 2px 4px rgb(000, 000, 000, 0.2);

JS性能的優(yōu)化:

1.避免全局查找俯逾,全局查找需要設(shè)計(jì)作用域鏈上的查找贸桶。
2.避免使用with一句,with會(huì)創(chuàng)建自己的作用域桌肴,會(huì)增加執(zhí)行代碼的作用域鏈的長(zhǎng)度皇筛,with語(yǔ)句中的代碼的執(zhí)行時(shí)間肯定會(huì)比外面的代碼的執(zhí)行時(shí)間長(zhǎng)。

function test(){
  with(document.body){
  alert(tagName);
  innerHtml="Hello";
  }
}
function test(){
  var body=document.body;
  alert(body.tagName);
  body.innerHtml="Hello";
  }
}

3.幾個(gè)算法復(fù)雜度的例子:
O(1):var value=10;arr[1];
O(log n):二分查找坠七,總的執(zhí)行時(shí)間和值得數(shù)量有關(guān)水醋,但并不一定要獲得的每個(gè)值。
O(n):遍歷一個(gè)數(shù)組中的元素彪置。
O(n^2):每個(gè)值至少需要獲取n次拄踪,例如插入排序。
思路:可以將多次使用的一個(gè)復(fù)雜度高點(diǎn)的變量設(shè)為局部變量拳魁。
4.優(yōu)化循環(huán):
減值迭代:
優(yōu)化循環(huán)體:
簡(jiǎn)化終止條件:因?yàn)槊看窝h(huán)都會(huì)計(jì)算終止條件惶桐,然后和他比較。
使用后測(cè)試循環(huán)(do-while):


5.展開(kāi)循環(huán):循環(huán)次數(shù)不多可以展開(kāi),減少了終止條件的判斷姚糊。
思路:Duff裝置贿衍,將所有循環(huán)按每八個(gè)一起執(zhí)行。

var iterations = Math.floor(values.length/8);
var leftover = values.length&8;//處理多余的幾個(gè)元素
var i=0;
/*用來(lái)處理多出來(lái)的幾個(gè)元素*/
if(leftover>0){
  do{
  process(values[i++]);
  }while(--leftover>0);
}
/*余下數(shù)量為8的倍數(shù)叛拷,不用擔(dān)心下標(biāo)越界*/
do{
  process(values[i++]);
  //...以下省略其余7個(gè)循環(huán)體
}while(--iterations>0);

6.避免雙重解釋:Function(),eval();
7.原生方法快點(diǎn)舌厨,switch語(yǔ)句快點(diǎn),位運(yùn)算符快點(diǎn)忿薇,var語(yǔ)句可以合并裙椭,迭代可以arr[i++],只用一條語(yǔ)句創(chuàng)建數(shù)組或?qū)ο蟆?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末署浩,一起剝皮案震驚了整個(gè)濱河市揉燃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筋栋,老刑警劉巖炊汤,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異弊攘,居然都是意外死亡抢腐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)襟交,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)迈倍,“玉大人,你說(shuō)我怎么就攤上這事捣域√淙荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵焕梅,是天一觀的道長(zhǎng)迹鹅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贞言,這世上最難降的妖魔是什么斜棚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蜗字,結(jié)果婚禮上打肝,老公的妹妹穿的比我還像新娘。我一直安慰自己挪捕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布争便。 她就那樣靜靜地躺著级零,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奏纪,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天鉴嗤,我揣著相機(jī)與錄音,去河邊找鬼序调。 笑死醉锅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的发绢。 我是一名探鬼主播硬耍,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼边酒!你這毒婦竟也來(lái)了经柴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤墩朦,失蹤者是張志新(化名)和其女友劉穎坯认,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體氓涣,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牛哺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劳吠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片引润。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赴背,靈堂內(nèi)的尸體忽然破棺而出椰拒,到底是詐尸還是另有隱情,我是刑警寧澤凰荚,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布燃观,位于F島的核電站,受9級(jí)特大地震影響便瑟,放射性物質(zhì)發(fā)生泄漏缆毁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一到涂、第九天 我趴在偏房一處隱蔽的房頂上張望脊框。 院中可真熱鬧,春花似錦践啄、人聲如沸浇雹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昭灵。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烂完,已是汗流浹背试疙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抠蚣,地道東北人祝旷。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嘶窄,于是被迫代替她去往敵國(guó)和親怀跛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容