大佬談的19年前端怪現狀

前幾天在掘金follow了螢火之衛,原因是覺得這篇文章寫得深入我心。但不知爲何今早看的時候(想回頭看看ajax封裝那段神代碼)發現文章被刪了,爲了以後方便回味及警醒自己,我還是copy(轉載過來吧),僅用作迷妹心態的仰望和學習

附上早上找的鏈接http://www.heiniaozhi.cn/articles/detail/155

張嘴閉嘴語義化,其實全是低矮微

什麼是標籤語義化?就是 div 套 div。這肯定不是標準答案,你要是這麼回答了,儒雅隨和的面試官還能忍住和你多聊幾分鐘;修養不好的,可能直接喊保安了。

不是正確答案,但確實是通用實踐。不信的話,你可以統計一下國內各大網站中使用過的標籤。“統計網頁當中使用了多少個標籤?每個標籤出現的次數是多少?怎樣過濾掉頭部標籤?按標籤次數出現多少,對數據進行排序。”我個人認爲,這樣一道題,考察的知識點,要比張嘴就來的語義化,實際得多。如果前面的問題都回答出來了,再討論一下爲什麼語義化說了這麼多年,實踐起來還是 div

function getTagsMap() {
  return [...document.querySelectorAll('*')].reduce((a, c) => {
    let tagName = c.tagName.toLowerCase();
    if(a[tagName]) {
      a[tagName] += 1;
    } else {
      a[tagName] = 1;
    }
    return a;
  }, {})
}

這裏要給掘金點個贊,如果你嘗試去統計了,應該也會點贊,應該也會和我產生一樣的疑惑:對語義化理解是不是錯了?爲什麼在某些網站上,連 headerfooternav 都看不到,放眼過去,全是 div 和 span。再看一下 GitHub 的自定義標籤。很多網站不知道出於何種考慮,會把絕對時間顯示爲相對時間,即 2019-3-8會顯示爲 幾天前,通常情況下,這個時間就是用 span 包起來了事,GitHub 使用了自定義標籤 relative-time 來包裹相對時間。

俺想問一下這些大廠員工,你們的標籤寫成這樣,是你們原本就對自己要求不高,還是早就習慣了逆來順受?(哪天去大廠找工作,這句記得刪)

大談特談國際化,老外能用才叫怪

這裏首先要吐槽一下某些大廠的開源項目: Readme 一半英文一半中文,一看源碼註釋全是中文,最最讓我不能理解的是,留下的交流方式是微信羣/QQ 羣。也要稱讚一下阿里的開源項目,給人的感覺就非常規範(雖然產品不一定好用就是了)。

以下開始吐槽國內產品所謂的國際化:

  1. 半中文半英文。圖片沒有國際化,全是中國字,可以理解;可是 placeholder 以及部分首頁入口都是中文,就說不過去了吧?
  2. 表面上是國際化,實際上是給“洋大人”提供的特殊服務。比如某個購買火車票的窗口中,中文系統的話,默認勾選購買保險服務;再比如,系統換成英文,或者真的去下載一個國際版,廣告少了一大堆。

以上是我將手機系統語言設置爲英文後,不負責任的瞎測。 看來國際化不僅僅是一個網頁製作技術上的問題,更是一個業務上的難題。希望能夠有大廠的員工,分享一下是如何解決以及如何看待這些問題的。

面試先問 TCP,其實自己屁不知

面試中問到三次握手,基本就是在對暗號。因爲前端的主要工作都是在和 HTTP 打交道,什麼時候輪到 TCP 了?包括一些緩存消息頭的設置,有多少公司是真的需要前端來幹這些事情的?面試中問到這些問題的時候,是不是因爲沒有其他問題要問的了?前端前端,就是發請求,關於發請求的問題,我倒是有幾個:

  1. Http 1.x 協議下,不同的瀏覽器對同時發起請求的數目做了限制(具體的數字,很多文章裏都說了,這裏就不引用了)。那麼,在 Http 2 的協議下,瀏覽器有對請求數目做限制麼?限制是多少?怎麼測算的?
  2. 301302 重定向的區別是什麼(對 SEO 的影響)?用這倆進行重定向,會丟失請求方法和請求體,有沒有方式避免(不知道也沒有關係)?
  3. 有沒有上報過網頁的性能?怎麼實現的?

話說,查看淘寶的 robots.txt 文件時,發現有的鏈接重定向了,有的鏈接 直接一個很醜的 404,忘記做了麼?

 

手寫 ajax?啥是 ajax?

2019 年了,H5網站開發有的面試題中,還是會讓面試者手寫一遍 ajax。其實,也就一行代碼的事:

function ajax(url, options = {}) {
    return fetch(url, options);
}

這段代碼簡短優雅,沒有 bug,看着牛逼,但大概率不是面試官想要的代碼。面試官想要的 ajax,一般是 jQuery 的 ajax;有可能還會讓你封裝成 Promise(嗯,是的,沒錯,又回到最初的起點,呆呆站在代碼前)。這就涉及到一個問題,到底什麼是 ajax?

傳統的Web應用允許用戶端填寫表單(form),當提交表單時就向網頁服務器發送一個請求。服務器接收並處理傳來的表單,然後送回一個新的網頁,但這個做法浪費了許多帶寬,因爲在前後兩個頁面中的大部分HTML碼往往是相同的。由於每次應用的溝通都需要向服務器發送請求,應用的迴應時間依賴於服務器的迴應時間。這導致了用戶界面的迴應比本機應用慢得多。

與此不同,AJAX應用可以僅向服務器發送並取回必須的數據,並在客戶端採用JavaScript處理來自服務器的迴應。因爲在服務器和瀏覽器之間交換的數據大量減少,服務器迴應更快了。同時,很多的處理工作可以在發出請求的客戶端機器上完成,因此Web服務器的負荷也減少了。

類似於DHTML或LAMP,AJAX不是指一種單一的技術,而是有機地利用了一系列相關的技術。雖然其名稱包含XML,但實際上數據格式可以由JSON代替,進一步減少數據量,形成所謂的AJAJ。 維基百科 AJAX

從來都不看 npm 到底幹了啥

這個問題,目前來說我實在想不深圳高端網站建設公司到什麼解決方案;我們只能相信包的作者不會在代碼裏下毒。不過,當有人指出問題的時候,在座的各位有沒有真的去看看自己的 node_modules ?比如,npm 安裝包的問題第一次引起大量關注,應該是當年的 left-pad 事件。這事發生後,就有人寫了篇文章,大致就是說一些流行的包中,存在着各種各樣的問題,例如廢代碼,盜取用戶信息等等;在 深圳網頁設計哪家好babel 的源碼中,甚至還引用了某人的一張照片。當然,這些問題都是作者瞎說的;就算不是瞎說的,也很少有人會去查證。有趣的是,babel 在這篇文章之後,真的在代碼里加了張照片,之前長這樣,之後長這樣

總而言之,前端面試的這些套路,更像是一種暗號。對上了,我遇見對的人;對不出,那我很抱歉。爲了節約大家寶貴的時間,我建議,之後面試的時候,大家的問答改爲:“一派西山千古秀”,“三合河水萬年流”。只要兩秒,就可以確定對方到底是你的同志,還是來浪費時間的新手。

希望大家在以後,不管是去面試別人,還是被人面試,都能夠言之有物。知之爲知之,不知爲不知。要不然,真成了前端娛樂圈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章