专治前端焦虑的学习方案

最近我也读了Jose Aguinaga的博文2016年里做前端是怎样一种体验。这篇博客引发了广泛的关注与讨论,无论是在Hacker
News还是Reddit还是Medium上,都有很多人参与到了它的讨论中。我也是很早之前就感觉到了目前JavaScript生态圈中的群雄逐鹿,并且我还特地对目前JavaScript库流行现状进行了调查,希望能够在异彩纷呈的各式各样的库中寻找到真正的为大众所接受的。不过今天我希望能够更进一步,不仅仅再抱怨现状,而是从我个人的角度来给出一个逐步深入学习JavaScript生态圈的方案。(如果你尚对HTML/CSS/JavaScript并不了解,那么可以阅读前端攻略:从路人甲到英雄无敌)。而在文本中我们会涉及以下几个方面:

  • 一个现代的JavaScript Web应用会包含哪些部分
  • 为什么不推荐使用jQuery?
  • 为什么React是个不错的选择
  • 为什么并不需要你首先学透JavaScript?
  • 如何学习ES6语法
  • 缘何与如何学习Redux?
  • GraphQL到底解决了什么问题?
  • 下一步又会走向何方

Background

JavaScript vs JavaScript

在正式开始之前,我们先要搞清楚我所要说的和你目前理解的是不是同一个东西。如果你在Google中搜索‘Learn
JavaScript’或者‘JavaScript study
plan’,你能得到一坨一坨的资料与教程指导你如何学习。不过实际上在我们的真实项目中,我们只会用到一些相对简单的语法。换言之,可能你在学习Web应用编写中所需要的80%的知识点都包含在了任何一本JavaScript书籍的前几章。另一个角度来说,真正麻烦的点在于如何掌握整个JavaScript生态圈,这里包含了数不尽的框架与库。不过我相信本文可以给你一点启示。

Building Blocks Of JavaScript Apps

为了便于理解现代JavaScript为啥看起来如何复杂,我们首先要明白其工作原理。我们首先来看下2008年左右流行的所谓传统Web应用的架构:

1.服务端从数据库中获取数据。

2.服务端读取这些数据然后渲染到HTML中。

3.HTML文件被发送到浏览器,浏览器将HTML转化为DOM树并且展示出来。

现在很多的应用会在客户端使用JavaScript来保证应用的可交互性,不过本质上浏览器还是从收到HTML文件开始。下面我们再比较下2016年流行的所谓现代Web应用,典型的就是所谓的单页应用:

注意到区别了吗?与传统的Web应用相比,现在的服务端更多的承担起是提供数据的功能,而渲染HTML文件这一步交由客户端进行处理。这一个根本性的变化也会导致很多或好或坏的结果,好的一方面呢:

  • 对于某一块内容,仅仅发送数据会比发送整个HTML文件快很多
  • 以单页应用为例,客户端可以刷新局部数据而不需要刷新整个浏览器窗口

坏的方面:

  • 由于现在数据的加载与渲染放在了客户端,初始加载与渲染会耗费更长的时间
  • 现在需要在客户端提供一个存储与管理数据的地方,也就是我们目前所熟悉的状态管理工具

恶心的地方:

  • 随着客户端应用逻辑与交互的日渐复杂,你需要掌握像服务端技术栈一样复杂的前端技术栈

The Client-Server Spectrum

实际上很多才接触现代前端开发技术栈的同学,特别是才从后端转前端的同学都会有个疑问,既然这么麻烦为何还要进行转变?举个例子,如果用户希望得到2+2的结果,肯定不需要我们将这个计算发送到服务端然后等待结果,浏览器完全能够支持这种简单的计算。换言之,如果你是打算构建一个纯粹的静态内容站,譬如博客这样的,那么在服务端直接生成最终的HTML文件是个不错的选择。不过实际上很多Web应用中我们并不能很好地界定这个分割点,并且整个光谱并不是连续的,你并不能先构建一个纯粹的服务端应用然后慢慢地向客户端迁移。当到达某个分割点时,你不得不停止这种迁移过程而去重构大量的代码,或者你就会面对一个庞杂无序难以维护的垃圾代码库。

