为运行Web应用程序的速度优化Node.js技术10

为运行Web应用程序的速度优化Node.js技术10
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应用程序的速度。但我知道还有改进和优化的空间。如果您有任何提高性能的技巧,请在答复中告诉我。

谢谢你的阅读!
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部