为什么前端要使用Node开发
前不久和一个.net同事吃火锅,临近结束提到了前端的技术框架,这位同事也会前端,但是在他印象里前端似乎依旧是传统的运行于浏览器进行开发;任凭我怎么说,前端已经是通过node进行开发并且现在各大公司已经很基本的大规模使用了,他依旧不信或者说不能够理解node开发在前端的意义, 于是乎我想整理一篇文章告诉他,前端是怎么使用node开发的;
一、传统的JavaScript
传统的js是运行在浏览器上的,因为浏览器内核分为两个部分:
渲染引擎---复制渲染HTML和CSS,
JavaScript 引擎---负责运行 JavaScript, Chrome 使用的 JavaScript 引擎是 V8,它的速度非常快且性能好。
二、什么是Node.js?
官网上对其特点描述为:
1. 它是一个Javascript运行环境
2. 依赖于Chrome V8引擎进行代码解释
3. 事件驱动
4. 非阻塞I/O
5. 轻量、可伸缩,适于实时数据交互应用
6. 单进程,单线程
相对于传统的JavaScript来说,Node.js 是一个运行在服务端的框架,它的底层就使用了 V8 引擎。我们知道 Apache + PHP 以及 Java 的 Servlet 都可以用来开发动态网页,Node.js 的作用与他们类似,只不过是使用 JavaScript 来开发,它大大提升了开发的性能以及便利。使用node开发还可以使用配套的npm包管理工具:
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
因为node本身就是一个服务端的框架,对于一些简单的项目,我们可以不需要后端配合,直接用node进行数据库的增删改查,比如下面的代码就是通过使用express进行开发的:
通过配置接口我就可以实现原来需要后端配合做的事情了,大大方便了我们对一些简单场景下的应用;
三、Node开发的缺陷:
虽然node开发已经能够给我们带来非常棒的体验,那么它存在什么样的先天不足呢,下面是从网上查找的资料:
1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
2. 只支持单核CPU,不能充分利用CPU
3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
原因:单进程,单线程
解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
(2)开多个进程监听同一个端口,使用cluster模块;
4. 开源组件库质量参差不齐,更新快,向下不兼容
5. Debug不方便,错误没有stack trace
今天是大年初一,对于今年的规划当然是希望有机会进入一个非常棒的团队学习;大楼之下,我自知渺小,顶峰虽然唾手不可及,也要努力加油!