node.js到底怎么样,它的劣势在哪里呢

现在node.js挺火的,但是node.js到底如何啊?和现在的PHP、JSP在后台上、在于前端的交互上相比怎么样?node.js的劣势在哪里呢

5个回答

首先跟你说说nodejs的优势。

1.如果你是一个对javascript非常熟悉的人,那么使用nodejs就会非常容易上手。
2.使用javascript一门语言就可以搞定前端后端,不用在几门语言中切来切去。
3.nodejs非常方便部署,本身已经带了v8引擎,直接运行命令就可以实现部署,无须依赖tomcat等大型的服务器,无须做复杂的配置。
4.nodejs基于事件驱动,异步回调机制,适合大并发量的请求。
5.nodejs社区非常活跃,有很多成熟的套件可以使用,而且还在持续更新。

当然,优点还有很多,这里简单列举几条。下面说说个人认为它的不好的地方。

1.调试比较困难,由于是类javascript语言,且是解释性语言,只有运行时才知道是否正确,如果是非语法错误是不会有错误提示的,定位错误不太容易。
2.异步回调机制可能会出现回调函数多层嵌套,代码优雅性不佳。
3.nodejs由于不支持多线程,不适合进行大数据分析和计算类型的项目。

总之,nodejs是一门新的语言,而且非常引人注意,需要根据项目需求和人力情况综合考虑。

yishuixs
yishuixs 嗯,说的很详细,谢谢!
4 年多之前 回复

这种讨论没有任何意义。node.js就是将js这种语言代入web后端开发而已,而不同的编程语言都有它的拥趸。既然有人喜欢js,那么必然出现一种用它实现的服务器端框架。仅此而已。

要说到优势和劣势,那么如果你精通一种语言,使用这种语言就能搞定需要的开发任务,而不是另外学一种语言,这就是最大的优势。好比火车上卖方便面,方便面本来没有优势,但是你坐火车这个前提的情况下,你中途下车就为了享受一顿午餐,而再换下一班火车继续履行显然就是不明智的决定。
要说劣势,如果你不擅长这种编程语言,不要被某个框架的一点特性迷惑,你要先学习这种语言,然后才能用这个框架,这个明显的学习成本就是最大的劣势。何况js是一种充满了坑的语言。

NodeJs:采用异步单线程机制,适合于I/O密集的场景,I/O性能非常高,不适合计算密集的场景,且典型案例和规模应用案例比较少
PHP:是老牌的开发语言,也是采用异步单线程,适合各种WEB应用场景,优点是资料齐备,框架齐全,执行速度快,BUG少;缺点是容易产生代码耦合的情况.
JSP:社区活跃,开发者群体广大,典型案例和规模应用案例较多,缺点是性能低下,系统复杂度高

