為什么要少用Iframe的幾個(gè)原因分析


創(chuàng)建100個(gè) elements 的耗時(shí)
使用 iframe 的頁(yè)面一般不會(huì)包含太多 iframe,所以創(chuàng)建 DOM 節(jié)點(diǎn)所花費(fèi)的時(shí)間不會(huì)占很大的比重。但帶來(lái)一些其它的問(wèn)題:onload 事件以及連接池(connection pool)。
Iframes 阻塞頁(yè)面加載
及時(shí)觸發(fā) window 的 onload 事件是非常重要的。onload 事件觸發(fā)使瀏覽器的 “忙” 指示器停止,告訴用戶(hù)當(dāng)前網(wǎng)頁(yè)已經(jīng)加載完畢。當(dāng) onload 事件加載延遲后,它給用戶(hù)的感覺(jué)就是這個(gè)網(wǎng)頁(yè)非常慢。
window 的 onload 事件需要在所有 iframe 加載完畢后(包含里面的元素)才會(huì)觸發(fā)。在 Safari 和 Chrome 里,通過(guò) JavaScript 動(dòng)態(tài)設(shè)置 iframe 的 SRC 可以避免這種阻塞情況。
唯一的連接池
瀏覽器只能開(kāi)少量的連接到web服務(wù)器。比較老的瀏覽器,包含 Internet Explorer 6 & 7 和 Firefox 2,只能對(duì)一個(gè)域名(hostname)同時(shí)打開(kāi)兩個(gè)連接。這個(gè)數(shù)量的限制在新版本的瀏覽器中有所提高。Safari 3+ 和 Opera 9+ 可同時(shí)對(duì)一個(gè)域名打開(kāi) 4 個(gè)連接,Chrome 1+, IE 8 以及 Firefox 3 可以同時(shí)打開(kāi) 6 個(gè)。你可以通過(guò)這篇文章查看具體的數(shù)據(jù)表:Roundup on Parallel Connections.
有人可能希望 iframe 會(huì)有自己獨(dú)立的連接池,但不是這樣的。絕大部分瀏覽器,主頁(yè)面和其中的 iframe 是共享這些連接的。這意味著 iframe 在加載資源時(shí)可能用光了所有的可用連接,從而阻塞了主頁(yè)面資源的加載。如果 iframe 中的內(nèi)容比主頁(yè)面的內(nèi)容更重要,這當(dāng)然是很好的。但通常情況下,iframe 里的內(nèi)容是沒(méi)有主頁(yè)面的內(nèi)容重要的。這時(shí) iframe 中用光了可用的連接就是不值得的了。一種解決辦法是,在主頁(yè)面上重要的元素加載完畢后,再動(dòng)態(tài)設(shè)置 iframe 的 SRC。
美國(guó)前 10 大網(wǎng)站都使用了 iframe。大部分情況下,他們用它來(lái)加載廣告。這是可以理解的,也是一種符合邏輯的解決方案,用一種簡(jiǎn)單的辦法來(lái)加載廣告服務(wù)。但請(qǐng)記住,iframe 會(huì)給你的頁(yè)面性能帶來(lái)沖擊。只要可能,不要使用 iframe。當(dāng)確實(shí)需要時(shí),謹(jǐn)慎的使用他們。
相關(guān)文章
- iframe如何刷新一直都被網(wǎng)友所關(guān)注,接下來(lái)為大家詳細(xì)介紹下三種:用iframe的name屬性定位/id屬性定位/當(dāng)iframe的src為其它網(wǎng)站地址時(shí),感興趣的朋友可以參考下哈2013-03-29
iframe的src設(shè)置為about:blank之后細(xì)節(jié)探討
不設(shè)置為about:blank,內(nèi)存不會(huì)釋放掉。還必須用 iframe.document.write(''); 這樣才能將內(nèi)容清空,本文將詳細(xì)探討一下iframe的src設(shè)置為about:blank之后細(xì)節(jié),感興趣的你2013-02-25- frame的src賦值的問(wèn)題,本文將進(jìn)行詳細(xì)探討:服務(wù)器端的iframe重新src重新賦值,給iframe加一個(gè)ID,再加上runat=server,感興趣的你可不要錯(cuò)過(guò)了哈2013-02-25
網(wǎng)頁(yè)設(shè)計(jì)技巧:iframe自適應(yīng)高度的問(wèn)題
所謂iframe自適應(yīng)高度,就是,基于界面美觀和交互的考慮,隱藏了iframe的border和scrollbar,讓人看不出它是個(gè)iframe2012-11-12iframe標(biāo)簽用法詳解(屬性、透明、自適應(yīng)高度)
iframe一般用來(lái)包含別的頁(yè)面,例如我們可以在我們自己的網(wǎng)站頁(yè)面加載別人網(wǎng)站的內(nèi)容,為了更好的效果,可能需要使iframe透明效果,那么就需要了解更多的iframe屬性,這里簡(jiǎn)2014-10-01- 在構(gòu)建B/S系統(tǒng)界面的時(shí)候,經(jīng)常會(huì)遇到主頁(yè)面index.html中嵌套其他頁(yè)面的情況 ,雖然已經(jīng)有的庫(kù)已經(jīng)提供了控件(例如jQuery easy UI),但是有時(shí)候iframe的使用是不可避免的2010-08-06
- 有時(shí)候需要讓iframe繼承父頁(yè)面的顏色。不需要復(fù)雜的操作,簡(jiǎn)單的幾個(gè)參數(shù)設(shè)置下即可。2010-07-21
IE6 select z-index無(wú)效,遮擋div bug的解決方法
在最近的一個(gè)項(xiàng)目中,遇到了IE6 select遮擋div的bug,為了解決這個(gè)bug我查了很多資料,試圖找到一個(gè)最最有效的方法,很多人是通過(guò)iframe的方法來(lái)解決,其實(shí)我查了國(guó)外的很2010-06-18Iframe 高度自適應(yīng)(兼容IE/Firefox、同域/跨域)
在實(shí)際的項(xiàng)目進(jìn)行中,很多地方可能由于歷史原因不得不去使用iframe,包括目前正火熱的應(yīng)用開(kāi)發(fā)也是如此。2010-03-17- Iframe和FRAME的區(qū)別,方便大家以后在使用過(guò)程中根據(jù)實(shí)際需要取舍。2010-03-08