性能優化的方法
(1)減少http請求次數,CSS Scriptes,Js,Css源碼壓縮,圖片大小控制合適;網頁Gzip, cdn托管,data緩存,圖片服務器
(2)前端模板js+數據,減少由Html標簽導致的帶寬浪費,前端用變量保存ajax請求結果,每次操作本地變量,不用請求,減少請求次數。
(3)用innerHTML代替DOM操作次數,優化javascript性能
(4)當需要設置的樣式很多時設置className而不是直接操作style。
(5)少用全局變量,緩沖Dom節點查找的結果,減少io讀取操作
(6)避免cssExpreion(css表達式)
(7)圖片預加載,將樣式放在頂部;將腳本放在底部 加上時間戳
null和undefined的區別
null是一個表示“無”的對象,轉為數值時為0;
undefined是一個代表“無”的原始值,轉為數值為NAN
undefined:
(1)變量聲明,但是沒有賦值,就等于undefined。
(2)調用函數時,應提供的參數沒有提供,該參數等于undefined
(3)對象沒有賦值的屬性,
(4)函數沒有返回值
null:
(1)作為函數的參數,表示該函數的參數 表示對象
(2)作為對象原型鏈的終點
new操作符具體干了什么呢?
(1)創建一個空對象,并且 this 變量引用該對象,同時還繼承了該函數的原型。
(2)屬性和方法被加入到 this 引用的對象中。
(3)新創建的對象由 this 所引用,并且最后隱式的返回 this
call() 和 apply() 的區別和作用?
apply()函數有兩個參數:第一個參數是上下文,第二個參數是參數組成的數組。如果上下文是null,則使用全局對象代替。
如:function.apply(this,[1,2,3]);
call()的第一個參數是上下文,后續是實例傳入的參數序列。
如:function.call(this,1,2,3);
頁面導入樣式時,使用link和@import有什么區別?
(1)link屬于XHTML標簽,除了加載CSS外,還能用于定義RSS, 定義rel連接屬性等作用;而@import是CSS提供的,只能用于加載CSS;
(2)頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;
(3)import是CSS2.1 提出的,只在IE5以上才能被識別,而link是XHTML標簽,無兼容問題;
.iframe有那些缺點?
(1)iframe會阻塞主頁面的Onload事件;
(2)搜索引擎的檢索程序無法解讀這種頁面,不利于SEO;
(3)iframe和主頁面共享連接池,而瀏覽器對相同域的連接有限制,所以會影響頁面的并行加載。
(4)使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通過javascript動態給iframe添加src屬性值,這樣可以繞開以上兩個問題
為什么要使用CSS sprites
CSS Sprites其實就是把網頁中一些背景圖片整合到一張圖片文件中,再利用CSS的“background-image”,“background-position”的組合進行背景定位,這樣可以減少很多圖片請求的開銷,因為請求耗時比較長;請求雖然可以并發,但是如果請求太多會給服務器增加很大的壓力。
display:none和visibility:hidden的區別?
display:none 隱藏對應的元素,在文檔布局中不再給它分配空間,它各邊的元素會合攏,就當他從來不存在。
visibility:hidden 隱藏對應的元素,但是在文檔布局中仍保留原來的空間。
position的absolute與fixed區別
absolute浮動定位是相對于父級中設置position為relative或者absolute最近的父級元素
fixed浮動定位是相對于瀏覽器視窗的
IE 8以下版本的瀏覽器中的盒模型有什么不同?
IE8以下瀏覽器的盒模型中定義的元素的寬高不包括內邊距和邊框
ajax 有那些優缺點?如何解決跨域問題?
優點:
(1)通過異步模式,提升了用戶體驗.
(2)優化了瀏覽器和服務器之間的傳輸,減少不必要的數據往返,減少了帶寬占用.
(3)Ajax在客戶端運行,承擔了一部分本來由服務器承擔的工作,減少了大用戶量下的服務器負載。
(4)Ajax可以實現動態不刷新(局部刷新)
缺點:
(1)安全問題 AJAX暴露了與服務器交互的細節。
(2)對搜索引擎的支持比較弱。
(3)不容易調試。
(Q2)jsonp、 iframe、window.name、window.postMessage、服務器上設置代理頁面。
JavaScript原型,原型鏈 ? 有什么特點?
(1)原型對象也是普通的對象,是對象一個自帶隱式的 proto 屬性,原型也有可能有自己的原型,如果一個原型對象的原型不為null的話,我們就稱之為原型鏈。
(2)原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。
GET和POST的區別,何時使用POST?
GET:一般用于信息獲取,使用URL傳遞參數,對所發送信息的數量也有限制,一般在2000個字符
POST:一般用于修改服務器上的資源,對所發送的信息沒有限制。
GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值,
也就是說Get是通過地址欄來傳值,而Post是通過提交表單來傳值。
然而,在以下情況中,請使用 POST 請求:
無法使用緩存文件(更新服務器上的文件或數據庫)
向服務器發送大量數據(POST 沒有數據量限制)
發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠
請解釋一下 JavaScript 的同源策略
概念:同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標準。
這里的同源策略指的是:協議,域名,端口相同,同源策略是一種安全協議。
指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。
為什么要有同源限制?
我們舉例說明:比如一個黑客程序,他利用Iframe把真正的銀行登錄頁面嵌到他的頁面上,當你使用真實的用戶名,密碼登錄時,他的頁面就可以通過Javascript讀取到你的表單中input中的內容,這樣用戶名,密碼就輕松到手了。
Flash、Ajax各自的優缺點,在使用中如何取舍?
Flash適合處理多媒體、矢量圖形、訪問機器;對CSS、處理文本上不足,不容易被搜索。
Ajax對CSS、文本支持很好,支持搜索;多媒體、矢量圖形、機器訪問不足。
共同點:與服務器的無刷新傳遞消息、用戶離線和在線狀態、操作DOM
什么是閉包?
閉包,官方對閉包的解釋是:一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。
閉包的特點:
(1)作為一個函數變量的一個引用,當函數返回時,其處于激活狀態。
(2) 一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。
簡單的說,Javascript允許使用內部函數---即函數定義和函數表達式位于另一個函數的函數體內。而且,這些內部函數可以訪問它們所在的外部函數中聲明的所有局部變量、參數和聲明的其他內部函數。當其中一個這樣的內部函數在包含它們的外部函數之外被調用時,就會形成閉包。
javascript里面的繼承怎么實現,如何避免原型鏈上面的對象共享
用構造函數和原型鏈的混合模式去實現繼承,避免對象共享可以參考經典的extend()函數,很多前端框架都有封裝的,就是用一個空函數當做中間變量
ajax過程
(1)創建XMLHttpRequest對象,也就是創建一個異步調用對象.
(2)創建一個新的HTTP請求,并指定該HTTP請求的方法、URL及驗證信息.
(3)設置響應HTTP請求狀態變化的函數.
(4)發送HTTP請求.
(5)獲取異步調用返回的數據.
(6)使用JavaScript和DOM實現局部刷新.