极客时间-左耳听风-程序员攻略-前端基础和底层原理
前端基础和底层原理
对于前端的学习和提高,前端的三个最基本的东西 HTML 5、CSS 3 和 JavaScript(ES6)是必须要学好的。这其中有很多很多的技术,比如,CSS 3 引申出来的 Canvas(位图)、SVG(矢量图) 和 WebGL(3D 图),以及 CSS 的各种图形变换可以让你做出非常丰富的渲染效果和动画效果。
学习任何知识都要从基础出发,如下的这些知识,都是前端程序员需要花力气啃下来的硬骨头。
- JavaScript 的核心原理。
- 浏览器的工作原理。
- 网络协议 HTTP,尤其是 HTTP/2,还有 HTTP 的几种请求方式:短连接、长连接、Stream 连接、WebSocket 连接。
- 前端性能调优,各种性能调优技术。
- 框架学习。 React 和 Vue 两个框架。就这两个框架来说,Virtual DOM 技术是其底层技术,组件化是其思想,管理组件的状态是其重点。而对于 React 来说,函数式编程又是其编程思想。
- UI 设计。设计也是前端需要做的一个事,比如像 Google 的 Material UI,或是比较流行的 Atomic Design 等应该是前端工程师需要学习的。
而对于工具类的东西,只要去动手了,这种知识自然就会获得,还是把精力重点放在更重要的地方。
HTML 5
HTML 5 主要有以下几本书推荐。
- HTML 5 权威指南 ,本书面向初学者和中等水平 Web 开发人员,是牢固掌握 HTML 5、CSS 3 和 JavaScript 的必读之作。书看起来比较厚,是因为里面的代码很多。
- HTML 5 Canvas 核心技术 ,如果要做 HTML 5 游戏的话,这本书必读。
对于 SVG、Canvas 和 WebGL 这三个对应于矢量图、位图和 3D 图的渲染来说,给前端开发带来了重武器,很多 HTML5 小游戏也因此蓬勃发展。
最后是几个资源列表。
- Awesome HTML5 。GitHub 上的 Awesome HTML5,其中有大量的资源和技术文章。
- Awesome SVG
- Awesome Canvas
- Awesome WebGL
CSS
需要学会使用 LESS 和 SaSS 这两个 CSS 预处理工具,其可以帮你提高很多效率。
CSS 的书写规范。
- Principles of writing consistent, idiomatic CSS
- Opinionated CSS styleguide for scalable applications
- Google HTML/CSS Style Guide
CSS Framework,其中最著名的就是 Twitter 公司的 Bootstrap,其有很多不错的 UI 组件,页面布局方案,可以让你非常方便也非常快速地开发页面。除此之外,还有,主打清新 UI 的 Semantic UI、主打响应式界面的 Foundation 和基于 Flexbox 的 Bulma。
在使用 CSS 之前,需要把你浏览器中的一些 HTML 标签给标准化掉。几个 Reset 或标准化的 CSS 库:Normalize、MiniRest.css、sanitize.css 和 unstyle.css。
关于更多的 CSS 框架,参看Awesome CSS Frameworks 上的列表。
接下来,是几个公司的 CSS 相关实践,供参考。
- CodePen’s CSS
- Github 的 CSS
- Medium’s CSS is actually pretty f***ing good
- CSS at BBC Sport
- Refining The Way We Structure Our CSS At Trello
最后是一个可以写出可扩展的 CSS 的阅读列表 A Scalable CSS Reading List 。
JavaScript
下面是学习 JavaScript 的一些图书和文章。
- JavaScript: The Good Parts ,中文翻译版为《JavaScript 语言精粹》。这是一本介绍 JavaScript 语言本质的权威图书,值得任何正在或准备从事 JavaScript 开发的人阅读。
- Secrets of the JavaScript Ninja ,中文翻译版为《JavaScript 忍者秘籍》,本书是 jQuery 库创始人编写的一本深入剖析 JavaScript 语言的书。适合具备一定 JavaScript 基础知识的读者阅读,也适合从事程序设计工作并想要深入探索 JavaScript 语言的读者阅读。这本书有很多晦涩难懂的地方,需要仔细阅读,反复琢磨。
- Effective JavaScript ,Ecma 的 JavaScript 标准化委员会著名专家撰写,作者凭借多年标准化委员会工作和实践经验,深刻辨析 JavaScript 的内部运作机制、特性、陷阱和编程最佳实践,将它们高度浓缩为极具实践指导意义的 68 条精华建议。
- 接下来是 ES6 的学习,这里给三个学习手册源。
- ES6 in Depth,InfoQ 上有相关的中文版 - ES6 深入浅出。还可以看看 A simple interactive ES6 Feature list ,或是看一下 阮一峰翻译的 ES6 的教程 。
- ECMAScript 6 Tools ,这是一堆 ES6 工具的列表,提高开发效率。
- Modern JS Cheatsheet ,这个 Cheatsheet 在 GitHub 上有 1 万 6 千颗星。
- 一组很不错的《You Don’t Know JS 系列》 的书。
- [You Don’t Know JS: “Up & Going”](https://github.com/getify/You-Dont-Know-JS/blob/master/up & going/README.md#you-dont-know-js-up--going)
- [You Don’t Know JS: “Scope & Closures”](https://github.com/getify/You-Dont-Know-JS/blob/master/scope & closures/README.md#you-dont-know-js-scope--closures)
- [You Don’t Know JS: “this & Object Prototypes”](https://github.com/getify/You-Dont-Know-JS/blob/master/this & object prototypes/README.md#you-dont-know-js-this--object-prototypes)
- [You Don’t Know JS: “Types & Grammar”](https://github.com/getify/You-Dont-Know-JS/blob/master/types & grammar/README.md#you-dont-know-js-types--grammar)
- [You Don’t Know JS: “Async & Performance”](https://github.com/getify/You-Dont-Know-JS/blob/master/async & performance/README.md#you-dont-know-js-async--performance)
- [You Don’t Know JS: “ES6 & Beyond”](https://github.com/getify/You-Dont-Know-JS/blob/master/es6 & beyond/README.md#you-dont-know-js-es6--beyond)
- 和编程范式相关的文章。
- Glossary of Modern JavaScript Concepts: Part 1 ,首先推荐这篇文章,其中收集了一些编程范式方面的内容,比如纯函数、状态、可变性和不可变性、指令型语言和声明式语言、函数式编程、响应式编程、函数式响应编程。
- Glossary of Modern JavaScript Concepts: Part 2 ,在第二部分中主要讨论了作用域和闭包,数据流,变更检测,组件化……
- 下面三篇文章是德米特里·索什尼科夫(Dmitry Soshnikov)个人网站上三篇讲 JavaScript 内在的文章。
- “How JavaScript Works” 是一组非常不错的文章(可能还没有写完),强烈推荐。这一系列的文章是 SessionStake 的 CEO 写的,现在有 13 篇,我感觉可能还没有写完。这个叫 亚历山大·兹拉特科夫(Alexander Zlatkov) 的 CEO 太猛了。
- An overview of the engine, the runtime, and the call stack
- Inside the V8 engine + 5 tips on how to write optimized code ,了解 V8 引擎。这里,也推荐 Understanding V8’s Bytecode 这篇文章可以让你了解 V8 引擎的底层字节码。
- Memory management + how to handle 4 common memory leaks ,内存管理和 4 种常见的内存泄露问题。
- Event loop and the rise of Async programming + 5 ways to better coding with async/await ,Event Loop 和异步编程。
- Deep dive into WebSockets and HTTP/2 with SSE + how to pick the right path ,WebSocket 和 HTTP/2。
- A comparison with WebAssembly + why in certain cases it’s better to use it over JavaScript ,JavaScript 内在原理。
- The building blocks of Web Workers + 5 cases when you should use them ,Web Workers 技术。
- Service Workers, their lifecycle and use cases ,Service Worker 技术。
- The mechanics of Web Push Notifications ,Web 端 Push 通知技术。
- Tracking changes in the DOM using MutationObserver ,Mutation Observer 技术。
- The rendering engine and tips to optimize its performance ,渲染引擎和性能优化。
- Inside the Networking Layer + How to Optimize Its Performance and Security ,网络性能和安全相关。
- Under the hood of CSS and JS animations + how to optimize their performance ,CSS 和 JavaScript 动画性能优化。
- 接下来是 Google Chrome 工程经理 阿迪·奥斯马尼(Addy Osmani) 的几篇 JavaScript 性能相关的文章,也是非常好的。
- 其它与 JavaScript 相关的资源。
- JavScript has Unicode Problem ,这是一篇很有价值的 JavaScript 处理 Unicode 的文章。
- JavaScript Algorithms ,用 JavaScript 实现的各种基础算法库。
- JavaScript 30 秒代码 ,一堆你可以在 30 秒内看懂各种有用的 JavaScript 的代码,在 GitHub 上有 2 万颗星了。
- What the f*ck JavaScript ,一堆 JavaScript 搞笑和比较 tricky 的样例。
- Airbnb JavaScript Style Guide ,Airbnb 的 JavaScript 的代码规范,GitHub 上有 7 万多颗星。
- JavaScript Patterns for 2017 ,YouTube 上的一个 JavaScript 模式分享,值得一看。
浏览器原理
了解浏览器是怎么工作的,需要看《How browsers work》。这篇文章受众之大,后来被人重新整理并发布为《How Browsers Work: Behind the scenes of modern web browsers》,其中还包括中文版。
精简版的,可以看《浏览器的渲染原理简介》或是看一下这个幻灯片。
然后,是对 Virtual DOM 的学习。Virtual DOM 是 React 的一个非常核心的技术细节,它也是前端渲染和性能的关键技术。所以,你有必要要好好学习一下这个技术的实现原理和算法。当然,前提条件是你需要学习过前面我所推荐过的浏览器的工作原理。下面是一些不错的文章。
- How to write your own Virtual DOM
- Write your Virtual DOM 2: Props & Events
- How Virtual-DOM and diffing works in React
- The Inner Workings Of Virtual DOM
- 深度剖析:如何实现一个 Virtual DOM 算法
- 以及两个 Vitual-DOM 实现供你参考:
网络协议
-
High Performance Browser Networking ,本书是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物。本书目标是涵盖 Web 开发者技术体系中应该掌握的所有网络及性能优化知识。
全书以性能优化为主线,从 TCP、UDP 和 TLS 协议讲起,解释了如何针对这几种协议和基础设施来优化应用。然后深入探讨了无线和移动网络的工作机制。最后,揭示了 HTTP 协议的底层细节,同时详细介绍了 HTTP 2.0、 XHR、SSE、WebSocket、WebRTC 和 DataChannel 等现代浏览器新增的能力。
-
另外,HTTP/2也是 HTTP 的一个新的协议,于 2015 年被批准通过,现在基本上所有的主流浏览器都默认启用这个协议。所以有必要学习一下这个协议。下面相关的学习资源。
- Gitbook - HTTP/2 详解
- http2 explained(中译版)
- HTTP/2 for a Faster Web
- Nginx HTTP/2 白皮书
- HTTP/2 的两个 RFC:
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2) ,HTTP/2 的协议本身。
- RFC 7541 - HPACK: Header Compression for HTTP/2 ,HTTP/2 的压缩算法。
-
新的 HTML5 支持 WebSocket,所以这也是要学的一个重要协议。
- HTML5 WebSocket: A Quantum Leap in Scalability for the Web ,这篇文章比较了 HTTP 的几种链接方式,Polling、Long Polling 和 Streaming,并引入了终级解决方案 WebSocket。你知道的,了解一个技术的缘由是非常重要的。
- StackOverflow: My Understanding of HTTP Polling, Long Polling, HTTP Streaming and WebSockets ,这是 StackOverflow 上的一个 HTTP 各种链接方式的比较,也可以让你有所认识。
- An introduction to Websockets ,一个 WebSocket 的简单教程。
- Awesome Websockets ,GitHub 的 Awesome 资源列表。
- 一些和 WebSocket 相关的想法,可以开阔思路:
小结
学习任何知识都要从基础出发
HTML 5、CSS 3 和 JavaScript(ES6)这三大基础核心,给出了大量的图书、文章以及其他一些相关的学习资源。
学习浏览器的工作原理和网络协议相关的内容。