産品特色
編輯推薦
適讀人群 :null (1)知乎著名前端專欄作者/前端類話題優秀答主/人人網資深前端工程師經驗總結
(2)《ES6 標準入門》作者/著名技術博客作者阮一峰、W3cplus.com 站長大漠大力推薦
(3)從技能修煉和思想提升2個維度總結齣34個高效編程和應用優化的完美實踐
內容簡介
這不是一本單純講解前端編程技巧的書,而是一本注重思想提升和內功修煉的書。
全書以問題為導嚮,精選瞭前端開發中的34個疑難問題,從分析問題的原因入手,逐步給齣解決方案,並分析各種方案的優劣,最後針對每個問題總結齣高效編程的*佳實踐和各種性能優化的方法。
全書共7章,內容從邏輯上大緻可以分為兩大類:
第一類,偏嚮實踐,圍繞HTML、CSS、JavaScript等傳統前端技術,以及PWA等新興前端技術,講解如何進行HTML優化、CSS優化、JavaScript優化、頁麵優化等,以此幫助前端工程師們提升高效編程和應用優化的能力。
第二類,注重基礎,講解瞭前端工程師必須掌握的數據處理、網絡協議、文件操作、測試等基礎性的開發技,目的是幫助前端工程師們修煉內功,打下紮實的基礎。
希望通過本書,不僅能幫助前端工程師們夯實基礎,而且還能寫齣簡潔、優美的代碼,為應用帶來良好的用戶體驗。
作者簡介
李銀城(網名:會編程的銀豬)
資深前端工程師,現就職於人人網。
知乎著名的專欄作者,前端類話題知名答主,在知乎前端圈有一定的影響力。樂於分享。喜歡寫博客,他的知乎專欄“Effective前端”,纍計已經超過20萬字,文章被大量轉發和轉載。
目錄
目 錄?Contents
前 言
第1章 HTML/CSS優化 1
Effective前端1:能用HTML/CSS
解決的問題就不要用JS 2
Effective前端2:優化HTML標簽 16
Effective前端3:用CSS畫一個三角形 22
Effective前端4:盡可能地使用僞元素 28
第2章 JS優化 34
Effective前端5:減少前端代碼耦閤 34
Effective前端6:JS書寫優化 47
第3章 頁麵優化 59
Effective前端7:避免頁麵卡頓 59
Effective前端8:加快頁麵打開速度 67
Effective前端9:增強用戶體驗 85
Effective前端10:用好Chrome Devtools 91
第4章 HTML5優化實踐 109
Effective前端11:使用H5的history改善AJAX列錶請求體驗 109
Effective前端12:使用圖標替代雪碧圖 118
Effective前端13:理解和使用CSS3動畫 128
Effective前端14:實現前端裁剪壓縮圖片 136
Effective前端15:實現跨瀏覽器的HTML5錶單驗證 145
Effective前端16:使用Service Worker做一個PWA離綫網頁應用 151
第5章 前端與計算機基礎 164
Effective前端17:理解WebSocket和TCP/IP 164
Effective前端18:理解HTTPS連接的前幾毫秒發生瞭什麼 185
Effective前端19:弄懂為什麼0.1+ 0.2不等於0.3 203
Effective前端20:明白WebAssembly與程序編譯 209
Effective前端21:理解JS與多綫程 221
Effective前端22:學會JS與麵嚮對象 231
Effective前端23:瞭解SQL 248
Effective前端24:學習常用的前端算法與數據結構 266
第6章 掌握前端基礎 291
Effective前端25:掌握同源策略和跨域 291
Effective前端26:掌握前端本地文件操作與上傳 299
Effective前端27:學會常用的CSS居中方式 310
Effective前端28:學會常用的CSS布局技術 320
Effective前端29:理解字號與行高 327
Effective前端30:使用響應式開發 336
Effective前端31:明白移動端click及自定義事件 344
Effective前端32:學習JS高級技巧 355
第7章 運用恰當的工具 372
Effective前端33:前端的單元測試與自動化測試 372
Effective前端34:使用AE + bodymovin製作網頁動畫 390
前言/序言
Preface?前 言為何寫作本書?本書通過介紹前端的優化實踐以達到高效編程之功效,這裏並不是教你怎麼用CSS的某個屬性,如“display:grid”,或者怎麼用JS的ES6,而是重點教你一些前端的思想,如怎麼提高用戶體驗,怎麼寫齣簡潔優美的代碼等。注重思想而不注重形式,注重功底而不注重框架是本書的特色。本書有一大部分篇幅在介紹怎麼提升編程的功底,怎麼修煉內功,從而達到高效編程的目的。
全書以問題為導嚮,例如有些頁麵為什麼打開會比較卡頓,從怎麼解決這種問題,有哪些方法,這些方法的優缺點是什麼,一步步由淺入深地分析和解決問題。學會解決問題,比學會知識更為重要。
本書主要內容本書分為七章,第1~4章和第7章的實踐性比較強,第5章和第6章注重基礎。
第1章介紹如何使用瀏覽器提供的便利進行開發,能使用HTML/CSS解決的問題就不要使用JS,因為用HTML/CSS解決一般會更加簡單,用戶體驗也會更好。
第2章介紹怎麼樣寫齣簡潔高效的JS代碼,怎麼組織代碼邏輯,讓代碼更加優美,具有更好的擴展性。
第3章介紹頁麵整體的優化,包括怎麼加快頁麵的打開速度,怎麼避免頁麵的卡頓,怎麼從一些細節之處提升用戶的體驗,怎麼更好地使用調試工具。
第4章結閤實際經驗,介紹HTML5的一些實用技術,如使用history改善AJAX體驗、圖標字體和SVG、裁剪壓縮圖片、如何做一個PWA應用等。
第5章迴歸技術基礎,以WebSocket、wasm、Web Workers等HTML5的新技術為齣發點迴歸到計算機基礎,如網絡協議、程序編譯、多綫程等。特彆介紹瞭它們和前端的聯係,隻有掌握這些基礎,纔能更好地解決問題,做一個優秀的前端開發人員。
第6章討論瞭諸如跨域、上傳文件、CSS布局等前端技術支柱,特彆是有些很常用但卻是前端知識盲點的部分。
第7章介紹前端的單元測試與自動化測試,以及怎麼使用可視化工具製作網頁動畫,還介紹瞭其他一些前端開發常用的工具,作為本書的一個補充內容。
在寫作的過程中,我都是結閤實際的經驗進行闡述,並不像很多大學課本那樣隻講理論。所以相對來說,本書看起來應該會比較生動,並且很多章節都是圖文並茂的。
本書讀者對象本書適用於以下讀者對象:
具有一定的前端基礎,想要找一本高階的、能提升水平的書;剛畢業,沒有什麼實踐經驗,需要一本有實踐指導作用的書;已經工作瞭,想要學習一下其他人的前端開發經驗;不是做前端開發,但是有編程基礎,想要深入理解前端是怎麼運作的,或者是想加深理解HTTP之類的計算機基礎知識。
如何閱讀本書如果你一點編程經驗都沒有,可能不太適閤閱讀本書,你要是不知道什麼是變量,什麼是HTML,應該先讀一些編程入門書籍。
讀者可以從頭看到結尾,我相信每一篇看完都會有收獲的。或者有針對性地看,例如,你覺得自己在計算機基礎裏的網絡協議、數據結構算法等方麵比較薄弱,可以直接看第5章;如果你對HTML5比較感興趣可以直接看第4章。在閱讀的過程中,建議讀者都實際操作一遍,而不僅僅是當作睡前讀物,因為隻有自己動手實踐纔能識彆書中的真僞並且加深理解。所以本書不提供相關源碼等資源,讀者可自行根據書中描述動手練習。
緻謝在本書的寫作和齣版過程中得到瞭很多人的幫助,感謝我的傢人對我寫作的支持和鼓勵,感謝人人網同事在寫作過程中提齣的建議和對錯誤的修正,感謝機械工業齣版社華章分社對本書齣版付齣的努力,特彆是楊福川編輯對本書的策劃以及李雷鳴老師的認真審閱、還要感謝阮一峰、大漠老師在百忙之中審閱本書、認可本書,並為本書寫推薦語。
由於水平有限,書裏難免會有一些不足和錯誤的地方,雖經過幾番修改,可能還會有些許問題,歡迎讀者朋友對本書的內容積極討論,提齣意見。我的郵箱是liyincheng@m.scnu.edu.cn。
李銀城 2017年12月17日
《架構設計:從理念到實戰的係統思維》 書籍簡介 在瞬息萬變的數字時代,無論是初創企業還是行業巨頭,都麵臨著構建能夠適應未來、穩定可靠、且易於演進的軟件係統的挑戰。成功的係統不僅僅是代碼的堆砌,更是對復雜需求的深刻理解、對技術趨勢的敏銳洞察,以及對工程實踐的精湛運用。本書《架構設計:從理念到實戰的係統思維》正是為瞭係統性地解答這些挑戰而誕生。它不是一本介紹某種特定語言或框架的“速成手冊”,而是一本深入探討軟件架構設計核心原則、方法論和實踐經驗的著作。本書旨在幫助讀者建立起一套完整的係統思維框架,理解架構設計的本質,掌握從宏觀到微觀的決策過程,最終能夠設計齣高質量、可擴展、易維護的軟件係統。 本書的寫作理念源於對現代軟件工程實踐的深刻反思,以及對大量優秀和失敗項目案例的提煉。我們認為,架構設計並非少數“架構師”的專利,而是每一位有誌於構建優秀軟件的工程師都應該掌握的核心能力。因此,本書的語言力求清晰易懂,避免晦澀的技術術語,而是通過大量的實例、類比和場景分析,將抽象的架構概念具象化。我們相信,理解“為什麼”比記住“怎麼做”更為重要,因此本書在介紹具體方法的同時,更側重於闡述其背後的原理和思考邏輯。 本書內容梗概 第一部分:架構設計的基石——理解與思維 這一部分將引領讀者進入架構設計的世界,首先建立起對架構的正確認知。 何為架構? 我們將從不同的角度剖析“軟件架構”的含義,它不僅僅是組件的劃分,更是關於決策、權衡與約束的藝術。我們會探討架構在不同階段的演變,從早期簡單的模塊劃分到如今復雜的分布式係統。 驅動架構設計的力量:理解架構的根本目的是為瞭應對業務需求、技術挑戰和團隊協作等多種因素。本書將深入分析這些驅動力,例如: 業務目標與領域建模:如何將抽象的業務需求轉化為可落地的技術模型?如何通過領域驅動設計(DDD)等方法論,確保技術決策與業務價值高度對齊。 非功能性需求(NFRs)的重要性:性能、可擴展性、可用性、安全性、可維護性、可部署性等非功能性需求,往往是決定係統成敗的關鍵。我們將詳細解析這些NFRs的含義、度量方式以及它們對架構設計的具體影響。 技術演進與趨勢:從單體到微服務,從同步到異步,從集中式到去中心化,技術總是在不斷發展。本書將梳理重要的技術演進脈絡,並探討如何根據實際情況選擇閤適的技術棧,避免盲目追隨潮流。 組織結構與團隊協作:康威定律指齣,係統設計往往會反映組織結構。我們將探討如何根據團隊的實際情況來設計閤適的架構,以及如何通過架構來促進團隊的協作和效率。 係統思維與設計模式:培養係統性思考能力是架構設計的核心。我們將介紹如何從整體視角審視問題,理解各個組件之間的相互作用。同時,本書將引入一係列通用的架構設計模式,並分析它們在不同場景下的適用性,例如: 分層架構:經典的N層、M層設計,其優缺點與適用場景。 客戶端-服務器架構:Web開發中最基礎也最核心的架構模式。 事件驅動架構:如何通過事件和消息隊列實現係統間的解耦與異步通信。 微服務架構:拆分、服務間通信、數據一緻性等挑戰與解決方案。 領域驅動設計(DDD):如何構建圍繞業務領域構建模型,設計齣易於理解和演進的係統。 CQRS(命令查詢職責分離):如何通過分離讀寫操作來優化係統性能和可擴展性。 第二部分:架構設計的實踐——方法與決策 在建立起堅實的理論基礎後,本書將帶領讀者進入架構設計的具體實踐環節,重點在於如何做齣明智的設計決策。 架構評估與選擇:麵對多種可能的架構方案,如何進行有效的評估?本書將介紹ATAM(架構權衡分析方法)等評估工具,以及如何權衡不同NFRs之間的矛盾。 模塊化與組件設計:如何將龐大的係統拆分成 manageable 的模塊和組件?我們將討論高內聚、低耦閤的原則,以及如何設計清晰的接口和契約。 數據管理策略:數據是係統的核心,本書將深入探討不同的數據管理策略: 關係型數據庫(RDBMS):何時選擇,如何設計模式,性能優化技巧。 NoSQL數據庫:不同類型NoSQL數據庫(鍵值、文檔、列族、圖)的適用場景,以及它們如何解決關係型數據庫的痛點。 數據一緻性模型:強一緻性、最終一緻性、偏斜一緻性等概念,以及在分布式係統中的選擇。 緩存策略:如何利用緩存提高係統性能,避免重復計算。 通信模式與服務發現:在分布式係統中,服務間的通信是關鍵。 同步與異步通信:RESTful API、RPC、消息隊列(Kafka, RabbitMQ)等。 服務注冊與發現:Consul, Eureka, ZooKeeper 等解決方案。 API Gateway:統一入口、安全認證、流量控製等功能。 容錯與彈性設計:如何構建能夠抵禦故障、快速恢復的係統? 重試機製與熔斷器:Hystrix, Resilience4j 等。 負載均衡與容災:Nginx, HAProxy, Kubernetes 等。 限流與降級:保護係統在極端壓力下的穩定運行。 安全性設計:如何從架構層麵保障係統的安全? 認證與授權:OAuth 2.0, JWT 等。 數據加密與傳輸安全:SSL/TLS。 安全審計與威脅防護。 可觀測性設計:如何瞭解係統的運行狀態? 日誌(Logging):集中式日誌係統 ELK Stack。 監控(Monitoring):Prometheus, Grafana。 追蹤(Tracing):Jaeger, Zipkin。 第三部分:架構設計的演進與未來——持續優化 架構設計並非一蹴而就,而是一個持續迭代和演進的過程。 重構與技術債管理:如何識彆和償還技術債,保持代碼和架構的健康? 架構演進的策略:如何從單體遷移到微服務?如何逐步引入新的技術和模式? DevOps 與自動化:CI/CD流水綫、自動化測試、基礎設施即代碼(IaC)等,如何通過 DevOps 實踐賦能架構的快速迭代和部署。 架構師的角色與成長:成為一名優秀的架構師需要具備哪些特質?如何平衡技術深度與廣度?如何與團隊有效溝通? 新興技術與架構趨勢:Serverless, 微前端, WebAssembly 等,以及它們對未來架構設計可能帶來的影響。 本書特色 理論與實踐並重:本書不僅會講解架構設計的理論概念,更會提供大量的實際案例分析和代碼示例,幫助讀者將理論知識轉化為實際能力。 係統性思維培養:本書的核心目標是幫助讀者建立起一套完整的係統思維框架,理解架構設計是一個全局性的、權衡性的過程。 深入淺齣,通俗易懂:我們緻力於用清晰、簡潔的語言解釋復雜的概念,避免不必要的術語堆砌,讓不同經驗水平的讀者都能從中受益。 廣泛的適用性:本書討論的架構原則和方法論,適用於各種規模和類型的軟件項目,無論您是開發Web應用、移動應用、後端服務還是嵌入式係統,都能從中獲得啓發。 強調權衡與取捨:架構設計從來不是完美無缺的,而是關於在各種約束和需求之間做齣最佳的權衡。本書將引導讀者理解這一過程,並做齣明智的決策。 目標讀者 本書適閤所有希望提升軟件係統設計能力的工程師,包括但不限於: 初級工程師:建立正確的架構觀,避免陷入早期設計誤區。 中高級工程師:深入理解架構設計原理,掌握更高級的設計模式和方法論。 技術負責人/架構師:係統性地梳理架構設計知識體係,提升團隊的整體設計能力。 産品經理/項目經理:理解技術架構對産品實現的影響,更好地與技術團隊溝通。 《架構設計:從理念到實戰的係統思維》將是您在軟件工程領域不斷探索和進步的寶貴指南。我們相信,掌握瞭本書的內容,您將能夠自信地應對日益復雜的軟件係統設計挑戰,構建齣真正卓越的數字産品。