极客时间已完结课程限时免费阅读

87 | 程序员练级攻略:前端基础和底层原理

87 | 程序员练级攻略:前端基础和底层原理-极客时间

87 | 程序员练级攻略:前端基础和底层原理

讲述:杨超

时长13:52大小12.67M

你好,我是陈皓,网名左耳朵耗子。
对于前端的学习和提高,我的基本思路是这样的。首先,前端的三个最基本的东西 HTML 5、CSS 3 和 JavaScript(ES6)是必须要学好的。这其中有很多很多的技术,比如,CSS 3 引申出来的 Canvas(位图)、SVG(矢量图) 和 WebGL(3D 图),以及 CSS 的各种图形变换可以让你做出非常丰富的渲染效果和动画效果。
ES6 简直就是把 JavaScript 带到了一个新的台阶,JavaScript 语言的强大,大大释放了前端开发人员的生产力,让前端得以开发更为复杂的代码和程序,于是像 React 和 Vue 这样的框架开始成为前端编程的不二之选。
我一直认为学习任何知识都要从基础出发,所以这篇文章我会着重介绍基础知识和基本原理,尤其是如下的这些知识,都是前端程序员需要花力气啃下来的硬骨头。
JavaScript 的核心原理。这里我会给出好些网上很不错的讲 JavaScript 的原理的文章或图书,你一定要学好语言的特性,并且详细了解其中的各种坑。
浏览器的工作原理。这也是一块硬骨头,我觉得这是前端程序员需要了解和明白的关键知识点,不然,你将无法深入下去。
网络协议 HTTP。也是要着重了解的,尤其是 HTTP/2,还有 HTTP 的几种请求方式:短连接、长连接、Stream 连接、WebSocket 连接。
前端性能调优。有了以上的这些基础后,你就可以进入前端性能调优的主题了,我相信你可以很容易上手各种性能调优技术的。
框架学习。我只给了 React 和 Vue 两个框架。就这两个框架来说,Virtual DOM 技术是其底层技术,组件化是其思想,管理组件的状态是其重点。而对于 React 来说,函数式编程又是其编程思想,所以,这些基础技术都是你需要好好研究和学习的。
UI 设计。设计也是前端需要做的一个事,比如像 Google 的 Material UI,或是比较流行的 Atomic Design 等应该是前端工程师需要学习的。
而对于工具类的东西,这里我基本没怎么涉及,因为本文主要还是从原理和基础入手。那些工具我觉得都很简单,就像学习 Java 我没有让你去学习 Maven 一样,因为只要你去动手了,这种知识你自然就会获得,我们还是把精力重点放在更重要的地方。
下面我们从前端基础和底层原理开始讲起。先来讲讲 HTML5 相关的内容。

HTML 5

HTML 5 主要有以下几本书推荐。
HTML 5 权威指南 ,本书面向初学者和中等水平 Web 开发人员,是牢固掌握 HTML 5、CSS 3 和 JavaScript 的必读之作。书看起来比较厚,是因为里面的代码很多。
HTML 5 Canvas 核心技术 ,如果你要做 HTML 5 游戏的话,这本书必读。
对于 SVG、Canvas 和 WebGL 这三个对应于矢量图、位图和 3D 图的渲染来说,给前端开发带来了重武器,很多 HTML5 小游戏也因此蓬勃发展。所以,你可以学习一下。
学习这三个技术,我个人觉得最好的地方是 MDN。
最后是几个资源列表。
Awesome HTML5 。GitHub 上的 Awesome HTML5,其中有大量的资源和技术文章。

CSS

