題目1:window.onload 和 document.onDOMContentLoaded 有什么區別?
- windo.onload:當頁面完全加載后(包括所有圖像,JavaScript文件,CSS文件等外部資源),就會觸發window上面的load事件。
- document.onDOMContentLoaded:當初始HTML文檔被完全加載和解析完成之后,DOMContentLoaded 事件被觸發,而無需等待樣式表、圖像和子框架完成加載。
題目2:如何獲取圖片真實的寬高
// 獲取圖片的寬度
getComputedStyle(img).width
// 獲取圖片的高度
getComputedStyle(img).height
//低版本IE瀏覽器中
img.currentStyle.width
img.currentStyle.height
題目3: 如何獲取元素的真實寬高
// 真實高度
htmlEl.offsetHeight
// 真實寬度
htmlEl.offsetWidth
題目4: URL 如何編碼解碼?為什么要編碼?
- encodeURI() 不會對ASCII,數字,~!@#$&* ()=:/,;?+'編碼
- encodeURIComponent() 不會對ASCII,數字,~!* ()編碼
- URL 只能使用 ASCII 字符集來通過因特網進行發送。
也就是說URL只能使用英文字母、阿拉伯數字和某些標點符號,不能使用其他文字和符號 - 這意味著 如果URL中有漢字,就必須編碼后使用。
但是麻煩的是 標準的國際組織并沒有規定具體的編碼方法,而是交給應用程序(瀏覽器)自己決定。
這導致"URL編碼"成為了一個混亂的領域。
- URL 只能使用 ASCII 字符集來通過因特網進行發送。
題目5: 補全如下函數,判斷用戶的瀏覽器類型
function isAndroid(){
return /Android/.test(navigator.userAgent);
}
funcnction isIphone(){
return /iPhone/.test(navigator.userAgent);
}
function isIpad(){
return /iPad/.test(navigator.userAgent);
}
function isIOS(){
return /(iPad)|(iPhone)/i.test(navigator.userAgent);
}
題目6: cookie & session &localStorage 分別是什么
- cookie
1.cookie是存儲在瀏覽器上的一小段數據,用來記錄某些當頁面關閉或者刷新后仍然需要記錄的信息。在控制臺用 「document.cookie」查看你當前正在瀏覽的網站的cookie。
2.cookie可以使用 js 在瀏覽器直接設置(用于記錄不敏感信息,如用戶名), 也可以在服務端通使用 HTTP 協議規定的 set-cookie 來讓瀏覽器種下cookie,這是最常見的做法。(打開一個網站,清除全部cookie,然后刷新頁面,在network的Response headers試試找一找set-cookie吧)
3.每次網絡請求 Request headers 中都會帶上cookie。所以如果 cookie 太多太大對傳輸效率會有影響。
4.一般瀏覽器存儲cookie 最大容量為4k,所以大量數據不要存到cookie。
設置cookie時的參數:path:表示 cookie 影響到的路徑,匹配該路徑才發送這個 cookie。expires 和 maxAge:告訴瀏覽器 cookie 時候過期,maxAge 是 cookie 多久后過期的相對時間。不設置這兩個選項時會產生 session cookie,session cookie 是 transient 的,當用戶關閉瀏覽器時,就被清除。一般用來保存 session 的 session_id。
5.secure:當 secure 值為 true 時,cookie 在 HTTP 中是無效,在 HTTPS 中才有效
6.httpOnly:瀏覽器不允許腳本操作 document.cookie 去更改 cookie。一般情況下都應該設置這個為 true,這樣可以避免被 xss 攻擊拿到cookie。[cookie 參數][簡述 Cookie 是什么]
- session
當一個用戶打開淘寶登錄后,刷新瀏覽器仍然展示登錄狀態。服務器如何分辨這次發起請求的用戶是剛才登錄過的用戶呢?這里就使用了session保存狀態。用戶在輸入用戶名密碼提交給服務端,服務端驗證通過后會創建一個session用于記錄用戶的相關信息,這個 session 可保存在服務器內存中,也可保存在數據庫中。
1.創建session后,會把關聯的session_id 通過setCookie 添加到http響應頭部中。
2.瀏覽器在加載頁面時發現響應頭部有 set-cookie字段,就把這個cookie 種到瀏覽器指定域名下。
3.當下次刷新頁面時,發送的請求會帶上這條cookie, 服務端在接收到后根據這個session_id來識別用戶。
cookie 是存儲在瀏覽器里的一小段「數據」,而session是一種讓服務器能識別某個用戶的「機制」,session 在實現的過程中需要使用cookie。 二者不是同一維度的東西。
- localStorage
1.localStorage HTML5本地存儲web storage特性的API之一,用于將大量數據(最大5M)保存在瀏覽器中,保存后數據永遠存在不會失效過期,除非用 js手動清除。
2.不參與網絡傳輸。
3.一般用于性能優化,可以保存圖片、js、css、html 模板、大量數據。
題目7:使用 localStorage封裝一個 Storage 對象,達到如下效果
var Storage = (function(){
return {
set: function(key, value, expireSeconds){
localStorage[key] = JSON.stringify({
value: value,
expired: expireSeconds===undefined?undefined:Date.now() + 1000*expireSeconds
})
},
get: function(key){
if(localStorage[key] === undefined){
return
}
var o = JSON.parse(localStorage[key])
if(o.expired === undefined || Date.now() < o.expired){
return o.value
}else{
delete localStorage[key]
}
}
}
})()
http://js.jirengu.com/fagicayafu/6/edit
題目8:很多網站的靜態資源使用CDN地址而不是使用當前網站域名,從cookie的角度說說這對性能有何影響?
- 如果文件資源都是一個域名的話,會請求很多沒有必要的cookie,
以百度網站為例
需要記錄用戶信息的,我們才使用自己的網站域名如圖一,而圖片之類不需要記錄用戶信息如果我們用自己的網站域名,反而會增加請求的負擔,會對性能造成影響。