前端常見面試題(十八)@郝晨光


手寫promise封裝axios

其實喷户,axios本身就是基于Promise進(jìn)行封裝的吼拥,我們之所以進(jìn)行二次封裝臂聋,主要是為了能夠?qū)﹀e誤信息進(jìn)行一個集中的處理事镣,根據(jù)不同的錯誤信息,需要給用戶不同的提示古劲,以便于給用戶一個良好的操作體驗斥赋。
封裝方法有很多種,基于class類的产艾,基于構(gòu)造函數(shù)的疤剑,也可以直接封裝一個函數(shù)。
具體按照個人習(xí)慣闷堡,最主要的還是要對后端給我們返回的狀態(tài)碼或者狀態(tài)值進(jìn)行判斷隘膘,如果成功,則直接resolve數(shù)據(jù)杠览,否則的話弯菊,對不同的錯誤信息做出不同的操作即可。

封裝方法

/**
 * @function request 二次封裝ajax請求函數(shù)
 * @param {Object} options 對象形式配置參數(shù)
 * @param {String} options.url 請求路徑
 * @param {String} [options.method=GET] 請求方式
 * @param {Object|String} [options.params] GET請求攜帶數(shù)據(jù)
 * @param {Object|FormData} [options.data] POST請求攜帶數(shù)據(jù)
 * @param {Object} [options.headers] 請求頭
 * @return {Promise}
 * */
function request(options) {
    const defaultOptions = {
        method: 'GET',
    };
    options = Object.assign(defaultOptions, options);
    return new Promise((resolve, reject) => {
        axios(options).then(res => {
            // 此處對后臺返回的狀態(tài)值進(jìn)行二次判斷踱阿,可能是狀態(tài)碼管钳,也可能是狀態(tài)值
            // 根據(jù)實際項目不同,后端人員不同软舌,返回的值不同
            if(res.data.success) {
                resolve(res.data);
            // 否則的話是錯誤狀態(tài)蹋嵌,后端人員會給一個錯誤信息
            // 我們需要針對不同的錯誤執(zhí)行不同的操作,給用戶不同的提示
            }else if(res.data.msg) {
                // 執(zhí)行操作
            }
        }).catch(err => {
            // 如果錯誤的話葫隙,直接返回錯誤
            // 也可以對錯誤進(jìn)行一些處理
            reject(err);
        })
    })
}

調(diào)用方法

request({
    url: 'http://www.haochenguang.cn',
    method: 'get',
}).then(res => {
    // 接收返回成功的結(jié)果
}).catch(err => {
    // 接收返回失敗的結(jié)果
})



詳述前端性能優(yōu)化的手段

前端優(yōu)化的目的

  1. 優(yōu)化可以使頁面加載的更快栽烂,用戶體驗更加流暢,提升用戶體驗度恋脚。
  2. 優(yōu)化可以有效的減少帶寬腺办,減少HTTP請求,減輕服務(wù)器壓力糟描,節(jié)省資源怀喉。

優(yōu)化方式

從HTTP請求方面優(yōu)化
  1. 合并壓縮CSS樣式;
  2. 合并壓縮JS文件船响;
  3. 使用Sprites雪碧圖躬拢;
  4. 使用base64格式的圖片躲履,將圖片內(nèi)嵌到頁面中;
  5. 圖片懶加載
  6. JS文件放置在body底部或者異步加載聊闯;
  7. 對JS文件實行懶加載工猜;
  8. 將CSS文件放置在head內(nèi),保證用戶體驗菱蔬;
  9. 避免多頁面之間的重復(fù)資源引用篷帅;
  10. 減少不必要的HTTP跳轉(zhuǎn)或重定向;
  11. 使用CDN來代替本地靜態(tài)資源拴泌;
  12. 使用gzip壓縮魏身。
從代碼方面優(yōu)化
  1. 避免在document上直接進(jìn)行頻繁的DOM操作
  2. 使用classname代替大量的內(nèi)聯(lián)樣式修改
  3. 對于復(fù)雜的UI元素,設(shè)置position為absolute或fixed
  4. 盡量使用css動畫
  5. 使用requestAnimationFrame代替setInterval操作
  6. 適當(dāng)使用canvas
  7. 盡量減少css表達(dá)式的使用
  8. 使用事件代理
  9. 避免圖片或者frame使用空src
  10. 在css屬性為0時蚪腐,去掉單位
  11. 禁止圖像縮放
  12. 正確的css前綴的使用
  13. 移除空的css規(guī)則
  14. 對于css中可繼承的屬性箭昵,如font-size,盡量使用繼承回季,少一點(diǎn)設(shè)置
  15. 縮短css選擇器家制,多使用偽元素等幫助定位