在《程序员练级攻略》系列文章最开始,我们就推荐过 CSS 的在线学习文档,这里再推荐一下 MDN Web Doc - CSS 。我个人觉得只要你仔细读一下文档,CSS 并不难学。绝大多数觉得难的,一方面是文档没读透,另一方面是浏览器支持的标准不一致。所以,学好 CSS 最关键的还是要仔细地读文档。
之后,在写 CSS 的时候,你会发现,你的 CSS 中有很多看起来相似的东西。你的 DRY - Don’t Repeat Yourself 洁癖告诉你,这是不对的。所以,你需要学会使用 LESSSaSS 这两个 CSS 预处理工具,其可以帮你提高很多效率。
然后,你需要学习一下 CSS 的书写规范,前面的《程序员修养》一文中提到过一些,这里再补充几个。
如果你需要更有效率,那么你还需要使用一些 CSS Framework,其中最著名的就是 Twitter 公司的 Bootstrap,其有很多不错的 UI 组件,页面布局方案,可以让你非常方便也非常快速地开发页面。除此之外,还有,主打清新 UI 的 Semantic UI 、主打响应式界面的 Foundation 和基于 Flexbox 的 Bulma
当然,在使用 CSS 之前,你需要把你浏览器中的一些 HTML 标签给标准化掉。所以,推荐几个 Reset 或标准化的 CSS 库:NormalizeMiniRest.csssanitize.cssunstyle.css
关于更多的 CSS 框架,你可以参看Awesome CSS Frameworks 上的列表。
接下来,是几个公司的 CSS 相关实践,供你参考。
最后是一个可以写出可扩展的 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 系列》 的书。
接下来是一些和编程范式相关的文章。
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 太猛了。
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 种常见的内存泄露问题。
The mechanics of Web Push Notifications ,Web 端 Push 通知技术。
接下来是 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》,其中还包括中文版。这篇文章非常非常长,所以,你要有耐心看完。如果你想看个精简版的,可以看我在 Coolshell 上发的《浏览器的渲染原理简介》或是看一下这个幻灯片
然后,是对 Virtual DOM 的学习。Virtual DOM 是 React 的一个非常核心的技术细节,它也是前端渲染和性能的关键技术。所以,你有必要要好好学习一下这个技术的实现原理和算法。当然,前提条件是你需要学习过前面我所推荐过的浏览器的工作原理。下面是一些不错的文章可以帮你学习这一技术。

网络协议

High Performance Browser Networking ,本书是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物。本书目标是涵盖 Web 开发者技术体系中应该掌握的所有网络及性能优化知识。
全书以性能优化为主线,从 TCP、UDP 和 TLS 协议讲起,解释了如何针对这几种协议和基础设施来优化应用。然后深入探讨了无线和移动网络的工作机制。最后,揭示了 HTTP 协议的底层细节,同时详细介绍了 HTTP 2.0、 XHR、SSE、WebSocket、WebRTC 和 DataChannel 等现代浏览器新增的能力。
另外,HTTP/2也是 HTTP 的一个新的协议,于 2015 年被批准通过,现在基本上所有的主流浏览器都默认启用这个协议。所以,你有必要学习一下这个协议。下面相关的学习资源。
HTTP/2 的两个 RFC:
新的 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)这三大基础核心,给出了大量的图书、文章以及其他一些相关的学习资源。之后,我建议你学习浏览器的工作原理和网络协议相关的内容。我认为,掌握这些原理也是学好前端知识的前提和基础。值得花时间,好好学习消化。
下篇文章中,我们将讲讲如何做前端性能优化,并推荐一些好用的前端框架。敬请期待。
下面是《程序员练级攻略》系列文章的目录。
分享给需要的人,Ta购买本课程,你将得29
生成海报并分享

赞 14

提建议

上一篇
86 | 程序员练级攻略:机器学习和人工智能
下一篇
88 | 程序员练级攻略:前端性能优化和框架
unpreview
 写留言

