初探Nodeschool

前言

Nodeschool是一个非常好的学习JavaScript和Node的平台,它在里面提供了大量的教程,通过做任务的方式让学习者理解某些概念,并且提供参考答案供自查(github源码的solution文件下),建议对基础概念模糊的同学可以去尝试一下这些任务。

learnyounode(node基础)

前言

这是nodeschool的第一个任务,它会让你接触node最基础的几个模块:fs、http、url、net等,也会让你了解node模块化和流的一些概念。

  1. HELLO WORLD(起手式)

第一个任务,主要是让学习者熟悉环境

  1. BABY STEPS(process.argv)

这个任务主要是让学习者学习process这个对象,平常我们通过node在命令行里执行各种命令的时候少不了它,而process的argv属性又是重中之重,它存储着外界输入进来的值。
学习者将会通过一个求和的任务熟悉process.argv。

  1. MY FIRST I/O!(fs.readFileSync)

在这个任务里,学习者将会接触到fs这个模块,以及它的readFileSync方法用来同步读取文件内容。
学习者将会通过打印一个文件中内容行数的任务来熟悉fs.readFileSync。

  1. MY FIRST ASYNC I/O!(fs.readFile)

和上一个任务相似,学习者在这个任务里将使用fs模块的异步读取文件方法readFile完成任务。

  1. FILTERED LS(fs.readdir)

这个任务还是和文件有关,只不过不是读取文件了,而是过滤文件名,fs模块的readdir方法将会帮助我们获取文件名,至于过滤拓展名,可能需要使用path模块的extname方法。
学习者将会通过打印出指定目录下的文件列表,并且以特定的文件名扩展名来过滤这个列表来熟悉fs.readdir

  1. MAKE IT MODULAR(模块化)

node的模块化做的很好,export和import是必备的知识。
这个任务我认为是有点难度的,因为你需要创建两个文件:一个封装好的模块和一个使用者,并且所有逻辑都必须封装的非常好,暴露出来的API也对使用者友好才能通过这个任务。
学习者需要在使用者里定义回调函数,在模块里定义执行逻辑来熟悉模块化。

  1. HTTP CLIENT(http客户端)

从这个任务开始,我们将会学习node的另一个核心模块:http
学习者将会通过起一个简单的http客户端来熟悉http模块的get方法。

  1. HTTP COLLECT(http流和管道)

这个任务是上一个任务的增强版,它揭示了node中很重要的一个概念:流,这个概念其实是借鉴于Unix,有输入流和输出流,用于程序各个部分间的协作通信,而衍生出的管道概念是对流进行一些特定操作的工具。
学习者将会通过收集服务器所返回的数据流和pipe方法处理它。可能会用到concat-stream模块收集所有流。

  1. JUGGLING ASYNC(异步http)

这个任务同样是上一个任务的增强版,它增加了异步概念,可以使用回调或者promise来处理这个异步情况。

  1. TIME SERVER(tcp与net)

这个任务,我们将会学习net模块(tcp),它的使用方法和http模块类似,不同点主要在于tcp是通过socket通信的。
学习者将会通过使用net模块写入当前的事件来熟悉net模块和tcp服务器。

  1. HTTP FILE SERVER(http与fs)

在这个任务中,我们将把http模块和文件模块结合使用,文件在node中同样可以以流形式存在(使用fs.createReadStream),所以我们将用流来连接这两个看似毫不相干的模块。
学习者将会通过读入文件流,然后将文件流通过管道输出到http流来体会流的强大作用。

  1. HTTP UPPERCASERER(http服务器)

这个任务的重点还是流,只不过具体形式是通过起一个http服务器来让学习者更加熟悉流的概念。
学习者将会通过http.createServer起一个简单的http服务器,并且通过管道把流中的数据转换成大写形式来进一步熟悉流在node中的应用。

  1. HTTP JSON API SERVER(http restful api)