这一点与不建议使用jQuery不谋而合,你可以将jQuery看做胶带一类的存在。对于房子的修修补补很是不错,但是如果你想不断地增加内容与功能,你就会发现你的房子歪歪扭扭,到处都是狗皮膏药,越看越丑。而大部分的现代JavaScript框架则是更像3D打印技术,可能在开始之前需要大量的准备时间,但是它能还你一个更整洁稳定的房屋。

Week 0:JavaScript Basics

除非你是一个纯粹的服务端应用程序开发者,你肯定知道些JavaScript基础的内容。如果你还不是很了解的话那么也不需要担心,这里推荐个不错的教程Codecademy’s JavaScript lessons

Week 1:Start With React

在你了解了JavaScript基础语法知识之后,我推荐你下一步开始学习React。

React是由Facebook开发并且开源的UI库,换言之,其专注于完成将数据渲染到HTML这一步骤,也就是所谓的View层。不过需要注意的是,我在这里并不是安利React为最优秀的库,这个是因项目而定的,不过我觉得React是个挺不错的合适初学者的库:

  • React不一定就是最受欢迎的库,不过其受欢迎程度相当高
  • React不一定是最轻量级的库,不过其谈不上是一个重量级的库
  • React不一定是最简单易学的库,不过其并不难学
  • React不一定是最优雅的库,不过其看上去还是很舒心的

总而言之,React并不一定适用于所有的场景,但是我觉得它是所谓最安全的,学了不吃亏。React还会引导你去了解一些像组件、应用状态与无状态函数等等现代Web应用框架的概念。最后,React的整个生态圈非常繁荣,你可以从Github上有关React的项目中找到很多可用的组件,或者在Stack
Overflow上找到很多关于React的答疑解惑。我个人是比较推荐Wes Bos的React for
Beginners这一课程。这课程包含了React从入门到最佳实践的全部知识。

Week 2:Your First React Project

到了这里我假设你已经完成了React的基础课程,如果你跟我差不多的话,那么我估计你现在的状态可能是:

  • 估摸着你已经忘了一大半学过的知识点
  • 你很想能够尽快付诸实践

众所周知,实践是学习某个框架的不二法诀,并且开始一个简单的个人项目也是学习新技术的不错的试验点。一个个人项目可以是简单的单页应用,也可能是像Github客户端这样复杂的Web应用。这里我推荐你可以尝试着去做一个简单的个人主页。不过还是要补充一句,如果你打算用React做一个简单的静态内容页就有点大材小用了,这里推荐一个不错的工具Gatsby,这是一个React静态网站生成器。

这里我把Gatsby推荐为你可以在初步实践React阶段一个不错的参考项目,主要是因为:

  • 其提供了配置好的Webpack,可以省去你很多学习配置的烦恼
  • 能够基于你目录结构动态设置路由
  • 所有的HTML内容同样可以服务端渲染
  • 生成的静态内容页意味着你可以简单地就可以部署在Github主页上

Week 3:Mastering ES6

随着我学习React的深入,我很快就感觉到了现在能够看得懂简单的代码示例,不过还有很多语法尚不能完全理解。举例来说,我还不熟悉ES6中的一些常见特性:

  • Arrow functions
  • Object destructing
  • Classes
  • Spread Operator

如果你跟我一样也不是很熟悉,那么建议可以花个几天时间来认真学习下ES6的特性。如果你喜欢上面推荐的React基础课程,那么你也可以看下ES6
for Everybody系列教程。不过如果你想找点免费的资源,那么这里推荐Nicolas Bevacqua’s book,
Practical ES6.。最后,我还是想提到下对于ES6的好的学习方法就是回顾参照各种各样的代码库,学习人家的用法与实践。

Week 4:Taking On State Management

