編輯推薦
1.介紹新的響應式解決方案。
2.深入淺齣,從基礎觸發,逐步引入更高階技術。
3.注重實戰,將知識運用到實踐中,解決正在遇見或者即將遇見的問題。
4.知其然並知其所以然,瞭解技術的前生今世;開拓思維,挖掘更多的解決方案。
內容簡介
響應式Web設計的理念是讓頁麵根據用戶行為以及設備環境(屏幕尺寸、分辨率等)進行相應的響應和調整。響應式網頁設計就是一個網站能夠兼容多種終端,而不是為每種終端做一個特定的版本。
本書分為兩部分,首部分是前端的基本響應式技術,涉及響應式布局、圖片的處理、解決問題的思路以及一些進階的技巧等;第二部分在以上內容的基礎上,加入瞭對頁麵進行性能調優的內容,包括如何確立性能指標,如何使用不同的工具衡量性能,以及如何解決常規的性能問題等。
本書適閤有興趣學習響應式技術的前端從業人員和其他相關人員閱讀。
作者簡介
李光毅 曾就職於愛奇藝,現任百度高級前端工程師,主要負責前端Web 産品開發, 以及後端Node.js 框架維護。 在HTML、JavaScript 等前端技術方麵略有心得,喜歡對Web 性能吹毛求疵,同時也對ASP.NET、MongoDB、Python 等技術有著濃厚的興趣。業餘時間曾經喜歡摺騰硬件編程,如Kinect for Windows、Leap Motion 等,現在愛好使用Unity 寫遊戲。熱愛前端,樂於分享。
目錄
第1章 概述及任務介紹 1
1.1 為什麼需要響應式設計 1
1.1.1 産品形態需要 1
1.1.2 性能與商業考慮 3
1.2 本書的綫索 3
1.3 寫作思路 4
1.4 定義響應式 5
1.5 本書任務 6
第2章 響應式中要麵對的問題 9
2.1 像素密度 9
2.2 CSS像素 14
2.3 視口 17
2.3.1 桌麵瀏覽器的視口 17
2.3.2 移動設備瀏覽器的視口 18
2.3.3 設備寬度 20
小結 21
第3章 布局 23
3.1 寫在編碼前的話 23
3.1.1 寫齣好的代碼 24
3.1.2 代碼的瀏覽器適配問題 25
3.1.3 仰望星空與腳踏實地 26
3.2 全局樣式 27
3.3 無懈可擊的導航欄 30
3.3.1 桌麵端 30
3.3.2 移動端導航欄 37
小結 40
第4章 布局——響應式篇 41
4.1 媒體查詢 41
4.1.1 為什麼需要媒體查詢 41
4.1.2 什麼是媒體查詢 44
4.1.3 媒體查詢中的邏輯 45
4.1.4 媒體查詢的策略 46
4.1.5 導航欄與媒體查詢 51
4.1.6 polyfill 56
4.2 伸縮布局 58
4.2.1 為什麼需要伸縮布局 58
4.2.2 快速入門 58
4.2.3 基本應用 60
4.2.4 迴歸導航欄flexbox.css 62
4.3 相對單位 63
4.3.1 相對單位em 65
4.3.2 相對單位rem 67
4.3.3 如何使用這幾種單位 68
4.4 標題布局 70
4.4.1 背景 71
4.4.2 文字居中 73
4.5 響應式文字 79
4.5.1 標題 79
4.5.2 正文內容 83
小結 89
第5章 響應式圖片 91
5.1 萬能的100% 91
5.2 響應式圖用例 93
5.3 srcset語法 96
5.3.1 移動優先或桌麵優先 97
5.3.2 計劃趕不上變化 98
5.3.3 傢長式管理 99
5.4
元素 99
5.4.1 sizes 99
5.4.2 元素和元素 102
5.4.3 polyfill 105
5.4.4 元素的未來 105
5.5 放棄圖片 105
5.5.1 事實上我們並不需要圖片 105
5.5.2 數據 URI 105
5.5.3 CSS形狀 107
5.5.4 圖標字體 110
5.6 後端方案 118
5.6.1 前端配置 118
5.6.2 後端配置 119
5.6.3 注意 119
5.7 優化標題的背景圖片 120
5.7.1 image-set 120
5.7.2 漸進式圖片 120
5.7.3 媒體查詢 122
5.7.4 無需圖片 123
小結 124
第6章 腳本與性能:入門篇 125
6.1 為何要選擇腳本 125
6.2 為何要談性能 126
6.3 如何衡量性能 126
6.3.1 頁麵加載時間 127
6.3.2 速度指數—加載時間並非萬能 129
6.3.3 幀數 133
6.3.4 工具與測試 136
6.4 傳統腳本的性能優化指南 147
6.4.1 懶加載初級版本 147
6.4.2 優化點1:滾動事件的迴調函數 153
6.4.3 優化點2:重繪與迴流 157
6.4.4 優化點3:選擇器 161
小結 163
第7章 腳本與性能:提高篇 165
7.1 避免腳本 165
7.1.1 樣式實現 166
7.1.2 腳本實現 168
7.1.3 迴到導航欄 170
7.2 封裝與加載器 175
7.3 性能優化思路 181
7.4 後端能做什麼 185
7.4.1 RESS 185
7.4.2 其他 187
小結 187
第8章 工程問題 189
8.1 安裝Node.js 189
8.2 Bower 192
8.2.1 什麼是Bower 192
8.2.2 安裝Bower 193
8.2.3 使用Bower 194
8.2.4 進階使用 195
8.3 Grunt 198
8.3.1 什麼是Grunt 198
8.3.2 安裝Grunt 198
8.3.3 使用Grunt 199
8.4 Yeoman 203
8.4.1 什麼是Yeoman 203
8.4.2 安裝Yeoman 204
8.4.3 生成項目 205
小結 206
後記 207 前言/序言
《高效能前端架構:從設計到落地》 簡介: 在這個信息爆炸、用戶期待瞬息萬變的時代,Web應用的性能與響應能力已不再是錦上添花,而是決定成敗的關鍵要素。當用戶每一次點擊、每一次滑動都可能成為流失的導火索,當競爭對手的産品以絲滑的體驗脫穎而齣,構建一個既能快速響應用戶需求,又能輕鬆應對復雜業務場景的前端架構,就成為每一位開發者必須麵對的挑戰。 《高效能前端架構:從設計到落地》並非一本簡單羅列技術框架的“速成寶典”,而是深入剖析現代Web應用為何會“慢”的根源,並係統性地構建一套貫穿項目生命周期的、可落地的高效能前端架構體係。本書從前端性能的多個維度齣發,結閤大量真實案例和行業最佳實踐,為讀者提供一套清晰、係統且實用的解決方案,幫助開發者們擺脫性能瓶頸的睏擾,打造齣用戶喜愛、業務驅動的卓越Web産品。 本書內容概要: 第一部分:深度洞察性能瓶頸,理解高效能的基石 在構建高效能架構之前,我們必須首先理解“慢”的本質。本部分將帶領讀者深入剖析影響Web應用性能的各項核心因素,並非泛泛而談,而是層層剝繭,直擊要害: 瀏覽器渲染機製的深度解析: 我們將拋開錶麵的HTML、CSS、JavaScript,深入到瀏覽器內部,詳細講解渲染樹的構建、布局計算、繪製過程以及關鍵渲染路徑。理解這些底層機製,是優化性能的“知其然”與“知其所以然”的關鍵。我們將探討JavaScript執行對渲染的影響,CSS的解析與計算復雜度,以及如何在滿足視覺需求的同時,盡量減少重排(Layout)和重繪(Repaint)的發生,從而有效縮短頁麵加載時間,提升交互流暢度。 網絡請求的“隱形殺手”: 網絡是Web應用性能的命脈。本部分將剖析HTTP/HTTPS協議的演進,從HTTP/1.x的頭部冗餘、多連接瓶頸,到HTTP/2的多路復用、頭部壓縮,再到HTTP/3的QUIC協議帶來的突破性進展,逐一分析其對性能的影響。我們將深入講解DNS解析、TCP握手、SSL/TLS握手的開銷,以及如何通過CDN、預連接、HTTP/2 Server Push等技術來大幅縮減網絡往返時間(RTT)。同時,還會探討資源加載策略,如按需加載、懶加載、預加載等,如何在保障用戶體驗的前提下,最大化利用網絡帶寬。 JavaScript執行效率與內存管理: JavaScript作為前端的核心,其執行效率和內存占用直接影響著應用的響應速度和穩定性。本部分將深入分析JavaScript的事件循環機製(Event Loop),理解同步、異步任務的執行順序,以及宏任務與微任務的區彆。我們將探討如何編寫高性能的JavaScript代碼,避免阻塞主綫程,識彆並解決內存泄漏問題,以及JavaScript引擎的優化原理,例如JIT編譯、V8引擎的垃圾迴收機製等。 資源優化與打包策略: 靜態資源,如圖片、CSS、JavaScript文件,是構成Web應用的基礎。本部分將詳細講解各種資源優化的策略。對於圖片,我們將深入探討不同的格式(JPEG, PNG, WebP, AVIF)及其適用場景,以及如何進行有損與無損壓縮,實現“輕量級”的圖片加載。對於CSS和JavaScript,我們將詳細講解代碼的壓縮、閤並、拆分,以及Tree Shaking、Scope Hoisting等高級打包技術,如何通過Webpack、Rollup等工具,實現按需打包、代碼分割,減少首屏加載的資源總量。 第二部分:構建健壯高效的前端架構體係 理解瞭性能瓶頸,接下來的核心任務便是如何構建一個能夠從根本上解決這些問題的架構。本書將為您勾勒齣高效能前端架構的設計藍圖: 模塊化與組件化設計哲學: 良好的模塊化和組件化是提升代碼可維護性、可復用性和可擴展性的基石。本部分將深入探討不同的模塊化方案(CommonJS, AMD, ES Modules),並重點講解如何運用組件化思想,將復雜的UI拆解成獨立、可組閤的單元。我們將討論如何設計高內聚、低耦閤的組件,以及組件之間的通信模式,如何利用Vue的Slots、React的Composition API等技術,構建靈活且易於維護的組件庫。 響應式設計在架構層麵的考量: 響應式設計早已超越瞭簡單的媒體查詢。本部分將探討如何在架構層麵實現真正的響應式。從數據層麵到視圖層,如何設計能夠適應不同屏幕尺寸、不同設備的用戶界麵。我們將討論響應式布局的多種實現方式,以及如何結閤CSS的Grid、Flexbox等特性,實現優雅的響應式過渡。更重要的是,我們將探討在JavaScript層麵,如何基於設備的特性(如屏幕尺寸、像素密度、網絡狀況)動態調整資源加載、UI渲染策略,實現真正的“按需響應”。 狀態管理的新思路與實踐: 復雜應用的狀態管理是前端架構中的一大挑戰。本部分將超越Redux、Vuex等經典模式,探討更靈活、更高效的狀態管理策略。我們將分析不同狀態的生命周期,例如全局狀態、局部狀態、路由狀態、服務端狀態。重點講解Hooks、Context API在React中的應用,以及Pinia、 Zustand等新興的狀態管理庫的優勢。我們將通過實際案例,演示如何根據業務場景選擇最適閤的狀態管理方案,避免狀態膨脹和數據同步的混亂。 工程化提效:從腳手架到自動化部署: 高效能的前端架構離不開強大的工程化支撐。本部分將係統性地梳理前端工程化的關鍵環節。從自定義腳手架的搭建,到自動化測試(單元測試、集成測試、端到端測試)的引入,再到CI/CD流程的構建,我們將逐一講解如何通過工具鏈的優化,提升開發效率,保障代碼質量,並實現快速、可靠的部署。我們將深入探討Webpack、Vite等構建工具的配置技巧,以及Linting、Code Formatting等代碼規範工具的重要性,如何構建一套“開箱即用”且高度可定製化的開發環境。 第三部分:麵嚮未來的性能優化與架構演進 Web技術日新月異,保持對未來趨勢的敏銳洞察,並能將新技術融入現有架構,是保持高效能的關鍵。 WebAssembly:突破JavaScript性能邊界: WebAssembly(Wasm)的齣現為Web帶來瞭前所未有的性能潛力。本部分將深入介紹WebAssembly的核心概念,它如何與JavaScript協同工作,以及在哪些場景下可以發揮其最大優勢,例如計算密集型任務、圖像處理、遊戲引擎等。我們將探討如何將C/C++/Rust等語言編譯成WebAssembly,並將其集成到現有Web應用中,從而實現突破JavaScript性能瓶頸。 服務端渲染(SSR)與靜態站點生成(SSG)的權衡與應用: 本部分將詳細闡述服務端渲染(SSR)和靜態站點生成(SSG)的核心原理,以及它們各自的優缺點。我們將分析在SEO優化、首屏加載速度、用戶體驗等方麵,SSR和SSG能帶來的顯著提升。通過對比Next.js, Nuxt.js, Astro等框架的實踐,讀者將能理解如何根據業務需求,靈活選擇最適閤的渲染策略,甚至混閤使用,以達到最佳的性能和用戶體驗。 微前端架構的探索與實踐: 隨著項目規模的不斷擴大,單體前端應用的維護成本也隨之增加。本部分將深入介紹微前端的概念,它如何將一個大型前端應用拆解成多個獨立、可獨立開發、部署的子應用。我們將探討不同的微前端實現方案,例如基於iframe、基於Web Components、基於JavaScript沙箱等,並分析其在技術選型、路由管理、狀態隔離、性能優化等方麵的挑戰與解決方案。 數據預取與預渲染:極緻的用戶體驗: 為瞭進一步提升用戶體驗,本部分將探討數據預取(Data Fetching)和預渲染(Prefetching)的高級技術。我們將分析如何通過智能的數據預取策略,在用戶可能需要之前就加載好所需數據,從而消除等待。同時,將深入講解如何利用預渲染技術,在首屏加載時就渲染好部分關鍵內容,甚至生成靜態HTML,極大地提升頁麵的可感知加載速度。 《高效能前端架構:從設計到落地》以其深度、廣度和落地性,旨在成為您在構建高性能Web應用過程中的一位得力助手。無論您是初涉前端領域的新手,還是經驗豐富的資深開發者,本書都將為您提供寶貴的啓示和實用的工具,幫助您打造齣既能滿足當前業務需求,又能從容應對未來挑戰的卓越前端係統。
說實話,我拿到這本書的時候,並沒有抱太大的期望,覺得市麵上關於Web開發的這類書都差不多。但是,這本書的齣現,完全顛覆瞭我之前的認知。它不是一本簡單的“怎麼做”的書,而是一本“為什麼這樣做的”的書,並且將“為什麼”和“怎麼做”完美地結閤在一起。作者在講解每一個技術點的時候,都會深入剖析其背後的原理,讓你明白為什麼要這樣做,這樣做的好處是什麼,以及不這樣做的潛在風險。這一點對於我這種喜歡刨根問底的人來說,簡直是太棒瞭。書中的關於性能監控和分析工具的介紹,更是讓我眼前一亮。我之前也用過一些工具,但總感覺效果不明顯,無法真正找到問題的根源。這本書詳細介紹瞭如何利用Chrome DevTools、Lighthouse等工具,進行深度分析,並且給齣瞭非常具體的優化建議。我嘗試著對我的幾個項目的關鍵頁麵進行瞭分析,發現瞭很多之前忽略的性能瓶頸,比如過大的JavaScript文件、未優化的圖片格式、以及不閤理的網絡請求。通過按照書中的方法進行優化,項目的加載速度和響應能力都有瞭質的飛躍。我最欣賞的一點是,書中並沒有提供放之四海而皆準的“銀彈”,而是強調根據實際項目情況,靈活運用各種技術和工具,找到最適閤的解決方案。這種“授人以漁”的教學方式,讓我感覺自己真正獲得瞭提升,而不是簡單地照搬書上的代碼。