最后一个任务是让我们做一个restful风格的http服务器,即使用json格式的api进行前后端通信。
学习者会用到url模块解析请求报文的url以及pathname,根据不同的请求路由返回不一样的响应报文。

stream-adventure(node中的流)

前言

流是Node中的核心概念,用于协助各个子程序间的合作,这个概念最初出自Unix编程,所以相应的,Node中的流也有管道、可读流、可写流等概念。

  1. BEEP BOOP(起手式)

  2. MEET PIPE(管道)

  3. INPUT OUTPUT(I/O流)

  4. TRANSFORM(操作流数据)

  5. LINES(管线)

  6. CONCAT(汇入流)

  7. HTTP SERVER(HTTP服务端流)

  8. HTTP CLIENT(HTTP客户端流)

  9. WEBSOCKETS(websocket流)

  10. HTML STREAM(文本混合流)

  11. DUPLEXER(双工流)

  12. DUPLEXER REDUX(操作双工流)

  13. COMBINER(复杂流合并)

  14. CRYPT(加密解密流)

  15. SECRETZ(压缩与哈希流以及解析流)

learnyoubash(Unix shell)

前言

Unix的shell命令是一种专用语言,可以让用户自定义任务。

任务

  1. HELLO WORLD(起手式)

  2. VARIABLES(shell变量)

  3. POSITIONAL PARAMETERS(shell位置参数)

  4. ARRAYS(shell数组)

  5. SHELL EXPANSIONS(shell拓展)

  6. STREAMS PIPES AND LISTS(Unix流、管道管线)

  7. IF CONDITIONAL STATEMENT(shell if判断)

  8. CASE CONDITIONAL STATEMENT(shell case判断)

  9. LOOPS(shell循环)

  10. FUNCTIONS(shell函数)

  11. DEBUGGING(shell调试)

regex-adventure(正则表达式)

前言

正则由Unix和Perl发展过来,具有强大的专用语言特性,是字符串匹配的好帮手,让我们看看js中如何使用正则表达式

  1. LITERALLY(直接匹配)

  2. ANCHOR START(开始锚点)

  3. ANCHOR END(结束锚点)

  4. CHARACTER CLASS(字符类别)

  5. NEGATED CHARACTER CLASS(字符类别取反)

  6. META(.匹配规则)

  7. QUANTIFIER(*?+匹配规则)

  8. SPLIT(结合split分割字符串)

  9. CAPTURE(exec捕获)

  10. CAPTURE BREAKWOR(\b边界)

  11. ALTERATION(|逻辑或)

  12. QUANTIFIED GROUP({}指定匹配数量)

  13. QUOTES(/g标志位)

  14. BLINK($1...分组)

function-programming(函数式编程)

前言

JS中的函数是一等公民,可以作为参数传递,也可以作为结果返回,自然可以进行函数式编程,Nodeschool提供了一套任务,可以帮助我们理解JS的函数式编程的基础概念。

  1. Hello World(起手式)

  2. Higher Order Functions(高阶函数)

  3. Basic: Map(映射)

  4. Basic: Filter(过滤)

  5. Basic: Every Some(所有与存在)

  6. Basic: Reduce(归纳)

  7. Basic: Recursion(递归)

  8. Basic: Call(函数调用)

  9. Partial Application without Bind(apply调用)

  10. Partial Application with Bind(bind调用)

  11. Implement Map with Reduce(用reduce实现map)

  12. Function Spies(函数间谍)

  13. Blocking Event Loop(事件循环)

  14. Trampoline(尾调用优化)

  15. Async Loops(异步)

  16. Recursion(高级递归)

  17. Currying(柯里化)

  18. Function Call(call高级)

promise-it-wont-hurt(promise特性)

前言