到这里我们已经能够构建基于静态内容的简单的React的前端项目,不过真实的Web应用项目不可能全是静态内容,他们需要从服务端获取数据然后交与React进行动态渲染。最直观的做法就是将数据一层一层地传递给组件,不过这很容易引发整个系统的混乱。譬如当两个组件需要去展示同样的数据时候,它们应该如何交互呢?

这也就是所谓状态管理工具的用武之处,不同于将你的数据存放到组件内,你可以创建一个独立的全局单例Store来为组件树存放状态:

在React的生态圈中,最著名的状态管理工具当属Redux。Redux不仅能够帮助你集中管理数据,还能强制使用者对于数据的修改操作进行统一规范。

你可以将Redux想象为银行,你并不能直接进入自己的账户然后修改账户中的余额,你需要通过前台来发出一系列的指令控制操作。Redux也是这样,并不允许你直接修改全局状态,你必须将Actions传入Reducers,然后由这些纯函数来返回新的状态值。这样整个系统的流程就清晰可见并且可回溯:

同样的,我们这里也推荐一些Redux 教程,以及免费的Redux作者的系列分享。

Week 5: Building APIs With GraphQL

现在我们已经讨论了很多客户端开发中所需要的知识栈,不过对于有追求的前端开发者而言这远远不够。不谈整个Node生态社区,我们还需要注意这个服务端的数据是如何传递到客户端的。这里要着重介绍下GraphQL,一个由Facebook出品的可以替代传统的REST
API的标准。

传统的REST API会通过暴露多个REST路由来允许用户访问些数据集,譬如/api/posts,/api/comments。而GraphQL将多个后端的REST接口整合为单个端点,允许用户从单个端点获取所需要的数据。

Beyond & Next Steps

章节所限,在我的调查里也提到Vue与Elm都是很优秀的框架,推荐有兴趣的朋友可以了解下。另外,在学完了这些基础知识,你还可以了解以下几个方面:

  • JavaScript on the server (Node, Express…)
  • JavaScript testing (Jest, Enzyme…)
  • Build tools (Webpack…)
  • Type systems (TypeScript, Flow…)
  • Dealing with CSS in your JavaScript apps (CSS Modules, Styled Components…)
  • JavaScript for mobile apps (React Native…)
  • JavaScript for desktop apps (Electron…)

作者:王下邀月熊_Chevalier

来源:51CTO

时间: 2024-09-16 06:14:23

专治前端焦虑的学习方案的相关文章

Android 7.1 内置“一键清理内存”功能,专治流氓勒索软件

本文讲的是Android 7.1 内置"一键清理内存"功能,专治流氓勒索软件, 在打击Android恶意勒索软件上,Google最近迈出了一大步,它推出的一项隐藏新功能,让用户在中招后还能保持对设备的控制权. XDA论坛的开发者发现,Android 7.1新增了一个紧急模式,可以通过连续四次短按后退按钮来触发.当激活紧急模式后,设备会回到桌面界面,关闭所有正在运行的应用程序,不受它们的锁定限制. 紧急模式连续短按的最大触发时间是0.3秒,也就是说,一秒内大概要按下四次后退按钮才能触发,

IPO核查火了荣大快印:富凯大厦专治各种不服

@李有材:盼望着,盼望着,自查的日期近了,荣大像过节一般热闹起来.投资银行家们都像刚睡醒的样子,欣欣然张开了眼.山朗润起来了,水涨起来了,太阳的脸红起来了.中信.国信.广发.平安.招商,你不让我,我不让你,都开满了花赶趟儿.红的像火,粉的像霞,白的像雪.闭了眼,树上仿佛已经满是发行批文.@劳阿毛:富凯大厦刷卡门一开一合,就像把威猛锋利的大铡刀,专治各种不服,牛人们在门外都夹包气宇轩昂,大佬范儿十足,大门咔嚓一夹,锐气全无,提包碎步含胸低头,瞬间变成了收电费的--@压力下的从容与

起底世界最强黑客:专治西方政客

