不爱哇哈哈 發表於 2020-8-1 11:20:00

为什么 2020 还要学 Node.js

<blockquote>
<p>极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node</p>
<p>本文更佳阅读体验 https://www.yuque.com/sunluyong/node</p>
</blockquote>
<p></p>
<h2 id="前言">前言</h2>
<p>前些日子刷知乎看到个 2019 年初的问题&nbsp;2019年nodejs凉了吗?凉到什么程度了?才看到问题的时候吃了一惊,是不是我在的公司大量使用 Node.js 让我有了幸存者偏差,前端社区已经沧海桑田了么?读了大部分答案不禁有些感慨,写一下自己的理解<br></p>
<p></p>
<h3 id="nodejs-从来不是为取代-java-而生的">Node.js 从来不是为取代 Java 而生的</h3>
<p>很多同学在纠结每个公司必然使用 Java、有后端,而觉得 Node.js 到了穷途末路,这样的担忧大可不必,因为 Node.js 从来不是为了取代 Java 而生的,就像 Nginx 不是为了取代 Apache 一样<br><br>
<br>从2005 年 Google 使用 Ajax 为 map 带来全新的体验开始,前端不再是后端、设计师的附属角色,随着前端创造的价值越来越大,前端进入了一个尴尬期<br></p>
<ol>
<li>前端开发链路越来越复杂,不再是有文本编辑器就可以开发,需要大量的开发配套工具,包括专门的 IDE,但这些只能使用服务器语言开发</li>
<li>业务逻辑越来越复杂,使用的服务需要组装、转化之后才能交给客户端使用,后端同学来开发需要大量的时间和前端约定数据的视图模型、封装成业务接口</li>
<li>前端主导的内部平台甚至专门服务前端的平台,还是只能让后端写服务,前端写界面</li>
</ol>
<p><br>两个原因让这种现象难以为继</p>
<ol>
<li>后端理解前端的需求成本太高</li>
<li>后端解决前端的问题主观能动性不足</li>
</ol>
<p><br>能力越大,责任越大,前端的问题本应该由前端来专业、高效解决,这些都是 Node.js 存在的理由——一门对前端开发者极其友好的服务器语言,在处理 Web 场景(IO 密集)有得天独厚的优势<br><br>
<br>和 Node.js 一样,前端或者所谓全栈也从来不是为了取代谁,只是为了为客户提供专业的体验<br></p>
<blockquote>
<p>很开心看到我们公司的前端团队已经改名为体验技术团队,在 Web、Server、App 等全端解决用户体验问题</p>
</blockquote>
<p></p>
<h3 id="nodejs-并不难学收益反而很大">Node.js 并不难学,收益反而很大</h3>
<p>很多同学会因为自己的公司没有使用 Node.js 而放弃学习 Node.js,这是非常可惜的,毕竟 Node.js 对于前端的上手成本实在是太低了,身为前端已经会了 Node.js 的语法,如果是计算机相关专业出身,对 Web、Server 本身有一定程度的认知,一个月时间就可以熟练使用 Node.js 编写一些命令行工具、Web 应用,辅助日常的工作<br><br>
<br>使用 Node.js 并不意味着一定要上线一个 Node.js 的 Web 应用,甚至把数据库操作都处理了,能够解决本地开发问题,线上页面的模板渲染或者数据模型转换(BFF)都是了不起的事情<br><br>
<br>前端学习 Node.js 无论对个人技能还是公司业务,投入产出比不是一般的高,在 Node.js 已经是 BAT 大厂前端必备技能的念头,最起码跳槽还能写到简历上,何乐而不为<br></p>
<p></p>
<h2 id="nodejs-可以做什么">Node.js 可以做什么</h2>
<ol>
<li>前端提效、工程工具:随着前端复杂性增加,现在几乎没有裸写前端代码机会了,需要本地开发套件、发布包工具,前端的问题自然是前端来解决最合理</li>
<li>BFF:Back-end For Front-end,尤其是 serverless 的兴起,仅仅是后端 DO 转 VO 就有很大前端想象空间</li>
<li>客户端产品:Electron 让前端也可以写一些复杂的跨平台客户端应用,我们最熟悉的应该是 VS code</li>
<li>Web 应用:这也是 Node 诞生要解决的主要问题,相对于多线程,Node.js 异步 I/O 是更理想的解决方案,现在也有了 egg、nest&nbsp;等优秀的企业级 web 框架,前端可以轻松开发 web 应用</li>
</ol>
<p><br>当然上面的几个事情如果前端学习 python、php 等语言也可以做,但持续学习一个并不会经常用的语言需要一定成本,一门语言的掌握除了学习基本语法,还需要关注社区的发展,Node 使用 JavaScript 对前端无疑更友好</p>
<p>可以通过问卷调查看看 2020 开发者在用 Node.js 做什么&nbsp;2020 年 Node.js 开发者调查报告</p>
<p></p>
<h2 id="deno-是不是更好的选择">deno 是不是更好的选择?</h2>
<p>Node.js 作者 Ryan Dahl 在 2020 年 5 月发布了 deno 1.0 版本,引起了很多 Node.js 初学者的焦虑:<em>Node.js 是不是要凉了,该去学 deno?</em></p>
<p>Ryan 在&nbsp;JS Conf Berlin 上总结了 Node.js 的 7 个设计失误</p>
<ol>
<li>没有坚持使用 Promise,这个问题现在影响其实并不大了</li>
<li>安全问题:作者直说当时要是好好想想 Node.js 安全性可以更好,没有做太多说明</li>
<li>构建问题:开始 V8 用的 GPY 构建,Node.js 就跟着用了,没想到后来 V8 换成了 GN,结果只有 Node.js 用 GPY 了</li>
<li>package.json:npm 变成了中心化的模块管理仓库,package.json 里面的信息太多了</li>
<li>node_modules:这个大家都懂</li>
<li>允许不带 <code>.js</code>&nbsp;拓展名 require('module') ,对模块加载器有写负担(需要分析 .js .json .node),和浏览器也不兼容</li>
<li>默认引用 <code>index.js</code>&nbsp;有了 package.json 的 main 字段后这个设计没意义</li>
</ol>
<p><br>在JS Conf Berlin 上 Ryan 也提了一下只有一个月大的 deno 设计目标,结合上 1.0 发布后 deno 主要差异化特性有</p>
<ol>
<li>最大相同点是依然基于 V8</li>
<li>安全控制增强,网络/文件的读写权限需要额外声明</li>
<li>内置 TS 编译器,支持 webassembly</li>
<li>没有 npm、node_module、package.json</li>
<li>内置了很多常见工具:bundle、fmt、test、lint 等</li>
</ol>
<p><br>语法层面特性注定会被弥补,不如 top-level await,也就是不用在 async 里面使用 await,Node.js v14 已经支持了,Promise、回调等很大层面上在 Node.js 也不再是问题。至于拓展名 .js 和 index.js 可能影响的只有强迫症<br><br>
<br>deno 在安全性上的提升还是很值得称道的,内置 TS runtime 和大量常用工具失选择困难症的福音,但这也等于没了选择,百家争鸣对一个生态来说并不一定是坏事<br><br>
<br>node_modules 绝对是 Node.js 中令人遗憾的设计,但 npm、package.json 并一定不是,在 deno 中包的引用</p>
<pre><code class="language-javascript">import * as log from "https://deno.land/std/log/mod.ts";
</code></pre>
<p>包通过网络地址下载到缓存文件夹,虽说没了 node_modules 文件夹,但在一定程度上只是换了一个路径,npm 中心化部署,但很好的保证了稳定性,而且 npm 也有去中心化部署的方式,比如大家熟知的 cnpm<br><br>
<br>Deno 是对 Node.js 的升级,在很多特性上让人眼前一亮,但 Node.js 出现的时机太好了,十年间形成了自己的开发生态,deno 同样依赖 V8 意味着在性能上并没有革命性的增强,对两者有些个人看法</p>
<ol>
<li>deno 会和 IO.js 一样敦促 Node.js 在安全性、新特性(Web Assembly 等)等快速增强</li>
<li>Node.js 已经支持了 ES module,在未来说不定会支持 TS</li>
<li>deno 会吸引很多开发者使用,但很难替代 Node.js</li>
</ol>
<p></p>
<h2 id="为什么现在出-nodejs-教程">为什么现在出 Node.js 教程</h2>
<blockquote>
<p>教程地址:https://www.yuque.com/sunluyong/node</p>
</blockquote>
<p>相信朴老师的《深入浅出 NodeJS》是不少同学早期学习 Node.js 的启蒙读物,个人在 2014 年左右学习 Node.js 读的也是这本书。书的质量非常的高,朴老师确实也做到了深入浅出,让我不但理解、入门了 Node.js,更是帮我打开了后端世界的大门,至今在工作中仍然大量的使用。<br><br>
<br>这本书唯一的问题就是 2013 年出版,已经 2020 年了还没有出第二版。这几年间不只是 Node.js 本身已经从书中的 v0.x 升级到了v14,JavaScript 社区也发生了翻天覆地的变化,书中介绍的很多技巧已经通过语言本身的优化解决。<br><br>
<br>还有一个不是问题的问题,朴老师在很多知识的介绍上还是非常深入的,篇幅也比较大,个人感觉对初学者还是有一些门槛,在有一定基础后去阅读反而收益更大,会劝退一些有兴趣学习的同学。<br><br>
<br>之前兼职做过一些前端培训,最开心的就是看到同学通过我的课程学到了知识,找到了工作。希望通过个人的理解,配合两个简单的实践,帮助到更多的同学喜欢上 Node.js,在 Web 开发中找到价值,不再纠结哪个是最好的语言。<br></p>
<blockquote>
<p>教程在编写的时候 Node.js 最新版本是 v14,后面的文档中不再赘述</p>
</blockquote>
<p></p>
<h2 id="教程结构">教程结构</h2>
<blockquote>
<p>教程地址:https://www.yuque.com/sunluyong/node</p>
</blockquote>
<p>教程可以分为上下两部分,前四章主要侧重 Node.js 基础原理 &amp; 核心 API 使用,不看教程完全可以按照官方 API 学习,腾讯的 Node.js 中文网翻译质量也很高。但 API 介绍如同 JavaScript 犀牛书,虽说面面俱到,但没有按照学习顺序组织、而且内容量大,老手查资料很方便,新人上手按照 API 学习成本高。教程按照新人学习顺序组织了一些重要 Node.js 知识和 API 介绍,删减了使用频率低或者需要深入应用才能掌握的知识,相关内容在后面的实战章节再循序渐进、娓娓道来</p>
<p>从第五章开始主要侧重 Web 开发和前端工程,偏重 Node.js 在前端日常工作中的实际应用,因此每个章节都穿插了一个实战项目,让大家可以更加了解 Node.js 在前端领域的重要作用,学习后可以使用 Node.js 解决工作中遇到的实际问题<br><br>
<br>这不是一个 Node.js 全面的教程,内容深度也远远不及朴灵老师的《深入浅出 Node.js》,如果可以帮助前端新人从上手到熟练使用 Node.js 就善莫大焉</p>
<p></p>
<h2 id="前置知识">前置知识</h2>
<p>为了控制教程篇幅,降低阅读成本,教程假定学习者了解一些 JavaScript 前置知识,教程中对使用的 ES6 语法不做讲解</p>
<ol>
<li>JavaScript 基础知识</li>
<li>ES6&nbsp;常用语法
<ol>
<li>let、const</li>
<li>箭头函数</li>
<li>Promise、async/await</li>
<li>变量解构</li>
<li>扩展运算符</li>
<li>字符串模板</li>
</ol>
</li>
</ol>
<p>教程中的示例运行需要安装 Node.js 运行环境,可以在 Node.js 官网首页下载安装,也可以进入下载页面使用更多工具安装,安装完成后无需特殊配置,安装完成后可以按照官网 Getting Started 教程两分钟体验 Node.js Hello World</p>
<p>在开始学习第五章 Web 应用之前最好对 HTTP 协议有一个最基础的概念,可以通过&nbsp;半小时认识 HTTP 协议&nbsp;做最开始的了解<br>
</p>
<h2 id="附">附</h2>
<ol>
<li>Node.js 发展史</li>
<li>Design Mistakes in Node.pdf</li>
</ol>
<blockquote>
<p>因为英文水平有限,写教程过程中大量参考腾讯 Node.js 文档中文翻译,真诚的表示感谢,希望这份教程也可以帮助一些学习 Node.js 的同学</p>
</blockquote>
<p>更多技术交流可以关注公众号或者添加微信好友【undefinedStyle】</p>
<p><img src="https://img2020.cnblogs.com/blog/349217/202008/349217-20200801111726639-1720416953.png" alt="" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/dolphinX/p/13413893.html
頁: [1]
查看完整版本: 为什么 2020 还要学 Node.js