实时搜索: nodejs为什么

nodejs为什么

212条评论 2560人喜欢 1945次阅读 346人点赞
...

为什么要用nodejs服务: 总的来说,Node.js的应用场景

1) 适合

JSON APIs——构建一个Rest/JSON API服务,Node.js可以充分发挥其非阻塞IO模型以及JavaScript对JSON的功能支持(如JSON.stringfy函数)
单页面、多Ajax请求应用——如Gmail,前端有大量的异步请求,需要服务后端有极高的响应速度
基于Node.js开发Unix命令行工具——Node.js可以大量生产子进程,并以流的方式输出,这使得它非常适合做Unix命令行工具
流式数据——传统的Web应用,通常会将HTTP请求和响应看成是原子事件。而Node.js会充分利用流式数据这个特点,构建非常酷的应用。如实时文件上传系统transloadit
准实时应用系统——如聊天系统、微博系统,但Javascript是有垃圾回收机制的,这就意味着,系统的响应时间是不平滑的(GC垃圾回收会导致系统这一时刻停止工作)。如果想要构建硬实时应用系统,Erlang是个不错的选择

2) 不适合

CPU使用率较重、IO使用率较轻的应用——如视频编码、人工智能等,Node.js的优势无法发挥
简单Web应用——此类应用的特点是,流量低、物理架构简单,Node.js无法提供像Ruby的Rails或者Python的Django这样强大的框架
NoSQL + Node.js——如果仅仅是为了追求时髦,且自己对这两门技术还未深入理解的情况下,不要冒险将业务系统搭建在这两个漂亮的名词上,建议使用MySQL之类的传统数据库

如果系统可以匹配Node.js的适用场景,那么是时候采取具体的措施来说服老板了。

说服自己老板采用Node.js的方式

构建一个简单的原型——花一周时间构建系统某一部分的原型是非常值得的,同时也很容易和老板在某一点达成一致,等到系统真的在某一部分应用了Node.js,就是打开局面的时候
寻找开发者——首先JavaScript语言的普及度很高,一般公司都不乏Web前端工程师,而此类工程师的学习门槛也非常低。这就意味着Node.js很容易招人,或者公司就隐藏了一些高手
强大的社区支持——Node.js社区非常活跃,吸引很多优秀的工程师,这就意味着公司可以很容易从社区得到免费或者付费的支持
系统性能考虑——JavaScript引擎Google V8,加之原生异步IO模型,使得Node.js在性能的表现非常出色,处理数以千计的并发请求非常轻松

nodejs官方为什么推荐jade: Jade有两点是超出传统模板技术的。

第一、简洁。
注意,简洁并非单指更少的符号,而是看是否能match你的需要。Jade强制的缩进格式能凸显html的结构,而对于前端来说,最重要的任务恰恰是处理结构,而不像一般的html author那样是处理内容。反过来说,假如你的主要任务是处理内容,比如写作blog之类的,那你应该用wiki或者markdown之类的,而不应该用Jade。
第二、html-aware
传统模板技术其实是通用模板,即模板引擎并不care你输出的是html还是其他格式的文本。而Jade专为HTML设计,因此可以做许多传统模板做不到的专门针对html的优化。举个几个简单的例子:
1. 决定如何输出属性(当属性赋值为null/false时不输出属性,为true时只需属性不需要值,这在传统模板里写起来很麻烦、代码难看易出错)
2. 自动产生well-formed结构(甚至可决定是否要输出结束标签,而传统模板理论上也做不到这点,除非引入额外的html parse或tidy)
3. 换行处理,避免产生额外的空白节点
4. 对输出的变量自动进行特殊字符的encode
当然,这些ejs或传统模板也有能实现的,但是用起来感觉都很挫。
实际上,Jade在这方面其实做得还不够好(我打算顺着这个思路做个开源的项目),但是比那些传统模板还是要优雅多了。

为什么我在sumblime安装nodejs插件,Ctrl+b后没有输出: 打开文件“Nodejs.sublime-build”,将代码 "encoding": "cp1252" 改为 "encoding": "utf8" ,将代码 "cmd": ["taskkill /F /IM node.exe & node", "$file"] 改为 "cmd": ["node", "$file"] (如果不行就改为["D:\\Program Files\\nodejs\\node.exe", "$file"]试试)
打开文件“Nodejs.sublime-settings”,将代码 "node_command": false改为 "node_command": "D:\\Program Files\\nodejs\\node.exe" ,(自己安装nodejs的路径)将代码 "npm_command": false 改为 "npm_command": "D:\\Program Files\\nodejs\\npm.cmd" ,保存文件

为什么安装的nodejs npm不能用: 网上抓取和解析html的框架一抓一大把,各种工具直接拿来用就行了,比较省心。
缺点:首先速度/效率很成问题,有一次下载电影海报的时候,由于是crontab定期执行,也没做优化,开的php进程太多,直接把内存撑爆了。然后语法方面也很拖沓,各种关键字 符号 太多,不够简洁,给人一种没有认真设计过的感觉,写起来很麻烦。

