




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用nodejs做Web前端服务器的一些经验前不久 NCZ 发表了新文章 Node.js and the new web front-end(译文),描述了用 node.js 做 Web 前端服务器的种种优势。NCZ 在文章中推荐了一套服务器模型(图片来源自Node.js and the new web front-end)。这个模型在传统的后台服务器前,增加了一层 node.js 实现的 Frontend Server 层。这种架构的最大好处是前后端开发人员的依赖分离,让后端开发人员不必再关心数据在页面间如何传递、用户数据获取是通过 Ajax 还是刷新页面等前端开发所涉及的方方面面,前端开发人员也不必再关心数据如何在数据库中存储等等后端问题。The front-end and back-end now have a perfect split of concerns amongst the engineers who are working on those parts. The front-end has expanded back onto the server where the Node.js UI layer now exists, and the rest of the stack remains the realm of back-end engineers. Nicholas C. Zakas碰巧前不久,我在公司内部尝试了这种架构,这里正好分享一些 node.js 做 Web 前端服务器的经验。与后台服务器的交互在用户的一次请求中,往往需要请求多个不同的后台接口。由于 node.js 的异步特性,写多次 HTTP 请求并处理回调是一件非常痛苦的事情,例如var request = require(request);exports.index = function (req, res) request(API_A, function (err, response, body) if (err) / . request(API_B, function (err, response, body) if (err) / . request(API_C, function (err, response, body) if (err) / . / . ); ); );这种情况通过 async 库可以很很好的解决这个问题。async 是一个工具包,提供了各种各样的小函数来简化 node.js 的异步回调处理。var request = require(request);var async = require(async);exports.index = function (req, res) async.map(API_A, API_B, API_C, /* . */, request, function (err, results) if (err) / . var resultA = results0; var resultB = results1; var resultC = results2; / . );通过 async.map 可以很轻易的实现并行请求数据。如果需要串行请求数据,可以使用 async.Series 函数。除此之外,还可以使用 async.mapLimit 来限制 node.js 的并发连接数。常用 API 数据的获取有些 API 数据是几乎每个页面都会用到的,例如当前用户的个人信息等。对于这类数据,可以通过 middleware 的方式来将它传递给 controller。var request = require(request);var async = require(async);function userdata (req, res, next) request(GET_USER_API, function (err, response, body) if (err) next(err); return; req.user = JSON.parse(body); next(); );app.get(/pageA, userdata, pageAController);app.get(/pageB, userdata, pageBController);app.get(/pageC, userdata, pageCController);Cookie 代理如果 API 接口需要验证 Cookie,那么 node.js 在发送 API 请求时,需要将用户的 Cookie 信息发到后台服务器。同样的,如果后台 API 接口修改了用户 Cookie,例如登陆 API,那么还需要 node.js 将设置用户 Cookie 的请求转发给用户。这就需要实现一个 cookieRequest 方法。var request = require(request);var cookieRequest = function (userRequest, userResponse, url, callback) var options = url: url, headers: ; options.headers.Cookie = userRequest.header(Cookie); / 将用户的 Cookie 传递给后台服务器 request(options, function (error, response, body) userResponse.setHeader(Cookie, response.headers.cookie); callback.apply(null, arguments); );多核优化由于 node.js 的单进程特性,只启动一个 node.js 实例的话不能充分发挥多核 CPU 的性能。因此 node.js 提供了 cluster 模块来解决这个问题。cluster 可以管理多个服务器进程,充分发挥多核 CPU 的性能。用法很简单,只需要创建一个新的启动脚本,调用 cluster 模块来启动服务即可,node.js 官方的 API 文档给了一个很简单的例子:var cluster = require(cluster);var http = require(http);var numCPUs = require(os).cpus().length;if (cluster.isMaster) / Fork workers. for (var i = 0; i numCPUs; i+) cluster.fork(); cluster.on(exit, function(worker, code, signal) console.log(worker + cess.pid + died); ); else / Workers can share any TCP connection / In this case its a HTTP server http.createServer(function(req, res) res.writeHead(200); res.end(hello worldn); ).listen(8000);性能老的 Web 服务器使用的是 tomcat + java 的架构,用 node.js 重写整个前端层之后,整个服务的性能提升了不少。目前这个项目只是个人娱乐,所以也没有做太专业的性能测试,只是用 ab 随便打了打压力,在我的 iMac(2.7G i5, 12G) 上大约有 20% 的性能提升。这和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025建筑工程项目预拌混凝土采购合同
- 2025年风湿免疫科风湿病诊断与治疗模拟考试卷答案及解析
- 2025年法医学尸检实验操作技能评定试卷答案及解析
- 2025年船舶制造行业订单结构优化与船舶智能控制系统应用报告
- 2025深圳市福田区华丰粮食交易中心有限公司竞价销售交易合同
- 2025年职业教育产教融合人才培养模式创新研究
- 2025年边缘AI模型选择策略考题(含答案与解析)
- 2025年职业技能鉴定平台打造职业教育新生态研究报告
- 捞油工培训考核试卷及答案
- 印花工知识考核试卷及答案
- 2025年军事模型行业研究报告及未来行业发展趋势预测
- 押题宝典期货从业资格之《期货法律法规》试题及参考答案详解(能力提升)
- 2025安徽宣城市总工会招聘社会化工会工作者13人笔试参考题库附答案解析
- 北京数语科技Datablau数据模型与数据资产平台介绍
- 人体对外界环境的感知+课件-2025-2026学年人教版生物八年级上册
- 无人机驾驶培训专业知识课件
- 2025年北师大版新教材数学二年级上册教学计划(含进度表)
- 初中语文学科组质量分析
- 70岁老年人三力测试能力考试题库及答案
- 2025年职业指导师(中级)考试全真模拟试卷
- 2025年广告设计师专业知识考核试卷:2025年广告设计与制作软件应用实战试题
评论
0/150
提交评论