精选留言(47)

  • 小薛薛
    2018-07-31
    0.0 从零基础入门看到现在,这知识体量,好害怕。

    作者回复: 我用了20年,我能做到,你一定也能

    43
  • 图·美克尔
    2018-07-31
    这系列真的看不动了…

    作者回复: 有时候,学习就像拉弓蓄力一样,学习基础知识感觉很枯燥很不实用,工作上用不到,然而学习这些知识是为了未来可以学得更快。基础打牢,学什么都快,别看我的专栏后面的那些文章很多,打好基础,那些就跟切菜一样。

    22
  • 少年姜太公
    2018-07-31
    21世纪信息获取越来越便利了,网络上有各种书籍,博客,论文,有中文也有外文的。古代,资源匮乏,为了读一本书可能要跑很远借阅并手抄,而现代我们是生活在资源的海洋中,获取资源效率提高了。然而不幸的是在资源的海洋中,我们迷茫了,难以取舍。如何获取优良的资源并迅速掌握吸收转化为生产力已是竞争的核心。望陈老师加以开示。

    作者回复: 我没什么好的经验,我也是只有在看过所有的资料后才知道什么是好的。比较幸运的是,我的基础知识很扎实,所以学什么都很快。

    20
  • ProcessIsTheKey
    2021-05-30
    看到前端这一篇看哭了,16年12月份,28周岁,机械转Java,自学一个月,然后进培训班,学费贷款1.8万,用HTML画出第一个页面(旅游网站页面)的时候,欣喜若狂...回想起那些天每天学习编码到凌晨2点,第二天依然精神抖擞上课的半年时光,到目前在上市公司内成功上线第一个微服务项目的开发骨干,再到小团队的开发经理,不禁老泪纵横,哇得哭出了声...
    16
  • Alvin
    2018-07-31
    耗子叔,阮一峰的书是人家自己写的,不是翻译的
    共 1 条评论
    7
  • 天降神经病
    2020-04-07
    我想在这里推荐一下开源的教育平台《现代 JavaScript 教程》连接:https://zh.javascript.info/(注意,各位人才再上车前先了解一下项目的起源和宗旨),这是项目的简介:“以最新的 JavaScript 标准为基准。通过简单但足够详细的内容,为你讲解从基础到高阶的 JavaScript 相关知识”。总之,她是我见过最好的教育平台,如果你觉得内容翻译有问题可以在首页的最下面点击链接。
    5
  • 寻路之人
    2018-07-31
    耗哥,大概什么时候讲解一下,如何阅读来源项目源码的经验分享吗?期待中
    4
  • 秋天
    2018-08-22
    老师这是把收藏夹里的东西都倾倒出来啦????
    3
  • 朵朵李
    2018-08-01
    以我自己的经验,CSS需要学习一些基础,例如布局,动画,选择器,适配等,剩下的主要是从优秀的框架例如bootstrap学习如何利用LESS,SASS等预处理器的变量,函数,mixin等,完成组件,页面到整站的模块化,体系化。当然跟JS类似,后处理器逐渐流行,所以POSTCSS也需要了解使用。JavaScript感觉主要是权威指南夯实基础,ES6 ES7等学习掌握,其他的书籍辅助,至少后处理器babel要会用,喜欢严格的就学习使用TS。其实后期前端大家主要围绕着工程化来了,webpack必须要会了,gulp可以了解一下,Nodo在工程化中起着决定性的力量,也是不学不行的。
    展开
    3
  • 小柒
    2018-07-31
    终于等到前端了,react和vue学习资源好少啊

    作者回复: 还没到呢

    共 4 条评论
    4
  • 刘桢
    2020-05-13
    太猛了
    2
  • 邱桂新
    2018-10-04
    您用了二十年,谁能像您一样花二十年学这些?(纯疑问)
    2
  • dearfat
    2018-08-02
    没想到看到这个领域,耗子叔还是能带来惊喜
    2
  • 2020-04-26
    前端知识体系:从入门到放弃- ̗̀(๑ᵔ⌔ᵔ๑)
    1
  • 2019-01-12
    学会九阳神功后学什么都快,少林龙抓手也能现学现用,这个系列的文章就是九阳神功。
    1
  • 逍遥思
    2018-08-08
    耗子叔,在学JavaScript,但有朋友说TypeScript更值得学,按照我的观念,先学好JavaScript肯定是没错的,但还是想来请教下耗子叔,嘿嘿
    共 1 条评论
    1
  • Grace微雪
    2018-08-04
    要学的东西太多了…🤪
    1
  • dearfat
    2018-08-02
    没想到看到这个领域,耗子叔还是能带来惊喜
    1
  • _俊腾
    2018-07-31
    耗子叔,es6的学习推荐exploring es6,它有一个免费的在线版本http://exploringjs.com/es6/index.html
    1
  • ogtitel
    2018-07-31
    20年的功力果然不一般啊!
    1