前端工程師面試題(性能優(yōu)化)

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綁定等等;

詳細版:

  1. 瀏覽器會開啟一個線程來處理這個請求骚揍,對 URL 分析判斷如果是 http 協(xié)議就按照 Web 方式來處理;
  2. 調用瀏覽器內核中的對應方法字管,比如 WebView 中的 loadUrl 方法;
  3. 通過DNS解析獲取網(wǎng)址的IP地址,設置 UA 等信息發(fā)出第二個GET請求;
  4. 進行HTTP協(xié)議會話信不,客戶端發(fā)送報頭(請求報頭);
  5. 進入到web服務器上的 Web Server嘲叔,如 Apache、Tomcat抽活、Node.JS 等服務器;
  6. 進入部署好的后端應用硫戈,如 PHP、Java酌壕、JavaScript掏愁、Python 等,找到對應的請求處理;
  7. 處理結束回饋報頭卵牍,此處如果瀏覽器訪問過果港,緩存上有對應資源,會與服務器最后修改時間對比糊昙,一致則返回304;
  8. 瀏覽器開始下載html文檔(響應報頭辛掠,狀態(tài)碼200),同時使用緩存;
  9. 文檔樹建立释牺,根據(jù)標記請求所需指定MIME類型的文件(比如css萝衩、js),同時設置了cookie;
  10. 頁面開始渲染DOM,JS根據(jù)DOM API操作DOM,執(zhí)行事件綁定等没咙,頁面顯示完成猩谊。

簡潔版:

  1. 瀏覽器根據(jù)請求的URL交給DNS域名解析,找到真實IP祭刚,向服務器發(fā)起請求牌捷;
  2. 服務器交給后臺處理完成后返回數(shù)據(jù),瀏覽器接收文件(HTML涡驮、JS暗甥、CSS、圖象等)捉捅;
  3. 瀏覽器對加載到的資源(HTML撤防、JS、CSS等)進行語法解析棒口,建立相應的內部數(shù)據(jù)結構(如HTML的DOM)寄月;
  4. 載入解析到的資源文件,渲染頁面无牵,完成剥懒。

1.5 平時如何管理你的項目?

先期團隊必須確定好全局樣式(globe.css)合敦,編碼模式(utf-8) 等初橘;

編寫習慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行)充岛;

標注樣式編寫人保檐,各模塊都及時標注(標注關鍵樣式調用的地方);

頁面進行標注(例如 頁面 模塊 開始和結束)崔梗;

CSS跟HTML 分文件夾并行存放夜只,命名都得統(tǒng)一(例如style.css);

JS 分文件夾存放 命名以該JS功能為準的英文翻譯蒜魄。

圖片采用整合的 images.png png8 格式文件使用 盡量整合在一起使用方便將來的管理

推薦文章

Web性能的方方面面

推薦電子書

前端常見面試題匯總

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末扔亥,一起剝皮案震驚了整個濱河市场躯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旅挤,老刑警劉巖踢关,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粘茄,居然都是意外死亡签舞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門柒瓣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儒搭,“玉大人,你說我怎么就攤上這事芙贫÷辏” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵磺平,是天一觀的道長默穴。 經常有香客問我,道長褪秀,這世上最難降的妖魔是什么蓄诽? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮媒吗,結果婚禮上仑氛,老公的妹妹穿的比我還像新娘。我一直安慰自己闸英,他們只是感情好锯岖,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甫何,像睡著了一般出吹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辙喂,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天捶牢,我揣著相機與錄音,去河邊找鬼巍耗。 笑死秋麸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的炬太。 我是一名探鬼主播灸蟆,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亲族!你這毒婦竟也來了炒考?” 一聲冷哼從身側響起可缚,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斋枢,沒想到半個月后帘靡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡杏慰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年测柠,在試婚紗的時候發(fā)現(xiàn)自己被綠了炼鞠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缘滥。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谒主,靈堂內的尸體忽然破棺而出朝扼,到底是詐尸還是另有隱情,我是刑警寧澤霎肯,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布擎颖,位于F島的核電站,受9級特大地震影響观游,放射性物質發(fā)生泄漏搂捧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一懂缕、第九天 我趴在偏房一處隱蔽的房頂上張望允跑。 院中可真熱鬧,春花似錦搪柑、人聲如沸聋丝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弱睦。三九已至,卻和暖如春渊额,著一層夾襖步出監(jiān)牢的瞬間况木,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工旬迹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焦读,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓舱权,卻偏偏與公主長得像矗晃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宴倍,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容