InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

专家观点——袁锋谈 Node.js 开发技巧

  • 2011-11-08
  • 本文字数:2145 字

    阅读完需:约 7 分钟

袁锋,花名苏千,淘宝网数据产品部资深Web 开发工程师,CNode.org 社区核心成员。长期致力于Nodejs 在国内的推广,并积极推动Nodejs 在淘宝网内部的商业化应用,在Nodejs 的Web 开发领域具有丰富经验。曾就职于金山软件公司,同时也是知名Chrome 插件FaWave 的开发者之一。袁锋在QCon 杭州2011 大会上做了名为《Nodejs, 脱离了浏览器的Javascript》的演讲,有关幻灯片可以在此下载。会后,InfoQ 中文站对其进行了采访。

InfoQ:Node.js 目前同时维护着两个版本,你推荐哪个版本?这两个版本分别适用于哪些场景?

正式项目还是推荐使用稳定版本 0.4.x,稳定版本 api 是不会变化的,0.5.x 的更新速度惊人,而且 api 也不断在变化。0.5.x 及以上版本增加了 child_process.fork, cluster, http.ClientRequest.setTimeout, zlib 等等新功能和模块,同时对 windows 支持良好,可以直接在 windows 上运行。详细变化说明可以查看: https://github.com/joyent/node/wiki/API-changes-between-v0.4-and-v0.6

如果你可以同时兼容你的项目任务,又能把握 nodejs 的快速变化,不妨可以在你的新项目中使用 0.5.x,下一个稳定版本 0.6.x 很快就出来了。

InfoQ:你主要使用 Node 技术开发了哪些应用?会遇到哪些问题,如何解决?

目前我基于 nodejs 开发过:

除了传统 web 应用会遇到的问题外,开发中我遇到过比较常见的问题:

  • nodejs 访问 mysql 返回的数据出现编码问题:使用没有中文编码问题的 node-mysql 模块,连接数据库时设置一下编码 db.query(“SET NAMES utf8”);
  • 异步调用中无法捕获异常:监听 process 的 uncaughtException 事件来处理异常,缺点是无法向触发此异常的 request 返回错误响应。 http://nodejs.org/docs/latest/api/process.html#event_uncaughtException_
  • 使用的第三方模块出现未在文档中说明的问题:可以到模块项目的 issue 列表查看是否已有使用者报告此 bug,看看作者的回复,一般好的第三方模块都会快速响应你提交的 issue。同时你也可以查看源代码,修复此问题,并提交你的修改,为此模块做出贡献,这在 nodejs 的第三方模块中是常见的做法。
  • 单进程无法完全利用 CPU 资源:Cluster: https://github.com/LearnBoost/cluster 可以很好地解决多核利用问题,而 nodejs 0.6+ 以上版本将直接支持 cluster 参数启动。关于多进程同时监听同一端口的问题,可以查看 http://cnodejs.org/blog/?p=3471

InfoQ:Node.js 对于熟悉 JS 的前端工程师来说可能比较容易上手,如果是习惯了传统语言如 Java 的后台工程师想学习 Node.js,你有哪些建议?

虽然前端工程师对 javascript 很熟悉,但是 nodejs 是应用服务器端的,所以 Java 的后端工程师会更加容易理解 nodejs 相关术语和 api 说明。

可以从个人小项目入手,学习 javascript,文档可以查看 MDN: http://developer.mozilla.org ;nodejs 有一本非常好的免费电子入门书:The Node Beginner Book http://nodebeginner.org/

nodejs 是全新的平台,没有任何历史包袱。not now,when?

InfoQ:Node.js 的异步调用使得代码结构与传统有所不同,新手可能会不适应,你怎么看这个问题,有较好的解决办法吗?

关于异步调用代码嵌套问题,已经在 nodejs 社区讨论过许多,相关文章也有各种解决方案:

老赵的Jscex https://github.com/JeffreyZhao/jscex 朴灵的EventProxy https://github.com/JacksonTian/eventproxy 是两种完全不同的解决方案。

其实异步代码嵌套问题只是刚接触 nodejs 的同学害怕的问题,一旦你真的要去面对它和解决它的时候,会发现这些问题都是有适合你的办法,很好地处理的。

