日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

关于html和javascript在浏览器中的加载顺序问题的讨论(zz)

發(fā)布時(shí)間:2023/12/10 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于html和javascript在浏览器中的加载顺序问题的讨论(zz) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前一陣子橫掃了javascript,當(dāng)時(shí)自我感覺良好。現(xiàn)在一想,又覺得沒什么。今天的任務(wù)是把a(bǔ)sp.net ajax中客戶端頁面生命周期那一章研究完。然而,因?yàn)檫@一章的內(nèi)容使我產(chǎn)生了一些迷惑。這些疑惑在書中都沒有只字提及。

一、html頁面的詳細(xì)加載過程是什么呢?頁面元素在加載時(shí)的優(yōu)先級(jí)是什么?

  二、javascript的作用域、變量的作用域、不同腳本段之間的關(guān)系?

  三、html頁面的生命周期?

  這些問題真的打中了我的死穴。不了解這些,我就無法透過asp.net ajax的框架看到其底層原理。只知其然而不知其所以然。

  在網(wǎng)上廣泛查閱資料的情況下。獲得了部分答案。

關(guān)于html的加載:

  總體上,html的是按從上到下的順序邊加載邊解析,邊生成dom對(duì)象,至于在html中夾雜的:

  document.write("xxxx");

  <script type="text/javascript" src="aaa.js"></script>

  之類的東西,它們的順序是怎樣的呢?還是一樣,如果在解析html時(shí),遇到這些東西就會(huì)停止解析,轉(zhuǎn)而執(zhí)行這些生成語句,如果中間插入外部鏈接,就轉(zhuǎn)而解析、執(zhí)行外部鏈接對(duì)應(yīng)的js。對(duì)于以下語句對(duì)于不同瀏覽器存在不同的結(jié)果:

  <script type="text/javascript" src="aaa.js"></script>

  在ie中。不會(huì)等待aaa.js下載并解析完的,會(huì)創(chuàng)建另一線程搞定它,而主線程則越過去。但在ff中。則會(huì)等待,直到aaa.js下載、解析、執(zhí)行完畢。

關(guān)于javascript的執(zhí)行情況,請(qǐng)見本文后面所附的參考資料,里面有詳盡的討論。

關(guān)于html中頁面的生命周期:

  最重要的兩個(gè)事件就是onLoad、onUnLoad。onLoad在頁面加載完畢的時(shí)候觸發(fā)。onUnLoad在頁面的dom銷毀完后觸發(fā)。不過,onLoad有點(diǎn)特殊狀況,也請(qǐng)參見本文后面所附的參考資料。一定要引起注意。

  我看了幾個(gè)站點(diǎn)的html源碼,發(fā)現(xiàn)如下代碼:

<div class="ad1602"><script src="/ggjs/view1602_w.js"></script></div>

  這是某網(wǎng)站在頁面中顯示廣告的代碼,國(guó)內(nèi)網(wǎng)站,顯示廣告一般都是用iframe來引入第三方頁面,這兒卻是直接用javascript段來生成。后來,我又看了163博客生成的html代碼,超變態(tài)啊。整個(gè)html代碼只有一個(gè)架子,所有頁面的生成都是通過js。我看到它的頁面后面引入了幾個(gè)js文件,最后在頁面最后還有一個(gè)initAll函數(shù)的調(diào)用。我沒有去仔細(xì)研究它的js代碼,我懷疑它把所有表現(xiàn)層的功能全面放到客戶端的js文件中去了。服務(wù)器端僅僅是很少的頁面架子和許多的webservices。真是嘆為觀止啊。

關(guān)于一個(gè)事件觸發(fā)多個(gè)響應(yīng)函數(shù):

  我曾想過要自己實(shí)現(xiàn)一個(gè)c#中委托一樣的東西。可以讓javascript的事件不止是關(guān)聯(lián)到一個(gè)function。可以一次觸發(fā)一個(gè)事件列表。這幾天研究asp.net ajax,里面對(duì)此有封裝。

  asp.net ajax中,可以把一個(gè)dom元素封裝成asp.net ajax中的Sys.UI.DomElement對(duì)象。然后就可以用它的方法:addHandler()、addHandlers()、removeHander()來操作事件列表。真是方便啊。當(dāng)時(shí)不大明白這個(gè)原理。今天看到后面參考資料中的兩段代碼讓我徹底明白這中間的細(xì)節(jié):

  一、使用dom 2中的接口:

  if(document.addEventListener){
    window.addEventListener('load',f,false);
    window.addEventListener('load',f1,false);
    ……
  }else{
    window.attachEvent('onload',f);
    window.attachEvent('onload',f1);
    ……
  }

  原來,dom中早有這個(gè)概念了。才曉得。看來,我對(duì)dom還是有許多不了解的地方啊。

  二、這個(gè)方法就是純手實(shí)現(xiàn)了。請(qǐng)參見下面代碼:

function addLoadEvent(func) {

?? var oldonload = window.onload;

?? if (typeof window.onload != 'function') {

    window.onload = func;

?? } else {

???? window.onload = function() {

?????? if (oldonload) {

???????? oldonload();

?????? }

?????? func();

???? }

?? }

}

這個(gè)函數(shù)寫得很巧妙。利用匿名函數(shù)搞定!

參考資料:

javascript 控制優(yōu)化頁面 js 加載順序

html的加載過程

動(dòng)態(tài)加載外部css或js文件

如何減少網(wǎng)頁的內(nèi)存與CPU占用

Javascript在頁面加載時(shí)的執(zhí)行順序

document.onLoad事件的奇怪現(xiàn)象

javascript中的attachEvent與addEventListener

判斷一個(gè)變量是否定義的方法

居然有js寫的Virtual OS

轉(zhuǎn)載于:https://www.cnblogs.com/beyondstorm/archive/2008/09/17/1292940.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的关于html和javascript在浏览器中的加载顺序问题的讨论(zz)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。