第八章 運(yùn)行環(huán)境

8-1 介紹

一裹粤、問(wèn)題

  • 瀏覽器就可以通過(guò)訪問(wèn)鏈接來(lái)得到頁(yè)面的內(nèi)容
  • 通過(guò)繪制和渲染拯坟,顯示出頁(yè)面最終的樣子
  • 整個(gè)過(guò)程蚊逢,我們需要考慮什么問(wèn)題

二、知識(shí)點(diǎn)

  • 頁(yè)面加載過(guò)程
  • 性能優(yōu)化
  • 安全性

8-2 頁(yè)面加載過(guò)程

題目

  • 從輸入url得到html的詳細(xì)過(guò)程
  • window.load 和 DOMContentLoaded 的區(qū)別

知識(shí)點(diǎn)

  • 加載資源的形式

輸入url(或者跳轉(zhuǎn)頁(yè)面)加載html
http://coding.m.imooc.com
加載 html 中的靜態(tài)資源
<script src="/static/js/jquery.js"></script>

  • 加載一個(gè)資源的過(guò)程

瀏覽器根據(jù)dns服務(wù)器得到域名的ip地址
向這個(gè)ip的機(jī)器發(fā)送http請(qǐng)求
瀏覽器收到果善、處理并返回http請(qǐng)求
瀏覽器得到返回內(nèi)容

  • 瀏覽器渲染頁(yè)面的過(guò)程

跟進(jìn)html結(jié)構(gòu)生成dom tree
根據(jù)css 生成 cssom
將dom 和cssom 整合形成 RenderTree
根據(jù)RenderTree 開(kāi)始渲染和展示
遇到<script>時(shí),會(huì)執(zhí)行并阻塞渲染

  • windwo.onload 和 DOMContentLoaded
window.addEventListener('load', function(){
  // 頁(yè)面的全部資源加載完才會(huì)執(zhí)行系谐,包括圖片巾陕、視頻等
})

windw.addEventListener('DOMContentLoaded', function(){
  // DOM 渲染完成即可執(zhí)行,此時(shí)圖片蔚鸥、視頻還可能沒(méi)有加載完
})

8-3 性能優(yōu)化

原則

  • 多使用內(nèi)存惜论、緩存或者其他方法
  • 減少cpu計(jì)算,較少網(wǎng)絡(luò)

從哪里入手

1.加載頁(yè)面和靜態(tài)資源

  • 靜態(tài)資源的壓縮合并
  • 靜態(tài)資源緩存
  • 使用cdn讓資源加載更快
  • 使用ssr后端渲染止喷,數(shù)據(jù)直接輸出到html中

2. 頁(yè)面渲染

  • css放前面馆类,js放后面
  • 懶加載(圖片懶加載,下拉加載更多)
  • 減少dom查詢弹谁,對(duì)dom查詢做緩存
  • 減少dom操作乾巧,多個(gè)操作盡量合并在一起
  • 事件節(jié)流
  • 盡早執(zhí)行操作(如 DOMContentLoaded)

例子

1.資源合并

<script src="a.js"></sceript>
<script src="b.js"></sceript>
<script src="c.js"></sceript>

<script src="abc.js"></sceript>

2.緩存

// 通過(guò)鏈接名稱控制緩存
<script src="abc_1.js">
// 只有內(nèi)容改變的時(shí)候句喜,鏈接名稱才會(huì)改變
<script src="abc_2.js">

3.使用ssr后端渲染

現(xiàn)在vue react 提出這樣的概念
其實(shí)jsp php asp 都屬于后端渲染

好處是直接渲染數(shù)據(jù),不用ajax 請(qǐng)求數(shù)據(jù)

4.懶加載

<img id = "img1" src="preview.png" data-realsrc="abc.png">
<script type="text/javascript">
  var img1 = docuemnt.getElemntById('img1')
  img1.src = img1.getAttribute('data-realsrc')
</script>

5.緩存dom查詢

// 未緩存 dom 查詢
var i
for(i=0; i< docuemnt.getElementsByTagName('p').length, i++){
  // todo
}