最近一段时间,俄罗斯黑客有点"红". 起底世界最强黑客:专治西方政客 责任编辑:editor007 |  2016-09-20 20:23:42 本文摘自:第一财经日报   最近一段时间,俄罗斯黑客有点"红". 早些时候,他们入侵了美国民主党全国委员会(DNC)的计算机.世界反兴奋剂机构(WADA)的行政管理系统,并涉嫌泄露美国前国务卿鲍威尔的个人电子邮件和里约奥运运动员的健康档案,在国际上引发轩然大波. 网络安全专家与情报官员透露,两支高水平的黑客队伍正在克里姆林

程序员分享前端初学者入门学习顺序

现在的web前端非常的火,很多小伙伴想学习又找不到方法,也没有切入点,而且前端看起来简单其实复杂程度不低于任何一门后端语言,在不断接触和学习前端中很多初学者很难理清楚这个体系的结构,以下我们来了解下前端如何入门. html和css学习 1.HTML常用标签 语言是什么 .Web前端开发语言. HTML超文本标记语言 . 网页主体结构 .常用标签.超链接(a标签).Img图片标签. 2.盒子模型 初探Div盒子模型 .css样式. 简单css样式.盒子模型Border边框讲解.盒子模型外边距盒子模

网站建设设计前端开发需要学习html和div+css

1.熟练掌握html基本知识,包括每个标签的用法等.这个建议网上找个视频看看,因为也不会太长的,这个是前端开发的信息结构. 2.熟练掌握div+css基本知识,这个东西基本就是前端的基础了,它可以将你写的东西直观的展示出效果给你看,所以须熟练掌握.而且个人由于js的不行,格外的喜欢div+css,因为不管你做了什么,瞬间就可以看到效果,对调试.修改有很大的帮助,这个就是前端开发的显示效果. 3.我觉得这里应该是至少掌握一个后台的内容管理系统,比如现在流行的phpcms v9.dede.帝国.wo

专家教你如何有效的学习Drupal - Drupal问答

问:请教各位关于drupal整个学习的一个过程? "在学习一样新鲜事物的时候,往往会发现其中好多方面或是分支知识储备不够,然后转去学习别的知识点.比较困惑,就想请教各位关于drupal是一个怎么样的学习过程? 目标:能够完成普通的企业站和一些简单需求的网站." 以下是各位在Drupal有一定影响力的Drupaler的回答: ----------分隔符------------– 于志成 喜欢折腾,爱好技术,宅,认真,懒 "首先要看你如何定位你的学习目标,比如你的目标是做简单的网

分享专升本教育网站营销推广方案

今年六月时,看到一些教育培训网站都赚个满盆,觉得教育网站很有发展潜力,就打算和朋友一起做了个专升本的培训网站,但要搞教育培训网站也不太容易,首先就算网站排名上去了,有人来找你了,你没资源给人培训或者需求,那也没用,自己组建一个培训学校明显是不可能的,就四处找关系,看看有没有相关的资源,问了好几十个朋友,没想到还真有人认识某专升本培训学校的负责人,过去看了看学校,一般般,招生人数和师资资源都挺一般的,他自己也正愁如何多拉人,多赚钱,就和我们出去吃个饭,喝点酒,谈谈网站建设的目的和发展前景,他觉得挺

Mac专治英语学渣APP哪个好

  相信每个人不管是出于工作.学习还是生活的需求,都多多少少会用到电子辞典. Mac 上的辞典 app 并不多,由网易出品的有道词典想必是国内用户相对熟悉的选择.很有可能,你的手机上也已经装着它的移动版本. 最近,许久没动静的有道词典 Mac 版终于发布了 2.0 版本.借此机会,AppSo 给大家介绍这个全新的版本到底表现如何. 全新的界面 对 Mac 版有道词典 2.0 的最直观感受,自然落在了界面上.相比 1.0 版本古老的界面,2.0 终于针对 Yosemite 及之后的 OS X 做了

Java学习路线图,专为新手定制的学习计划建议

怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA). J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它是三者的基础,属于桌面级应用开发,这部分如果学得好很容易拓展J2EE和J2ME. J2ME,The Micro Edition of the Java 2 Platform.主要用于嵌入式J