InfoQ:JS 语言的面向对象实现采用了原型模式,较之其他动态语言如 Ruby,显得比较另类,不少 JS 前端框架都提供了自己的 OOP 封装,对于 Node.js 来说,你会推荐哪些 OOP 模块?或者直接用 ES5 的新特性来解决?

按照 javascript 原型模式就可以了。

同时 nodejs 提供了继承辅助方法 util.inherits http://nodejs.org/docs/latest/api/util.html#util.inherits

InfoQ:目前 Node.js 提供的官方模块有限,NPM 上有很多第三方的模块,在使用时是否要考虑其可靠性?

模块稳定性必须要考虑的,我选择模块的时候,会非常关注模块 github 上面的活跃度和 issue 的处理跟进情况。

找模块一般可以从官方 modules 列表入手: https://github.com/joyent/node/wiki/modules

InfoQ: 介绍一下你们的 Node app engine 和 Node 开发大赛的近况?

Node app engine 目前是邀请内测中,用户可以在 App Engine 中部署发布 Node.js 应用,并提供 mongoDB 数据库存储。

目前的 nodejs 版本为 0.5.5。支持代码在线编辑,支持自定义域名绑定;除了因安全问题考虑屏蔽的模块外,热门的第三方模块和一切纯 javascript 实现的模块都支持。

Nodejs 开发大赛目前有 14 个项目参加,将于 11 月 6 号开始评选。参赛项目及后续情况可以关注 http://cnodejs.org/blog

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2011-11-08 04:486483

评论

发布
暂无评论
发现更多内容

虚拟路由器冗余协议 VRRP 详解

进入大厂的简历应该是什么样子

我是程序员小贱

3月日更

[转]html5设计原理

小江

对话微众和红枣:预言机是区块链提供可信数据的基础设施

CECBC

区块链

优雅编程 | Javascript闭包的4种高级用法

devpoint

闭包 防抖 节流 闭包要点

算法攻关 - 重上到下打印二叉树 (O(n))_offer32

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 从上到下打印二叉树

万事开头难——人为推进效应

Justin

心理学 28天写作 游戏设计

代码审查:从 ArrayList 说线程安全

mzlogin

Java 代码审查

css高度坍塌与清除浮动

依旧廖凯

28天写作 3月日更

《经济学人》2021年3月13日刊精彩文章导读及资源免费下载

wbliu85

寻找被遗忘的勇气(十三)

Changing Lin

3月日更

原来我还有网络天赋

叫练

网络 交换机

你最喜欢的奥斯卡电影是哪部?

wbliu85

【LeetCode】设计哈希集合Java题解

Albert

算法 LeetCode 28天写作 3月日更

太简单了!看完这篇还能不会SpringCloud+Nginx高并发?

Java架构追梦

Java nginx 架构 面试 SpringCloud

「Linux」网络配置大揭秘

我是程序员小贱

3月日更

Python 日期格式和时间以及当前时间和时间戳

HoneyMoose

滚雪球学 Python 之怎么玩转时间和日期库

梦想橡皮擦

28天写作 3月日更

浅谈数仓、数仓模型分层

白程序员的自习室

大数据 解决方案 通用设计模型 数仓

数字化“翻译官”

boshi

数字化 七日更

MySQL主从复制机制

luojiahu

MySQL 主从复制

2021字节面经最新整理: 面试真经/思维导图/学习笔记!火遍全网

比伯

Java 编程 架构 面试 计算机

资深大牛带你了解源码!面试题解析已整理成文档,已拿offer

欢喜学安卓

android 程序员 面试 移动开发

LeetCode题解:91. 解码方法,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

微服务学习笔记

lenka

3月日更

Elasticsearch 近实时搜索 Near Real-Time Search

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

熟练使用SSH客户端常用工具SecureCRT

xiezhr

Linux SSH securecrt SSH工具

如何实现可靠UDP传输

赖猫

计算机网络 udp TCP/IP

【办公自动化】打卡示范

IT蜗壳-Tango

办公自动化 3月日更 IT蜗壳教学

Zookeeper.01 - 简介

insight

zookeeper 3月日更

资深大牛带你了解源码!最详细的docker中安装并配置redis,实战解析

欢喜学安卓

android 程序员 面试 移动开发

  • 扫码添加小助手
    领取最新资料包
专家观点——袁锋谈Node.js开发技巧_Web框架_袁锋_InfoQ精选文章