Node.js已经迅速从它的事件驱动的异步
功能效益。但在现代的
网络,这是不可能的。如果你要发展你的下一个Web
应用程序与Node.js,那么你应该用它做什么,让你的应用会越来越快。本文将
介绍的10篇文章,其中可以大大提高节点的应用技巧。我不说太多的废话。让我们一个一个地看。
1。
并行 创建Web应用程序时,您可能需要多次调用内部API以获取各种数据:
用户信息getuserprofile()。
当前的活动getrecentactivity()。
订阅内容getsubscriptions()。
通知的内容getnotifications()。
为了获得这些信息,您应该为每个
方法创建
独立的中间件,并将它们链接到仪表板路线。但是问题是这些方法的
执行是线性的,下一个方法将不在最后一个之前
启动。
你知道,因为不
同步,Node.js非常擅长并行调用多个方法。我们不能博提姆锡垫。我上面提到的方法
都是不相关的,所以我们可以并行执行,从而减少中间件的数量和
速度大大提高。
我们可以用async.js
处理并行,这是一个节点模块专用于Javascript异步。下面的代码演示如何调用多个方法,在平行async.js:
复制代码代码如下所示:
功能runinparallel(){
Async.parallel({
getuserprofile,
getrecentactivity,
getsubscriptions,
getnotifications
}
函数(
错误,结果){
这个回调函数在所有函数完成时
运行。
});
}
如果你想知道更多关于async.js,请查看GitHub页面。
2。异步
根据设计Node.js是单
线程的。基于此,同步代码块的整个应用程序。例如,大多数
文件系统API的同步版本。下面的代码演示文件的同步和异步两读取
操作:
复制代码代码如下所示:
异步
fs.readfile(文件.txt功能(呃,缓冲){
无功量= buffer.tostring();
});
同步
无功量= fs.readfilesync(文件.txt)。ToString();
但如果你执行长时间的阻塞操作,主线程将被阻塞,直到这些操作完成,这大大减少了应用程序的
性能。所以,最好确保你的代码是使用API的异步版本,至少你应该异步在性能和节点。你应该非常小心,当你选择第三方模块。因为当你试图同步
删除从您的代码在一个同步调用外部库就会前功尽弃,降低应用程序的性能。
三.缓存
如果您使用一些不
经常更改的数据,您应该缓存它们并提高性能。
复制代码代码如下所示:
路由器(=路由器);
router.route( / latestposts)。得到(功能(REQ,RES){
post.getlatest(功能(呃,帖子){
如果(错误){
把错误;
}
res.render('posts,{帖子:帖子});
});
});
如果你不经常这样做,你可以缓存的文章列表,然后
清理一会儿。例如,我们可以使用Redis模块来实现这一
目标。当然,你需要在你的
服务器上
安装使用,那么你可以使用客户端调用node_redis
保存关键/值对。下面的示例
显示如何缓存后:
复制代码代码如下所示:
VaR redis =需要('redis),
客户= redis.createclient(null,null,{ detect_buffers:true}),
路由器=快车。路由器();
router.route( / latestposts)。得到(功能(REQ,RES){
client.get('posts功能(呃,帖子){
如果(帖子){
返回res.render('posts,{帖子:JSON.parse(柱)});
}
post.getlatest(功能(呃,帖子){
如果(错误){
把错误;
}
client.set('posts ',JSON.stringify(岗位));
res.render('posts,{帖子:帖子});
});
});
});
看,我们先
检查Redis缓存,看看是否有一个职位。如果是这样,我们从缓存中获得这些职位列表。否则我们将检索内容的数据库和缓存的结果。此外,经过一定时间后,可以使内容可以更新了Redis缓存清理。
4。Gzip
压缩 开启Gzip压缩会对您的Web应用程序有很大的
影响。当一个gzip压缩
浏览器请求资源,服务器将压缩响应在响应返回给浏览器。如果你不使用gzip压缩静态资源,它可能需要更长的时间来让他们的浏览器。
在表达中的应用,我们可以使用内置在express.static()中间件来处理静态内容。此外,静态内容可以压缩和处理压缩中间件。下面是一个使用实例:
复制代码代码如下所示:
VaR压缩=需要('compression);
app.use(压缩()); / /使用压缩
app.use(express.static(path.join(__dirname,征收)));
5。如果可以的话,使用客户机渲染
现在有一个超级强大的客户端MVC / MVVM框架,如AngularJS,灰烬,流星,等等,它是非常简单的建立一个单页面应用程序。基本上,只要你打开一个API,返回到客户端的JSON响应,而不需要在服务器上侧面渲染页面。在客户端,你可以组织JSON与框架显示在用户
界面,服务器只发送JSON响应,可节约网络带宽,提高性能,因为你不需要返回每个响应布局的痕迹。对,只需要返回纯JSON并将其呈现在客户端。
看我的
教程如何揭露一个REST风格的API与表达4。我还写了另一个教程演示如何这些API与AngularJS结合。
6。不要在会话中存储太多数据。
典型的Express页面应用程序,会话数据
默认存储在
内存中。当您在会话上保存太多数据时,服务器成本会显著增加。因此,您可以切换到其他存储方式来保存会话数据或最小化会话中存储的数据量。
例如,当用户
登录到你的应用程序,你可以只在会话而不是整个用户数据对象保存他们的身份。另外,对于
查询,你可以得到的ID,你想存储会话数据的MongoDB和Redis。
7。
优化查询
如果你有一个博客,你必须在首页显示最新的帖子。你可以通过Mongoose取数据:
复制代码代码如下所示:
Post.find(),限制(10)。exec(功能(呃,帖子){
向客户机发送邮件
});
但问题是,
发现()方法的猫鼬会查询对象的所有领域,很多领域都不在首页上的需要。例如,commentsis保存到一个特定的帖子的回复,我们不需要显示的文章的回复,所以我们可以在查询时间它删除。这无疑将提高速度。你可以优化上述这样的查询:
复制代码代码如下所示:
Post.find(),限制(10)。排除('comments)。exec(功能(呃,帖子){
向客户机发送邮件
});
8。标准的V8引擎的方法
在收集的一些操作,如地图,减少,和foreach,并不
支持所有的浏览器,我们可以通过前台的库
解决一些浏览器的
兼容性问题。但是Node.js,你要知道谷歌的V8 Javascript引擎支持。这样,你可以使用这些内置的方法直接在服务器端操作集合。
9。Nginx在前面的结
Nginx是一个小的,轻量级,轻量级的Web服务器,可以用来减少你的Node.js服务器的负荷。你可以在nginx
配置静态资源,不结。你可以将
反应在Nginx Gzip让所有反应较小。所以,如果你已经在运行一个产品,我想你应该要使用Nginx提高运行速度。
10。封装的Javascript
最后,你还可以大大提高包装多个js文件页面的应用速度。当浏览器渲染页面的接触元件,它阻塞直到
脚本运行(除非异步
属性设置)。例如,如果你的页面有五个Javascript文件,浏览器会发送五个独立的HTTP请求得到他们。如果这五个
文件压缩成一个,整体性能将大大提高。同样是用CSS文件。您可以使用编译
工具如咕噜/杯装你的资源文件。
结论
以上10种技术肯定会提高您的Web应用程序的速度。但我知道还有改进和优化的
空间。如果您有任何提高性能的技巧,请在答复中告诉我。
谢谢你的阅读!