image

更加詳細(xì)的優(yōu)化解析:
前端性能優(yōu)化常用總結(jié)
前端性能優(yōu)化方法總結(jié)



瀏覽器輸入網(wǎng)址回車發(fā)生了什么

簡潔回答:

  1. DNS 解析:將域名解析成 IP 地址
  2. TCP 連接:TCP 三次握手
  3. 發(fā)送 HTTP 請求
  4. 服務(wù)器處理請求并返回 HTTP 報文
  5. 瀏覽器解析渲染頁面
  6. 斷開連接:TCP 四次揮手

關(guān)于瀏覽器輸入網(wǎng)址回車后發(fā)生了什么這兩篇文章寫的特別好,我就不獻(xiàn)丑了茧跋。
從URL輸入到頁面展現(xiàn)到底發(fā)生什么?
從輸入url到頁面展示到底發(fā)生了什么@小四



列舉你知道的瀏覽器內(nèi)核

瀏覽器 內(nèi)核
Google chrome 谷歌瀏覽器 Blink內(nèi)核
Firefox 火狐瀏覽器 Gecko內(nèi)核
IE瀏覽器 Trident內(nèi)核
Opera 歐朋瀏覽器 Blink內(nèi)核
Safari 蘋果瀏覽器 Webkit內(nèi)核



如果本文對您有幫助卓囚,可以看看本人的其他文章:
前端常見面試題(十七)@郝晨光
GitHub創(chuàng)建項目并添加協(xié)作者@郝晨光
TypeScript入門學(xué)習(xí)@郝晨光

結(jié)言
感謝您的查閱瘾杭,本文由郝晨光整理并總結(jié),代碼冗余或者有錯誤的地方望不吝賜教哪亿;菜鳥一枚粥烁,請多關(guān)照
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蝇棉,隨后出現(xiàn)的幾起案子讨阻,更是在濱河造成了極大的恐慌,老刑警劉巖篡殷,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钝吮,死亡現(xiàn)場離奇詭異,居然都是意外死亡板辽,警方通過查閱死者的電腦和手機(jī)奇瘦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劲弦,“玉大人耳标,你說我怎么就攤上這事∫毓颍” “怎么了次坡?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵呼猪,是天一觀的道長。 經(jīng)常有香客問我砸琅,道長宋距,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任明棍,我火速辦了婚禮乡革,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摊腋。我一直安慰自己沸版,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布兴蒸。 她就那樣靜靜地躺著视粮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橙凳。 梳的紋絲不亂的頭發(fā)上蕾殴,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音岛啸,去河邊找鬼钓觉。 笑死,一個胖子當(dāng)著我的面吹牛坚踩,可吹牛的內(nèi)容都是我干的荡灾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼瞬铸,長吁一口氣:“原來是場噩夢啊……” “哼批幌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗓节,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤荧缘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拦宣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體截粗,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年鸵隧,在試婚紗的時候發(fā)現(xiàn)自己被綠了桐愉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡掰派,死狀恐怖从诲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情靡羡,我是刑警寧澤系洛,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布俊性,位于F島的核電站,受9級特大地震影響描扯,放射性物質(zhì)發(fā)生泄漏定页。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一绽诚、第九天 我趴在偏房一處隱蔽的房頂上張望典徊。 院中可真熱鬧,春花似錦恩够、人聲如沸卒落。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡毕。三九已至,卻和暖如春扑媚,著一層夾襖步出監(jiān)牢的瞬間腰湾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工疆股, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留费坊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓旬痹,卻偏偏與公主長得像附井,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唱凯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 前言 由于最近在整理前端常見面試題羡忘,整理的文章標(biāo)題可能有些亂谎痢,導(dǎo)致后期不好查找磕昼,特此總結(jié)目錄,目錄會與面試題同步更...
    郝晨光閱讀 6,029評論 3 26
  • 【轉(zhuǎn)載】CSDN - 張林blog http://blog.csdn.net/XIAOZHUXMEN/articl...
    竿牘閱讀 3,481評論 1 14
  • 一节猿、理論基礎(chǔ)知識部分 1.1票从、講講輸入完網(wǎng)址按下回車,到看到網(wǎng)頁這個過程中發(fā)生了什么 a. 域名解析 b. 發(fā)起T...
    我家媳婦蠢蠢噠閱讀 3,112評論 2 106
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化滨嘱,入門級到專家級峰鄙,廣度和深度都會有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,570評論 0 7
  • 1.幾種基本數(shù)據(jù)類型?復(fù)雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined太雨、Nul...
    極樂君閱讀 5,498評論 0 106