// 緩存了dom查詢的
var plist = docuemnt.getElementsByTagName('p')
var i 
for(i=0; i<plist.length; i++){
  // todo
}

6.合并dom插入

//要插入的10個(gè)li標(biāo)簽
var frag = docuemnt.createDocumentFragment();
var x, li;
for(x=0; x<10; x++){
  li = docuemnt.createElement("li")
  li.innerHTML = "list item" + x;
  frag.appendchild(li);
}
listNode.appendChild(frag);

7.事件節(jié)流

var textarea = docuemnt.getElementById('text')
var timeoutId 
textarea.addEventLister('keyup', function(){
  if(timeoutId){
    clearTime(timeoutId)
  }
  timeoutId = setTimeout(function(){
    // 觸發(fā)change事件
  },100)
})

8.盡早操作

window.addEventListener('load', function(){
  // 頁(yè)面的全部資源加載完才會(huì)執(zhí)行沟于,包括圖片咳胃、視頻等
})

windw.addEventListener('DOMContentLoaded', function(){
  // DOM 渲染完成即可執(zhí)行,此時(shí)圖片旷太、視頻還可能沒(méi)有加載完
})

8-4 安全性

知識(shí)點(diǎn)

  • xss 跨站請(qǐng)求攻擊
  • xsrf 跨站請(qǐng)求偽造

xss

1.在新浪微博寫一篇文章展懈,同時(shí)偷偷插入一鍛<script>
2.攻擊代碼中,獲取cookie供璧,發(fā)送自己的服務(wù)器
3.發(fā)布博客存崖,有人查看博客內(nèi)容
4.會(huì)把查看者的cookie發(fā)送到攻擊者的服務(wù)器

解決

前端替換關(guān)鍵詞,例如替換 < 為 < >為 >
后端替換

xsrf

  1. 你已登錄一個(gè)購(gòu)物網(wǎng)站睡毒,正在瀏覽商品
  2. 該網(wǎng)站付費(fèi)接口為 xx.com/pay?id=100 但是沒(méi)有任何驗(yàn)證
  3. 然后呢收到一封郵件来惧,隱藏著<img src=xx.com/pay?id=100>
  4. 你查看郵件的時(shí)候,就已經(jīng)悄悄的付費(fèi)購(gòu)買了

解決

增加驗(yàn)證流程演顾,如輸入指紋供搀,密碼、短信驗(yàn)證碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钠至,一起剝皮案震驚了整個(gè)濱河市葛虐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棕洋,老刑警劉巖挡闰,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掰盘,居然都是意外死亡摄悯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門愧捕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奢驯,“玉大人,你說(shuō)我怎么就攤上這事次绘”窀螅” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵邮偎,是天一觀的道長(zhǎng)管跺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)禾进,這世上最難降的妖魔是什么豁跑? 我笑而不...
    開(kāi)封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮泻云,結(jié)果婚禮上艇拍,老公的妹妹穿的比我還像新娘狐蜕。我一直安慰自己,他們只是感情好卸夕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布层释。 她就那樣靜靜地躺著,像睡著了一般快集。 火紅的嫁衣襯著肌膚如雪贡羔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天碍讨,我揣著相機(jī)與錄音治力,去河邊找鬼。 笑死勃黍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晕讲。 我是一名探鬼主播覆获,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓢省!你這毒婦竟也來(lái)了弄息?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勤婚,失蹤者是張志新(化名)和其女友劉穎摹量,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體馒胆,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缨称,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祝迂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睦尽。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖型雳,靈堂內(nèi)的尸體忽然破棺而出当凡,到底是詐尸還是另有隱情,我是刑警寧澤纠俭,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布沿量,位于F島的核電站,受9級(jí)特大地震影響冤荆,放射性物質(zhì)發(fā)生泄漏朴则。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一匙赞、第九天 我趴在偏房一處隱蔽的房頂上張望佛掖。 院中可真熱鬧妖碉,春花似錦、人聲如沸芥被。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拴魄。三九已至冗茸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匹中,已是汗流浹背夏漱。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顶捷,地道東北人挂绰。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像服赎,于是被迫代替她去往敵國(guó)和親葵蒂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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