promise是es6最重要的特性之一,对前端控制异步流程非常有帮助。

  1. warm_up(认识异步)
  2. fulfill_a_promise(promise的resolve)
  3. reject_a_promise(promise的reject)
  4. to_reject_or_not_to_reject(同步转promise)
  5. always_async(promise永远异步)
  6. shortcuts(Promise.resolve和Promise.reject)
  7. promise_after_promise(promise链式调用)
  8. values_and_promises(promise混合同步值)
  9. throw_an_error(promise处理错误)
  10. an_important_rule(promise的catch)
  11. multiple_promises(模仿Promise.all)
  12. fetch_json(q-io/http与promise版ajax)
  13. do_some_work(综合应用promise)

esnext-generation和learn-generators(迭代器和生成器)

前言

迭代器和生成器是ES6借鉴python的高级语法,它们一个在操作数据结构(数组、对象)上,一个在异步操作上大放异彩,作为进阶JS知识的铺垫是非常有帮助的

  1. introduction-to-iterators(造一个简单迭代器)

  2. built-in-iterators(使用迭代器)

  3. advanced-iterables(造一个高级迭代器)

  4. introduction-to-generators(使用生成器)

  5. passing-args-to-yield(修改生成器内部状态)

  6. RUN STOP RUN(用生成器替代迭代器)

  7. GENERATOR ITERATOR(用生成器替代递归)

  8. DELEGATING GENERATORS(生成器委托)

  9. CATCH ERROR!(生成器的异常处理)

  10. LOOK SYNC. DO ASYNC(异步转同步)

  11. LOOK SYNC. MAKE PROMISE(模仿async/await)

perfschool-playground(性能优化)

前言

前端工程师们在设计之初往往要考虑性能问题,而node提供了很多工具帮助我们优化性能,但是要切记:过早优化是万恶之源~

  1. USING THE PAGESPEED API(衡量性能)

  2. USING THE WEBPAGETEST API(精准衡量性能)

  3. DEFER ALL THE THINGS(懒加载)

  4. ENFORCING A PERFORMANCE BUDGET(简洁化)

  5. REMOVING UNUSED CSS(精简CSS)

  6. INLINING IMAGES(图片转Base64)

  7. INLINING CRITICAL CSS(内嵌样式)

  8. USING A FONT LOADER(可选加载字体)

  9. CREATING SPRITESHEETS(雪碧图)

  10. OPTIMIZING IMAGES(压缩图片)

lololodash(lodash入门)

前言

lodash是js非常重要的一个工具库,由undersocore发展而来,里面内置了很多强大的函数工具,主要针对集合、数组、对象。

  1. Getting Started(_.filter)

一个简单的任务,直接调用它的filter函数就能完成

  1. Sort Me(_.sortBy)
  2. In Every Case(_.forEach)
  3. Everyone Is Min(.every和.some)
  4. Chain Mail(_.chain与链式调用)
  5. Count the Comments(_.groupBy)
  6. Give Me an Overview(_.reduce)
  7. Analyze(_.filter综合使用)
  8. Start templating(_.template)

test-anything(js测试)

前言

测试驱动开发是一种软件开发方法,它是一种良好的设计,前端如今也可以通过测试来保障软件质量。

  1. LOG IT OUT(console.log大法)

  2. TELL ME WHAT IS WRONG(assert断言)

  3. TAPE IT TOGETHER(tape模块批量测试)

  4. CALL ME MAYBE(tape循环回调测试)

  5. TO ERR IS HUMAN, TO PURR FELIN(综合测试)

bug-clinic(node调试)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,378评论 25 707
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,297评论 0 6
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,607评论 2 41
  • 说来不可思议,梨枝还记得第一次到江城的时候。记得迈出火车站的大门时把她打回来的热浪,仿佛一堵无形的墙,炽热的,带着...
    只有我存在的世界阅读 307评论 0 0
  • 搭建环境 Android studio 2.2+下载CMake 和NDK 工具 新建cpp 目录 默认创建的是jn...
    lixinxin阅读 6,751评论 0 7