让你的 Node.js 应用跑得更快的 10 个技巧
2016-01-21 16:27
633 查看
Node.js 受益于它的事件驱动和异步的特征,已经很快了。但是,在现代网络中只是快是不行的。如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异常的快。本文将介绍 10 条,经过检验得知可大大提高 Node 应用的技巧。废话不多说,让我们逐条来看看。1. 并行创建 Web 应用的时候,你可能要多次调用内部 API 来获取各种数据。比如说,假设在 Dashboard 页面上,你要执行下面这几个调用:用户信息 -getUserProfile(). 当前活动 -getRecentActivity(). 订阅内容 -getSubscriptions(). 通知内容 -getNotifications(). | 开源中国匿名会员 翻译于 1年前 4人顶 顶 翻译的不错哦! |
为了拿到这些信息,你应该会为每个方法创建独立的中间件,然后将它们链接到 Dashboard 路由上。不过问题是,这些方法的执行是线性的,上一个没结束之前下一个不会开始。可行解决案是并行调用它们。 如你所知由于异步性,Node.js 非常擅长并行调用多个方法。我们不能暴殄天物。我上面提到的那些方法没有依赖性,所以我们可以并行执行它们。这样我们可以削减中间件数量,大幅提高速度。 我们可以用 async.js 来处理并行,它是一个专门用来调教 JavaScript 异步的 Node 模块。下面代码演示怎样用 async.js 并行调用多个方法的: ? | 开源中国匿名会员 翻译于 1年前 4人顶 顶 翻译的不错哦! |
2. 异步根据设计 Node.js 是单线程的。基于这点,同步代码会堵塞整个应用。比如说,多数的文件系统 API 都有它们的同步版本。下面代码演示了文件读取的同步和异步两种操作:? | 开源中国匿名会员 翻译于 1年前 4人顶 顶 翻译的不错哦! |
3. 缓存如果你用到一些不经常变化的数据,你应该把它们缓存起来,改善性能。比如说,下面的代码是获取最新帖子并显示的例子:? ? | 开源中国匿名会员 翻译于 1年前 4人顶 顶 翻译的不错哦! |
4. gzip 压缩开启 gzip 压缩对你的 Web 应用会产生巨大影响。当一个 gzip 压缩浏览器请求某些资源的时候,服务器会在响应返回给浏览器之前进行压缩。如果你不用 gzip 压缩你的静态资源,浏览器拿到它们可能会花费更长时间。在 Express 应用中,我们可以用内建 express.static() 中间件来处理静态内容。此外,还可以用 compression 中间件压缩和处理静态内容。下面是使用例: ? | 开源中国匿名会员 翻译于 1年前 3人顶 顶 翻译的不错哦! |
5. 如果可以,在用客户端渲染现在有超多功能强劲的客户端 MVC/MVVM 框架,比如说 AngularJS, Ember, Meteor, 等等,构建一个单页面应用变得非常简单。基本上,你只要公开一个 API,返回 JSON 响应给客户端就可以了,而不需要在服务端渲染页面。在客户端,你可以用框架来组织 JSON 然后把它们显示在 UI 上。服务端只发送 JSON 响应可以节省带宽,改善性能,因为你不需要在每个响应里面都返回布局标记了,对吧,你只需要返回纯 JSON,然后在客户端渲染它们。看下我的这个教程,它是关于怎样用 Express 4 公开一个 RESTful APIs的。我还写了另一篇教程,演示了怎样把这些 APIs 和 AngularJS 结合起来。 | 开源中国匿名会员 翻译于 1年前 3人顶 顶 翻译的不错哦! |
6. 不要在 Sessions 存储太多数据典型的 Express 页面应用, Session 数据默认是保存在内存中的。当你把太多数据保存在 Session 的时候,会导致服务器开销显著增大。所以,要么你切换到别的储存方式来保存 Session 数据,要么尽量减少存储在 Session 中的数据量。比如说,当用户登录到你的应用的时候,你可以只在 Session 中保存他们的 ID 而不是整个用户数据对象。还有,对于那些你能够从 id 拿到对象的查询,你应该会喜欢用 MongoDB 或者 Redis 来存储 session 数据。 | 开源中国匿名会员 翻译于 1年前 3人顶 顶 翻译的不错哦! |
7. 优化查询假设你有个博客,你要在主页上显示最新帖子。你可能会通过 Mongoose 这样取数据:? ? | 开源中国匿名会员 翻译于 1年前 3人顶 顶 翻译的不错哦! |
8. 用标准的 V8 方法集合上的一些操作,比如 map,reduce,和 forEach 不一定支持所有浏览器。我们可以通过前台的库解决部分浏览器兼容性问题。但对于 Node.js,你要确切知道 Google 的 V8 JavaScript 引擎支持哪些操作。这样,你就可以在服务端直接用这些内建方法来操作集合了。9. 在 Node 前面用 NginxNginx 是个微小型轻量 Web 服务器,用它可以降低你的 Node.js 服务器的负载。你可以把静态资源配置到 nginx 上,而不是在 Node 上。你可以在 nginx 上用 gzip 压缩响应,让所有的响应都变得更小。所以,如果你有个正在营运的产品,我觉得你应该会想用 nginx 来改善运行速度的。 | 开源中国匿名会员 翻译于 1年前 3人顶 顶 翻译的不错哦! |
10. 打包 JavaScript最后,你还可以大大提高页面应用速度,通过把多个 JS 文件打包。当浏览器在页面渲染中碰到 <script> 元素的时候会被堵塞,直到拿到这个脚本才继续运行(除非设置了异步属性)。比如,如果你的页面有五个 JavaScript 文件,浏览器会发出五个独立的 HTTP 请求来获取他们。如果把这五个文件压缩打包成一个,整体性能将可以大幅提升。CSS 文件也是一样。你可以用诸如 Grunt/Gulp 这样的编译工具来打包你的资源文件。结论上面 10 条技巧肯定可以提高你的 Web 应用的速度的。不过,我知道还有改善和优化的空间。如果你有任何改善性能的技巧的话,在回复里告诉我。谢谢阅读! |
相关文章推荐
- node相关
- 猴子补丁 Monkey-patch(重写方法)
- PNG图像RGBA转索引色
- 论dts中的of_platform_populate如何选择性加载device node为platform device
- NodeJS - Express4.0错误:Cannot read property &#39;Store&#39; of undefined
- 19. Remove Nth Node From End of List
- Node.js Web框架收集
- hadoop 中 HDFS 由于多次格式化引起的 nanenode 与 datanode 启动异常
- node实现创建服务器获取wx jssdk签名
- nodejs学习笔记<安装和配置>
- DFS-----Route Between Two Nodes in Graph
- 怎样在webStrom里通过file watchers 配置 handlebars 自动预编译
- Nodejs·进程
- 【Node.js】Hello World
- Mac下升级Nodejs
- 添加touch事件 addNodeEventListener
- node.js 版本升级
- LeetCode:Swap Nodes in Pairs
- nodeJS下npm下载包慢的解决方法
- SecondaryNameNode作用