node.js在高密集的I/O方面很适合,而且对于熟悉js的前端开发人员来说很适合入门

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
到底错误在哪里呢?
[code=HTML]rnrnrnrn rn 后台首页rn rn rnrnrn rn rn rn rn rn rn rn 后台主页rn rn rn rn rn rn rn rn rn rnrnrnrnrnrnrnrn[/code]rnIE的报错提示是“缺少‘)’”rn我实在找不到错误在哪rn请帮我看看问题在哪
到底错在哪里呢?
在一个名为PantoDraw的工程的PantoDrawview.h中有如下语句rnclass CPantoDrawView : public CViewrnprotected:rn int s_Drag;rn HCURSOR s_Cross;rn CPoint s_PointEnd;rn CPoint s_PointBegin;rn.......rn.......rn。。。。rn在PantoDrawview.cpp中有rnCPantoDrawView::CPantoDrawView()rnrn // TODO: add construction code herern s_Drag=0;rn ****s_Cross=AfxGetApp()->LoadCursor(IDC_PANTOCROSS);rnrnrn编译时,****行出错“'error C2065: 'IDC_PANTOCROSS' : undeclared identifier“rn哪为高手帮我看一下,错在那里?
这个到底错在哪里了呢?
下面的是Vote.aspx页面:rnpublic partial class vote : System.Web.UI.Pagernrn private string voteID = "2";rnrn protected void Page_Load(object sender, EventArgs e)rn rn ..rn ..rn ..rn rnrnrnprotected void btnShowResult_Click(object sender, EventArgs e)rn rn Response.Redirect("voteResult.aspx?voteID = "+voteID+"");rn rnrnrn下面的是ShowResult.aspx页面:rnrnprotected void Page_Load(object sender, EventArgs e)rn rn string voteID = Request.QueryString["voteID"].ToString();rn ..rn ..rn ..rn rnrnrn每次一执行的时候就报错.设置断点到Response.Redirect("voteResult.aspx?voteID = "+voteID+"");时看值:rn voteID "2" string ,可是再运行到下一步就出错了:rn string voteID = Request.QueryString["voteID"].ToString();未将对象引用设置到对象的实例。QueryString["voteID"]中的VoteID值为NULL,当然前面那个VoteID值必然是NULL了.心都碎了.......rn我不明白,为什么那个值传不过去呢.不应该啊!接收应该没有问题啊.急求答案.rn 愿大家鼠年快乐,"数"不尽的开心,"数"不尽的成就!rnrnrnrn
中国AGV叉车劣势在哪里?
中国AGV叉车劣势在哪里? 随着中国人工智能和大数据等新兴技术的快速发展,与传统叉车不同的智能“AGV叉车”逐渐开始在中国市场上使用。 AGV叉车是无人仓库和智能工厂的重要设备 与传统叉车相比,AGV叉车不需要手动驾驶 它是一种无线引导的自动引导车辆 结合了无线局域网技术和数据采集技术 使用激光导航在复杂路径上运行 智能识别前方的各种物体 成本低,效率高,操作安全 然而,随着AGV的大规模应用,越...
错在哪里,怎么样改呢?
char Tmp[10];rn char A[3];rn memset(S,0,27);rn strcpy(S,"926021");rn //memcpy(S+16,(char*)(0x0808),2);rn memcpy(Tmp, Now().FormatString("MMDDHHNNSS"),10);
opencv 和 VC6.0处理图像,各自的优势劣势在哪里呢?
师兄是用opencv处理图像的,而我开始学的是VC++图像处理。可能由于我大一学的是C++(师兄大一学的是C语言),先入为主的缘故吧,所以我看VC++处理图像时感觉很犀利,进展也很快,可是师兄说用openCV图像处理会更好,哪位高手能不能给解释解释,他们有何区别,各自的长处在哪?劣势在哪呢?
cpu reset到底是从哪里reset的呢?
比如我板子是从nandflash启动rn那么reset是从一开始的cpu自动从flash上copy 4k数据到0地址,还是直接从0地址reset的呢?rnrnwatchdog造成的reset是从哪里开始的呢?rnrn这两者造成的reset有什么不同吗?
请高人指教到底哪里错了呢???
[code=java]rnpackage cn.itcast.dao.impl;rnrnimport java.sql.Connection;rnimport java.sql.PreparedStatement;rnimport java.sql.ResultSet;rnimport java.sql.SQLException;rnrnimport cn.itcast.dao.UserDao;rnimport cn.itcast.domain.User;rnimport cn.itcast.exception.DaoException;rnimport cn.itcast.utils.JdbcUtils;rnrnpublic class UserDaoJdbcImpl implements UserDao rnrn public void add(User user) rn // TODO Auto-generated method stubrn Connection conn=null;rn PreparedStatement st=null;rn ResultSet rs=null;rn rn try rn conn=JdbcUtils.getConnection();rn String sql="insert into users(id,username,password,email,birthday) values(?,?,?,?,?)";rn st=conn.prepareStatement(sql);rn st.setString(1,user.getId());rn st.setString(2,user.getUsername());rn st.setString(3, user.getPassword());rn st.setString(4,user.getEmail());rn st.setDate(5,new java.sql.Date(user.getBirthday().getTime()));rn rn st.executeUpdate(sql);rn rn catch (Exception e) rn e.printStackTrace();rn finallyrn JdbcUtils.release(conn, st, rs);rn rn rnrn public User find(String username, String password) rn Connection conn=null;rn PreparedStatement st=null;rn ResultSet rs=null;rn rn try rn conn=JdbcUtils.getConnection();rn String sql="select * from users where username=? and password=?";rn st=conn.prepareStatement(sql);rn st.setString(1,username);rn st.setString(2,password);rn rn rs=st.executeQuery();rn if(rs.next())rn User user=new User();rn user.setId(rs.getString("id"));rn user.setUsername(rs.getString("username"));rn user.setPassword(rs.getString("password"));rn user.setEmail(rs.getString("email"));rn user.setBirthday(rs.getDate("birthday"));rn return user;rn rn return null;rn catch (SQLException e) rn // TODO Auto-generated catch blockrn throw new DaoException(e);rn finallyrn JdbcUtils.release(conn, st, rs);rn rn rnrn public User find(String username) rn // TODO Auto-generated method stubrn Connection conn=null;rn PreparedStatement st=null;rn ResultSet rs=null;rn rn try rn conn=JdbcUtils.getConnection();rn String sql="select * from users where username=?";rn st=conn.prepareStatement(sql);rn st.setString(1,username);rn rn rs=st.executeQuery();rn if(rs.next())rn User user=new User();rn user.setId(rs.getString("id"));rn user.setUsername(rs.getString("username"));rn user.setPassword(rs.getString("password"));rn user.setEmail(rs.getString("email"));rn user.setBirthday(rs.getDate("birthday"));rn return user;rn rn return null;rn catch (SQLException e) rn // TODO Auto-generated catch blockrn throw new DaoException(e);rn finallyrn JdbcUtils.release(conn, st, rs);rn rn rnrnrnrnrn[/code]rnrn错误信息:2013-10-12 22:12:55 org.apache.catalina.startup.HostConfig checkResourcesrn信息: Reloading context [/myday14_user]rncom.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?,?,?)' at line 1rn at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)rn at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)rn at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)rn at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)rn at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)rn at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)rn at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317)rn at cn.itcast.dao.impl.UserDaoJdbcImpl.add(UserDaoJdbcImpl.java:32)rn at cn.itcast.service.impl.BusinessServiceImpl.registerUser(BusinessServiceImpl.java:25)rn at cn.itcast.web.controller.RegisterServlet.doGet(RegisterServlet.java:47)rn at cn.itcast.web.controller.RegisterServlet.doPost(RegisterServlet.java:67)rn at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)rn at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)rn at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)rn at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)rn at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)rn at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)rn at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)rn at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)rn at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)rn at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)rn at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)rn at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)rn at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)rn at java.lang.Thread.run(Unknown Source)rn我实在没发现啊。。。我是对着写的呀
菜鸟求救,到底哪里错了呢????
include rnrndouble pi = 3.14;rnrnclass Troundrnrn private :rn int r1 ; //外跑道的半径rn int r2 ; //内操场的半径rnrn public:rn void round()rn rn r1 = 0; r2 = 0;rn rnrn double zhouchang(int);rnrn double mianji(int);rn;rnrn double Tround::zhouchang(int S)rn rn double S2;rn S = r1;rn S2 = 2 * pi * S * 40;rn return S2;rn rnrn double Tround::mianji(int M)rn rn double M2;rn M = r2;rn M2 = (pi * r1* r1 - pi * M * M) * 20;rn return M2;rn rnrnvoid main()rnrn Tround round1;rn int i; //外跑道的半径rn int j; //内操场的半径rnrn cout<<"请输入操场半径:"<>i;rnrn cout<<"请输入栅栏半径:"<>j;rnrn cout<<"铺跑道的造价是:"<
xhtml+css的易维护性,到底表现在哪里呢?
刚刚开始接触web标准,都说xhtml+css作的网站很容易维护。rn我感觉xhtml 就是鼓励用div,不鼓励用table。至于css,html也可以很好的支持。rn这我就看不出xhtml相对于html的优势了?而且xhtml好像没有很多xml的优势。rn可能我的想法太简单,请高手指点。
帮我看看,到底错在哪里呢?
import javax.swing.*;rnimport java.awt.*;rnimport java.awt.event.*;rnimport java.util.*;rnrnclass Gui3rnrn static boolean check(int i)rn rn int flag=0,j=2;rn while(flag==0&&j<=(int)Math.sqrt(i))rn rn if(i%j==0)rn rn flag=1;rn break;rn rn elsern j++;rn rn if(flag==0)rn return true;rn else rn return false;rn rn rn static String [] found()rn rn int length=0,i,j; rn String[] member=new String[20];rn Vector v=new Vector();rn Random r=new Random();rn for(i=100;i<=200;i++)rn rn if(check(i))rn v.add(new Integer(i));rn rn for(i=0;i<15;i++)rn rn j=(int)(20*r.nextDouble());rn member[i]=(v.get(j)).toString();rn rn return member;rn rn rn public static void main(String[] args)rn rn final String[] member=found(); rn JFrame f=new JFrame("随机素数");rn Container c=f.getContentPane();rn c.setLayout(new BorderLayout());rn JPanel p1=new JPanel();rn JPanel p2=new JPanel();rn JPanel p3=new JPanel();rn p3.setLayout(new BorderLayout());rn final JTextField t=new JTextField(12);rn final JComboBox b=new JComboBox();rn JLabel l1=new JLabel("结果:");rn final JLabel l2=new JLabel();rn JButton b1=new JButton("产生");rn final JButton b2=new JButton("查找");rn b2.setEnabled(false);rn p1.add(b);rn p1.add(b1);rn p2.add(t);rn p2.add(b2);rn p3.add(l1,BorderLayout.WEST);rn p3.add(l2,BorderLayout.EAST);rn c.add(p1,BorderLayout.NORTH);rn c.add(p2,BorderLayout.CENTER);rn c.add(p3,BorderLayout.SOUTH);rn f.pack();rn f.show();rn rn f.addWindowListener(new WindowAdapter()rn rn public void windowClosing(WindowEvent e)rn rn System.exit(0);rn rn );rn rn b1.addActionListener(new ActionListener()rn rn public void actionPerformed(ActionEvent e)rn rn for(int i=0;i200||temp<100)rn flag=2;rn else if(!check(temp))rn flag=3;rn else if((temp<=200&&temp>=100)&&check(temp))rn rn /*for(i=0;i
请问javascript 和Jscript 到底哪里不同呢??
都说基本上一样,那到底有哪些地方不同呢??
这段代码到底错在哪里呢
#include rnvoid zhuanhuan(int,int);rnvoid main(void)rnrn int shuruone;rn int shurutwo;rn rn printf("输入两个数据");rn scanf("%d%d",&shuruone,&shurutwo);rn zhuanhuan(shuruone,shurutwo);rn printf("%d %d",shuruone,shurutwo);rnrnvoid zhuanhuan(int a ,int b)rnrn int temp;rn rn temp=a;rn a=b;rn b=temp;rnrn编译无错误,执行时候,函数确不发生作用
用怎么样的函数来转换它呢?
我想把在EDIT里输入的数字变成在大写,如:1234.54变成壹仟贰佰参拾肆元伍角肆分,怎么才能转呢?
VB做数据库软件的优势和劣势在哪里?
-
OpenGL,到底怎么样?
小弟读研,专业是计算机图形,初学OpenGL,不知道这个东东到底在国内和国外有多大的市场空间?毕业后一般可以拿多少银子(年薪)?到底有没有公司需要这个专业的学生?rn现在要通信和网络公司太多了,就没有见到要专门搞图形的,郁闷!
ocp认证到底怎么样
我今年想学这个rn大家能给点建议吗rn谢谢
<> 这本书到底怎么样?
学习C已经3年了,最近到这里看了许多帖子,觉得自己有必要重新看一遍C的书籍,但是<> 这本书我没有看过,所以想请教一下各位,这本书的深度适合哪些人看?rn还有最近在学习C++,请介绍基本好书
华擎915GL到底怎么样?
今天本来想用这款主板配Celeron 2.66D攒台电脑,主要用于家里上上网,看看碟,写写代码。主要看中的是这一款主板自带的GMA200显卡性能还不错,并且支持478的赛阳D,只要不玩大型的3D游戏应该没有什么问题,这样可以省下一块显卡的钱。rnrn可是今天到海龙去却被一个攒机的商贩给“痛斥”了一番,说这个配置完全不合理,就没有看到915芯片组配赛阳D的,还说这样配置系统肯定不会稳定。。。rnrn有人使用过这一款主板吗?能说一说这样配置有什么问题吗?
M9到底怎么样?
[b]如题[/b]
软件设计师的证书到底怎么样?
自己大四上刚考了个软件设计师的证书,感觉没什么用。
小米手机到底怎么样?
小米=垃圾,小米手机=垃圾中的垃圾。 身为一名受害者,在此奉劝各位,不要再入手小米手机了,起码三年内不要。。。 在此抛开什么爱国主义,算不上小米铁杆粉丝,但是在小米产品上的消费也该突破五位数了。 一个半月前入手的小米MIX2S,起码目前这部手机还是小米的招牌,主打AI智能,什么AI相机,AI感光,AI人脸解锁。。。。处理器是骁龙845,说什么流畅到起飞。全是假的,虚假宣传,垃圾设计,系统bu...
JSF到底怎么样 (给分)
最近看了看JSF相关的介绍感觉还可以rnrn那为什么现在一看那些组合就是Struts+Hibernate+Spring而很少看见JSF+Hibernate+Springrnrn是JSF这个东西本身不怎么样,还是这种趋势还处在一个兴起的阶段而且在将来将取代Struts呢
嵌入式前景到底怎么样?
好久没写过了,继续,欢迎评论,转载,哈哈 嵌入式前景到底怎么样?是很多想要从事嵌入式行业的人有的疑问?而作为未出校门的大学生们来讲,嵌入式就如同一个全新未知的领域,充满着迷茫与疑惑?那么嵌入式行业到底发展怎么样呢? 嵌入式行业虽然和生活息息相关,且专业性极强,遍布在我们生活的每个角落,但是还是很少有人知道嵌入式。嵌入式的确是不如IOS、Java那么流行或者知名,对于IOS、Java的印象估计大
XML_DB到底性能怎么样
各位好,我们现在是开发个软件,但是公司说XML_DB不好用,有各种缺点,让我们放弃原来的计划用他们的想法。rn我不是很了解,想问下各位,对于B/S经常有报表这种文件处理的软件,报表用oracle xml DB处理到底好不好rn如果能讲下xml DB的优缺点就更好了,还有,如果有这方面的资料,能发给我一份么,谢谢rn69570034@qq.com
registerserviceprocess到底怎么样?
网上看到使用RegisterServiceProcess函数即可让程序在任务列表中消失,但都没详细说到底如何用这个函数。不知有没有哪位高人能明示,在下先行谢过!
dbexpree到底怎么样?
当我看了李维的《delphi7高效数据库编程》后时,感觉dbexpree的发展前景真的不错,不知大家怎么看啊?
asp.net ajax到底怎么样?
有技术朋友说它是垃圾不好用rn我现在做ajax也没用他用的别的框架rnrn我想知道,有人精通它吗,对它了解的,提意见rn性能,开发效率等等,求解
WPF到底怎么样
[size=18px]大家都来聊聊 WPF 到底怎么样。rnrn聊聊这个技术能怎么发展,现在及未来的应用在那些方面。rnrn为什么这个技术出来这么久,还没有太多人去学习这个技术。是因为资料太少还是因为技术支持不够?rnrn我这几天就在找资料学习 WPF,发现没有什么资料能让我真正了解到什么是 WPF 的。rnrn在Vista里面,是不是很多程序都是基于.net 3.0编写的?是不是也有很多程序是用 WPF 做的?[/size]
session到底怎么样写好??
用asp.net开发的系统,当我要判断后台管理员的session过期的问题,我是写在一个aspx文件里然后每个程序include好呢??还是写在每个程序的cs文件中,在if (!Page.IsPostBack) 事件里面写好呢??如有更好的方法请说明理由!!
SAP到底是什么,怎么样?
SAP现在好像很火,但是具体是什么,以后的发展怎么样?rn如果想要进入,怎么学习?rn有知道的大侠指点一下
三星手机到底怎么样?
三星手机到底怎么样?
SNE到底怎么样?
今天才仔细了解了下SNE,貌似功能很不错!!有人研究过?这平台貌似是和我抢饭碗的
NIIT的教学质量到底怎么样?
网上看到的都是在骂北大青鸟的帖子,而NIIT的就比较少。不知道NIIT到底怎么样?有学过的人进来说一下。
jsf到底应用的怎么样?
大家谈谈jsf在项目中应用的情况rn用什么开发工具?
node.js与swoole对比优势与劣势分析,终于有答案了!
今天咱们引用一篇韩老师的文章,给大家讲下PHP高级并发的一个处理,还有一些跟node.js的比较,这个问题也是很多在用这两门语言一直在争执的,现在就来讲解下! 多核并行 node.js的event loop是单进程单线程的,只有一个epoll/kqueue事件轮询被执行。所以无法利用到多核的计算优势。 swoole的event loop是多线程的,是基于epoll/kqueue的Multi-Re...
好多人支持eclipse工具,请问它到底好在哪里呀?跟Jcreator比较一下怎么样??
我现在用的是Jcreator,感觉挺不错的,虽然全是手动编写代码,但这工具 空间很小,界面简洁,功能齐全,还能自定义操作,觉的不错。rn可是看到好多人说eclipse工具好,人气特别旺,能给我讲一下它的优势之处吗??rn非常感谢!!!
我到底错在哪里?
“m_listBox = new CListBox;”rn系统报错:“CListBox' : 'operator =' function is unavailable”rnm_listBox是一类成员变量。rn请问我该怎么办?rn谢谢!
RecyclerView到底强大在哪里?
Hello,大家好!通过上次总结,我们回顾了一下ListView的用法,也知道了ListView的缺陷,比如:性能较差,需要采取手段提高性能;扩展性较差等。同时也知道了一个更为强大的滚动控件RecyclerView将要代替ListView的趋势。那么,RecyclerView是怎样实现的,究竟又强大在哪里?
https到底安全在哪里?
对称加密算法 都说http是不安全的,http是明文传输,也就是说http在两个主机之间传输的信息都是没有经过加密的,那给他加个密不就好了。于是就有了对称加密算法。 对称加密算法指的是加密和解密用的是同一个密钥。 每次进行数据传输前,都是先对要传输的数据进行加密,然后对方再进行解密。虽然加密和解密算法是公开的,但那个密钥是保密的, 当收到密文时,只有通过密钥才可以解密。但是这个密钥怎么才能安全的...
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数