讀《現代前端技術解析》有感


一、簡單介紹

這本書標榜的是現在前端技術,但是里面設計到的部分技術還是相對比較落后的,但不妨礙這本書成為一本好的查漏補缺的指南,如果是在實際的工作中這本書可以說是起不到什么的效果,但是對於即將畢業,或者剛剛出來工作,又或者是求職找工作的人來說可以起到極好的引導作用,日常面試的各個方面都有涉及(僅針對小公司的面試),但是不深刻。里面重點展示的是技術的應用層面上的東西,所以也比較好理解,一些像設計模式,算法,數據結構,JS語法深入部分這本書不曾提及,所以如果為了全面了解,為了找工作,建議讀一讀這本書;為了更好地工作,還是建議大家抽空看看經典的讀物。

 二、重點知識梳理

 2.1 web Component

一種原生的支持模塊化的方法,但是目前僅僅在chrome新版得到全面的支持,其他瀏覽器暫時不支持此特性,這個特性的好處是可以直接將模塊與頁面進行解耦操作,目前雖然原生沒有全面的支持,但是通過webpack打包等形式都已經可以實現了,例如vue中的模塊化開發就是基於這個思想。目前雖然不是主流,但是未來可能會成為一種標准。

用法是通過document.registerElement接口來注冊。

例如,我們注冊一個插件名為X-foo,那么我們這樣操作

 

document.registerElement('x-foo', {
  prototype: Object.create(HTMLElement.prototype, {
    createdCallback: {      
      value: function() { ... }
    },
    ...
  })
})

 

如下形式去調用

<div>
  <x-foo></x-foo>
</div>

 

2.2 怎樣加快頁面的顯示

1. 使用異步的方式來加載頁面,先讓一部分的內容先展示出來,再根據用戶的操作加載更多的內容

2. 將圖片替換成為壓縮比更高的webp格式圖片
3. 打開重復的頁面使用304狀態碼,達到利用瀏覽器緩存

 

2.3 頁面是怎樣從請求發起到展現出來的

 1.  用戶輸入一個網址,瀏覽器開啟一個線程處理請求,對用戶輸入的URL進行分析處理,如果是使用了HTT協議的話,那么會用HTTP來處理

 2.  調用JavaScript引擎的方法,例如,webview調用loadUrl方法,分析並加載這個URL

 3.  連同瀏覽器的cookie,userAgent等信息向網站目的地IP發起GET請求

 4.  進入后台web服務器處理請求

 5.  進入部署好的后台應用,找到對應的處理邏輯,這期間可能會讀取服務器緩存或者讀取數據庫

 6.  服務器處理請求並返回響應報文,瀏覽器的緩存資源的時間會跟服務器的最后修改記錄時間做對比,一致返回304,否則返回200

 7.  如果為200的時候,下載對應的HTML文檔,304直接讀取緩存

 

2.4 瀏覽器的組成結構

示意圖如下:

 

1.  如圖我們可以知道瀏覽器引擎和JavaScript引擎不是同一回事,這個也就說明了為什么JavaScript是單線程但是瀏覽器可以異步發起請求的問題。

2.  我們重點關注的是渲染引擎和一些存儲,因為其他部分開發者無法操作

 

2.5 各個瀏覽器渲染引擎之間的差異與渲染引擎是怎樣工作的

 以webkit內核和Gecko內核為例:

 

 

對比之后我們可以發現Gecko內核是需要先解析HTML然后再解析CSS,webkit內核是並行執行的。所以webkit內核在解析CSS這方面會相對高效

 

2.6 CSS的權重問題

 !important(最高權重) > 內聯樣式規則(權重1000) > id選擇器(權重100) > 類選擇器(權重10) > 元素選擇器

 

2.7  cookie的種類與區別

 cookie一般是有兩種:session cookie和持久型 cookie

1. session cookie一般未設置過期時間,只要關閉瀏覽器窗口,cookie就會消失

2. 持久型cookie一般會設置cookie過期時間,關閉后再次打開瀏覽器窗口都有效

 

2.8 前端開發工具

 1. 前端高效開發工具:vscode、webstorm、sublime

 2. 前端調試工具: chrome devtool

 3. 網絡輔助工具:fiddler charles wireshark

 4. 前端遠程調試工具:vorlon.js weinre VConsole

 

2.9 web安全知識有哪些?大致介紹一下?

主要的web安全有XSS,SQL注入,CSRF

XSS:通常是由頁面可解析的內容未經過處理就直接插入到頁面導致。例如插入document.cookie來獲取cookie

SQL注入:輸入框的內容未經過處理就直接傳給數據庫,導致SQL插入到數據庫中

CSRF:舉一個例子,假設有一個假冒網站,用戶向其中提交用戶名和密碼,這個時候假冒網站就會向真實的網站發起請求,跳轉到真實的網站,但是這個時候假冒網站已經就記錄下了用戶的用戶名和密碼。

 

2.10 網絡劫持

前端主要的網絡劫持有DNS劫持和HTTP劫持

1. DNS劫持:DNS被篡改解析的路徑導致網站解析出錯,目前這種劫持較少,這要發生這種劫持是運營商所為

2. HTTP劫持:一般來說這種劫持的HTML,CSS ,JS都是正常的。但是在網站response的時候,網絡運營商會劫持添加一些腳本,主要表現在使用HTTP請求有時候會莫名其妙的出現一些小廣告之類的。解決的方法是HTTP換成HTTPS

 

2.11 native交互協議

web調用native

主要web調用native的流程是通過uri和addJavascriptInterface接口來實現的

主要的途徑是uri,是通過url向native發起請求,native調用系統的底層來實現的

 

native協議調用web

原理是:HTML5編寫的Javascript暴露到全局中,然后在native中調用loadUrl方法來實現調用javascript

 

2.12 怎樣提交元素的加載解析?

1. 直接通過懶加載來實現

2. 通過使用AMP來實現HTML元素的懶加載(對於video,table等耗時的元素這樣做會加快頁面的加載速度,但是目前這些方案並不是前端的主流解決方法【博主觀點】)

 

2.13 HTML5中新增了哪些新的標簽或者屬性?

<header> <video> <source /> <article>  <time> <datalist> <command />

<input>新增了 autocomplete,placeholder,autofocus,required屬性,新增了email,number,color,range,search,date

 

三、總體評價

這本書說不上好,也說不上特別的不好,總體上就是用來查漏補缺的,面試可用。書中的內容越往后越稀薄,建議讀讀前幾章就好了。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM