1. 性能優(yōu)化1
1.1 頁面重構怎么操作?
網(wǎng)站重構:在不改變外部行為的前提下徒像,簡化結構镊逝、添加可讀性愿险,而在網(wǎng)站前端保持一致的行為笛丙。
也就是說是在不改變UI的情況下漾脂,對網(wǎng)站進行優(yōu)化,在擴展的同時保持一致的UI胚鸯。
對于傳統(tǒng)的網(wǎng)站來說重構通常是:
表格(table)布局改為DIV+CSS
使網(wǎng)站前端兼容于現(xiàn)代瀏覽器(針對于不合規(guī)范的CSS骨稿、如對IE6有效的)
對于移動平臺的優(yōu)化
針對于SEO進行優(yōu)化
深層次的網(wǎng)站重構應該考慮的方面
減少代碼間的耦合
讓代碼保持彈性
嚴格按規(guī)范編寫代碼
設計可擴展的API
代替舊有的框架、語言(如VB)
增強用戶體驗
通常來說對于速度的優(yōu)化也包含在重構中
壓縮JS蠢琳、CSS啊终、image等前端資源(通常是由服務器來解決)
程序的性能優(yōu)化(如數(shù)據(jù)讀寫)
采用CDN來加速資源加載
對于JS DOM的優(yōu)化
HTTP服務器的文件緩存
1.2 什么叫優(yōu)雅降級和漸進增強镜豹?
優(yōu)雅降級:Web站點在所有新式瀏覽器中都能正常工作傲须,如果用戶使用的是老式瀏覽器,則代碼會針對舊版本的IE進行降級處理了,使之在舊式瀏覽器上以某種形式降級體驗卻不至于完全不能用趟脂。
如:border-shadow
漸進增強:從被所有瀏覽器支持的基本功能開始泰讽,逐步地添加那些只有新版本瀏覽器才支持的功能,向頁面增加不影響基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現(xiàn)出來并發(fā)揮作用已卸。
如:默認使用flash上傳佛玄,但如果瀏覽器支持 HTML5 的文件上傳功能,則使用HTML5實現(xiàn)更好的體驗累澡;
1.3 前端性能優(yōu)化的方法梦抢?
(1) 減少http請求次數(shù):CSS Sprites, JS、CSS源碼壓縮愧哟、圖片大小控制合適奥吩;網(wǎng)頁Gzip,CDN托管蕊梧,data緩存 霞赫,圖片服務器。
(2) 前端模板 JS+數(shù)據(jù)肥矢,減少由于HTML標簽導致的帶寬浪費端衰,前端用變量保存AJAX請求結果,每次操作本地變量甘改,不用請求旅东,減少請求次數(shù)
(3) 用innerHTML代替DOM操作,減少DOM操作次數(shù)十艾,優(yōu)化javascript性能玉锌。
(4) 當需要設置的樣式很多時設置className而不是直接操作style。
(5) 少用全局變量疟羹、緩存DOM節(jié)點查找的結果主守。減少IO讀取操作。
(6) 避免使用CSS Expression(css表達式)又稱Dynamic properties(動態(tài)屬性)榄融。
(7) 圖片預加載参淫,將樣式表放在頂部,將腳本放在底部 加上時間戳愧杯。
(8) 避免在頁面的主體布局中使用table涎才,table要等其中的內容完全下載之后才會顯示出來,顯示比div+css布局慢力九。
對普通的網(wǎng)站有一個統(tǒng)一的思路耍铜,就是盡量向前端優(yōu)化、減少數(shù)據(jù)庫操作跌前、減少磁盤IO棕兼。向前端優(yōu)化指的是,在不影響功能和體驗的情況下抵乓,能在瀏覽器執(zhí)行的不要在服務端執(zhí)行伴挚,能在緩存服務器上直接返回的不要到應用服務器靶衍,程序能直接取得的結果不要到外部取得,本機內能取得的數(shù)據(jù)不要到遠程取茎芋,內存能取到的不要到磁盤取颅眶,緩存中有的不要去數(shù)據(jù)庫查詢。減少數(shù)據(jù)庫操作指減少更新次數(shù)田弥、緩存結果減少查詢次數(shù)涛酗、將數(shù)據(jù)庫執(zhí)行的操作盡可能的讓你的程序完成(例如join查詢),減少磁盤IO指盡量不使用文件系統(tǒng)作為緩存偷厦、減少讀寫文件次數(shù)等煤杀。程序優(yōu)化永遠要優(yōu)化慢的部分,換語言是無法“優(yōu)化”的沪哺。
1.4 頁面從輸入 URL 到頁面加載顯示完成
注:
這題勝在區(qū)分度高沈自,知識點覆蓋廣,再不懂的人辜妓,也能答出幾句枯途,
而高手可以根據(jù)自己擅長的領域自由發(fā)揮,從URL規(guī)范籍滴、HTTP協(xié)議酪夷、DNS、CDN孽惰、數(shù)據(jù)庫查詢晚岭、
到瀏覽器流式解析、CSS規(guī)則構建勋功、layout坦报、paint、onload/domready狂鞋、JS執(zhí)行片择、JS API綁定等等;
詳細版:
- 瀏覽器會開啟一個線程來處理這個請求骚揍,對 URL 分析判斷如果是 http 協(xié)議就按照 Web 方式來處理;
- 調用瀏覽器內核中的對應方法字管,比如 WebView 中的 loadUrl 方法;
- 通過DNS解析獲取網(wǎng)址的IP地址,設置 UA 等信息發(fā)出第二個GET請求;
- 進行HTTP協(xié)議會話信不,客戶端發(fā)送報頭(請求報頭);
- 進入到web服務器上的 Web Server嘲叔,如 Apache、Tomcat抽活、Node.JS 等服務器;
- 進入部署好的后端應用硫戈,如 PHP、Java酌壕、JavaScript掏愁、Python 等,找到對應的請求處理;
- 處理結束回饋報頭卵牍,此處如果瀏覽器訪問過果港,緩存上有對應資源,會與服務器最后修改時間對比糊昙,一致則返回304;
- 瀏覽器開始下載html文檔(響應報頭辛掠,狀態(tài)碼200),同時使用緩存;
- 文檔樹建立释牺,根據(jù)標記請求所需指定MIME類型的文件(比如css萝衩、js),同時設置了cookie;
- 頁面開始渲染DOM,JS根據(jù)DOM API操作DOM,執(zhí)行事件綁定等没咙,頁面顯示完成猩谊。
簡潔版:
- 瀏覽器根據(jù)請求的URL交給DNS域名解析,找到真實IP祭刚,向服務器發(fā)起請求牌捷;
- 服務器交給后臺處理完成后返回數(shù)據(jù),瀏覽器接收文件(HTML涡驮、JS暗甥、CSS、圖象等)捉捅;
- 瀏覽器對加載到的資源(HTML撤防、JS、CSS等)進行語法解析棒口,建立相應的內部數(shù)據(jù)結構(如HTML的DOM)寄月;
- 載入解析到的資源文件,渲染頁面无牵,完成剥懒。
1.5 平時如何管理你的項目?
先期團隊必須確定好全局樣式(globe.css)合敦,編碼模式(utf-8) 等初橘;
編寫習慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行)充岛;
標注樣式編寫人保檐,各模塊都及時標注(標注關鍵樣式調用的地方);
頁面進行標注(例如 頁面 模塊 開始和結束)崔梗;
CSS跟HTML 分文件夾并行存放夜只,命名都得統(tǒng)一(例如style.css);
JS 分文件夾存放 命名以該JS功能為準的英文翻譯蒜魄。
圖片采用整合的 images.png png8 格式文件使用 盡量整合在一起使用方便將來的管理