nodejs为什么我delete总是Cannot GET: 没有任何可比性

nodejs 使用redis 为什么不用连接池: nodejs是个单线程的过程,异步处理很方便,redis又支持pipelining,通过异步处理,可以在复用一个连接的情况下完成大部分任务。返回顺序上,redis的请求永远都是先请求的先返回,所以负责发送的程序在发送的时候记个序号,然后按序号等相应返回结果就行了。不过吧,我觉得如果要用BRPOP这样的命令,没有连接池肯定不行啊……还有如果要用PUB/SUB的话,Subscribe也要占一个连接。
一般考虑用单连接还是多连接,主要看两个问题:
1. 我自己的程序是多线程还是单线程,如果是多线程,用多个连接、每个线程一个连接,编程起来要简单很多,可以直接使用同步socket的方式;单线程一般本身就是多路复用,用多个连接跟使用pipelining的编程复杂度是一样的。
2. 服务器端使用多个连接是否可以提高性能。这个取决于服务器端对pipelining(或者multiplexing)的支持。redis对pipelining的支持很好,用多个连接完全不能比单个连接快,只会占用更多的资源,所以尽量应当使用单个连接。而MySQL这样的协议对pipelining比较不友好,它是有状态转移的,在处理一个SQL的过程中可能需要发送/取回多次数据,这样只能一次处理一个SQL,用多个连接就可以有效提高并发度。其他协议也是一样的,比如HTTP/1.1虽然支持pipelining但是只能一个一个结果返回,而HTTP/2.0对multiplexing的支持很好,这样HTTP/1.1就应当使用多个连接,而HTTP/2.0就可以使用单连接。

nodejs 接收 post 不知道为什么 绑定 end 不是执行一次: 新建1个文件,如:index.js然后复制1下的内容到你的这个文件中varhttp=require(http);varserver=http.createServer();varquerystring=require(querystring);varfirstPage=function(res){res.writeHead(200,{Content-Type:text/html});varhtml=htmlbody+formaction=/loginmethod=post+name:inputtype=textname=name/br+password:inputtype=passwordname=pwd/br+inputtype=submitvalue=login+/form+/body/html;res.end(html);varlogin=function(req,res){varinfo=;req.addListener(data,function(chunk){info+=chunk;.addListener(end,function(){info=querystring.parse(info);if(info.name==ainfo.pwd==1){res.end(loginsuccess+info.name);}else{res.end(loginfailed+info.name);varrequestFunction=function(req,res){if(req.url==/){returnfirstPage(res);if(req.url==/login){if(req.method!=POST){return;returnlogin(req,res);console.log(req,res);server.on(request,requestFunction);server.listen(80,0.0.0.0);console.log(Serverrunningat

如果用yaf,为什么不用nodejs,python那种常驻内存的代码: laruence对php语言层面很熟悉,整个Yaf出来也是很顺手的事情。
语言层面的性能制约现在已经很少了,机器便宜硬件好了。
加载文件消耗很少,读过php文件后linux等OS会做内存映射,或者有OPCODE加速,器,加载文件从来就不是问题。
我个人觉得微有些尴尬,基于php语言和应用之间。动手改吧,改不了(至少大部分phper是搞不定的),像个黑,盒子。提高了门槛和代码的可移植性,不方便项,目交接。

  • e是什么钱

    怎么能设置笔记本ATI显卡的HyperMemory呀我不想用可是不知道怎么关呀谢谢了BIOS里没找到啊是哪一项呀: 好像那个自己不能设的~ ...

    307条评论 6264人喜欢 3443次阅读 881人点赞
  • ppt组织架构图如何制作

    我的是影驰的显卡,开机之后显示影驰的BIOS,退出重启之后还是继续显示影驰BIOS: 首先要看你的显卡是AMD卡 还是NVIDIA卡如果是NVIDIA卡就会开机首先提示的的显卡的信息NVIDIA显卡开机首先 显示显卡的型号 内存容量等 之后才能进入主板BIOS 进入安全模式可以 说明兼容方面出了问题,...

    917条评论 5642人喜欢 1693次阅读 380人点赞
  • mc是什么

    电脑开机出现1长8短报警声,显示器不显示。显卡和内存重插几次,还是老问题,怎么解决?: 1长8短是显卡或显示器有错误 1.先去除身上静电,打开机箱,检查一下显示数据线连接情况,重新把显示器数据线插上并插稳,如果故障没有排除,重新选一根好的数据线插上2.取下显示卡用毛刷将显示卡上的灰尘刷走,再用橡皮擦把显...

    402条评论 4485人喜欢 1814次阅读 230人点赞