Questions tagged «node.js»

Node.js是一个基于事件的异步I / O框架,它使用Google的V8 JavaScript引擎。

8
进行多线程JavaScript运行时实现的缺点是什么?[关闭]
在过去的一周中,我一直在研究多线程JavaScript运行时实现。我有一个使用JavaScriptCore和boost的C ++概念证明。 该体系结构很简单:当运行时完成对主脚本的评估后,它将启动并加入线程池,该线程池开始从共享优先级队列中选择任务,如果两个任务尝试同时访问变量,它将被标记为atomic,并且争夺访问权限。 问题是,当我向JavaScript程序员展示此设计时,我得到了非常负面的反馈,我也不知道为什么。即使是私下里,他们都说JavaScript是单线程的,必须重写现有的库,而如果我继续从事这一工作,gremlins将产生并吞噬一切生物。 我最初也有一个本地协程实现(使用boost上下文),但是我不得不放弃它(JavaScriptCore对于堆栈是很古怪的),并且我不想冒险,所以我决定不提它。 你怎么看?JavaScript是单线程的吗,应该单独使用吗?为什么每个人都反对并发JavaScript运行时的想法? 编辑:该项目现在位于GitHub上,您可以自己尝试一下,让我知道您的想法。 以下是无争用地在所有CPU内核上并行运行的承诺的图片:

3
Node.js有何独特之处?[关闭]
最近,Node.js得到了很多好评。我不是一个经常接触网络应用程序的开发人员。从对Nodes.js的裸露理解中,它的优点是:我们只有一个线程可以处理多个连接,提供基于事件的体系结构。 但是,例如在Java中,我只能使用NIO / AIO创建一个线程(据我的理解,这是非阻塞API),并使用该线程处理多个连接,并且我提供了一个基于事件的体系结构来实现数据处理逻辑(通过提供一些回调等不那么困难)? 鉴于JVM是比V8更成熟的VM(我希望它也可以运行得更快),并且基于事件的处理体系结构似乎很难创建,我不确定Node.js为何吸引了如此多的关注。我错过了一些要点吗?

3
学习Erlang与学习Node.js [关闭]
我在线上看到很多关于Erlang如何在几乎所有可能的类别中踢出node.js屁股的废话。所以我想学习Erlang并试一试,但这就是问题所在。我发现拿起Erlang比拿起node.js困难得多。使用node.js,我可以选择一个相对复杂的项目,并且一天之内就能完成工作。使用Erlang,我遇到了障碍,并且发展得不那么快。 因此,对于那些有更多经验的人来说,Erlang学习起来是否很复杂,或者我只是想念一些东西?Node.js可能不是完美的,但是我似乎能够用它完成工作。
41 erlang  node.js 

4
使用Java设计模式的重要性,NodeJs等
随着Javascript在未来几年内将成为Web上无处不在的编程语言,每隔五分钟就会弹出新的框架,并且事件驱动的编程在服务器端和客户端均处于领先地位: 作为Java语言开发人员,您是否认为传统设计模式比其他语言/环境重要或重要? 请命名您作为Javascript开发人员经常使用的前三种设计模式,并举例说明它们如何对您的Javascript开发有所帮助。

2
Node.js是框架吗?[关闭]
我一直看到招聘人员,开发人员等将Node.js称为框架。我认为,这对Node.js的真正含义是无知的。 通常,在职位描述中,Node.js被分组为AngularJS,React等库中的库。通常,我认为它是由不知道差异的人(HR,招聘人员等)输入的。 我认为Node.js是一个平台或运行时环境。它将DOM API(浏览器中的JavaScript)切换为其他各种API,例如文件系统(因为它作为服务器运行,而不是在浏览器中运行)。 人们为什么认为Node.js是框架?我错了吗?它实际上是一个框架吗?

2
用全栈javascript分离前端和后端的方法?
假设我有一个前端,该前端主要是一个单页面的应用程序,它是使用angular,grunt和bower编写的。假设我有一个后端,主要是一个坐在ORM之上的REST API,它使用grunt,express和sequelize之类的东西从数据库中存储/检索对象。 角度应用程序执行用户看到的所有可视化内容,但是它是通过后端提供的服务上的GUI来完成的。 希望将它们分成两个不同的代码库,以允许独立开发,版本控制,持续集成,推送到开发等。 我的问题是,有什么方法可以干净地进行此操作?是否有针对全栈javascript的推荐最佳实践? 选项#1似乎是一个整体,即“不要将它们分开”。优点是构建链很简单,而且一切都集中在一个地方-但似乎有很多弊端。很难独立版本化,正面折断意味着背面无法展开,依此类推。 选项#2似乎是一个准整体,其中前端构建链导致将一堆文件写入后端。dist前端的目录将引用后端的某个目录,因此从本质上讲,当前端最小化,丑化等等时,它最终将发布到后端,后端将运行所有内容。 选项#3似乎是完全分开的:前端和后端各自在不同的端口上运行各自的服务器,并且它们是完全独立的项目。缺点似乎是需要将它们配置为了解彼此的端口。后端必须允许来自前端的CORS,并且前端需要知道所有这些端点的预期位置。 选项#4可能是使用docker-compose之类的东西将整个东西装配在一起。 我确定还有其他选择。建议的最佳做法是什么?

3
如何在Redis上实现消息队列?
为什么要对Redis进行排队? 我的印象是Redis可以很好地实现排队系统。到目前为止,我们一直在使用MySQL数据库进行轮询或RabbitMQ。有了RabbitMQ,我们遇到了很多问题-客户端库非常差且存在漏洞,我们不想花费太多的开发人员时间来修复它们,也不希望在服务器管理控制台上遇到一些问题,等等。至少,我们没有掌握几毫秒,也没有认真提高性能,因此,只要系统的体系结构能够智能地支持队列,我们​​就可能处于良好状态。 好的,这就是背景。本质上,我有一个非常经典,简单的队列模型-几个生产者在生产工作,几个消费者在消费工作,生产者和消费者都需要能够智能地进行扩展。事实证明,天真PUBSUB是行不通的,因为我不希望所有订阅者都消费工作,我只希望一个订阅者可以接收工作。乍一看,在我看来,这BRPOPLPUSH是一个明智的设计。 我们可以使用BRPOPLPUSH吗? 基本设计BRPOPLPUSH是您有一个工作队列和一个进度队列。当消费者收到工作时,它会自动将项目推送到进度队列中,而当工作完成时,它就是工作LREM了。如果客户死了,这可以防止工作混乱,并使监视工作变得很轻松-例如,我们可以判断是否存在导致消费者花费大量时间来执行任务的问题,此外还可以判断是否存在大量任务。 它确保 作品交付给了一位消费者 工作在进度队列中结束,因此如果消费者使用它,则不会出现黑洞 缺点 对于我来说,我发现的最好的设计实际上没有使用实际上是很奇怪的,PUBSUB因为这似乎是大多数有关Redis排队的博客所关注的内容。所以我觉得我缺少明显的东西。我看到PUBSUB不使用两次任务就使用的唯一方法是简单地推送一个通知,通知工作已经到达,然后消费者可以无阻塞地进行通知RPOPLPUSH。 一次请求一个以上的工作项目是不可能的,这似乎是一个性能问题。对于我们的情况而言,这不是一个很大的选择,但显然,该操作不是针对高吞吐量或这种情况而设计的 简而言之:我是否缺少任何愚蠢的东西? 还添加了node.js标记,因为这是我最常使用的语言。考虑到Node的单线程和非阻塞性质,它可能会在实现方面提供一些简化,但是此外,我正在使用node-redis库,并且解决方案也应该或可以对其优点和缺点敏感。

7
是否有充分的理由避免针对非实时Web应用程序使用node.js?
我已经看到很多关于实时Web应用程序的Node.js多么出色的讨论-需要套接字,Comet,AJAX大量通信等等的东西。我知道,它的事件驱动,异步,线程驱动模型也适用于低开销的并发。 我也看到了Node.js教程,这些教程用于更简单的“传统”非实时应用程序(例如,标准博客示例,对于那些学习应用程序开发的人们来说,这似乎是标准的“ Hello World”)。我也知道,节点静态允许您提供静态资产。 我的问题是:是否有充分的理由要避免针对传统Web应用程序使用Node.js,例如分类,论坛,上述博客示例或为内部业务应用程序构建的CRUD应用程序?仅仅因为它在所有时髦的实时信息方面都表现出色,这是否就禁忌它用于更固定的用途? 我唯一能想到的就是缺乏成熟的库(尽管情况正在发生变化)。 (我问的原因是,我正在考虑放弃PHP以使用Node.js,主要是为了克服语言之间切换的阻抗不匹配问题,而且还可以重用验证代码和其他功能。我的超我劝告我选择最好的工具;但是,我没有太多的时间学习十五种语言及其所有的userland库,只是为了拥有一个全面的工具库,而且还可以确保Node.js可能为我提供比PHP /以后我必须开始考虑流量大的Apache。) [编辑]到目前为止,谢谢大家。我只想看看在选择答案之前是否还有其他人会考虑。@Raynos的答案有点证实了我的想法,评论者的链接为我们提供了很好的思考,但是我想看看是否还有其他人有任何特定于节点的答案,例如“不要将节点用于问题X” '。(除了高CPU任务,我已经知道了:-)

4
是什么决定哪些Javascript函数正在阻塞与非阻塞?
几年来,我一直在做基于Web的Javascript(香草JS,jQuery,Backbone等),最近我正在与Node.js做一些工作。我花了一段时间才能摆脱“非阻塞”编程的束缚,但是我现在已经习惯于将回调用于IO操作等等。 我了解Javascript本质上是单线程的。我了解节点“事件队列”的概念。我不明白是什么决定了单个javascript操作是“阻止”还是“非阻止”。我如何知道我可以依靠哪些操作来同步生成输出供我在以后的代码中使用,以及我需要将哪些回调传递给我以便在初始操作完成后处理输出?在某个地方是否存在异步/非阻塞的Javascript函数列表,以及同步/阻塞的Javascript函数列表?是什么阻止我的Javascript应用成为一种激烈的竞争状况? 我知道需要很长时间的操作,例如Node中的IO操作和Web上的AJAX操作,要求它们是异步的并因此使用回调-但是谁在确定什么才是“长时间”?这些操作中是否有某种触发器可以将其从正常的“事件队列”中删除?如果不是,那么它们与简单的操作(如为变量赋值或遍历数组)之类的简单操作有何不同?似乎我们可以依靠它们以同步方式完成操作? 也许我什至没有正确地考虑这一点-希望有人可以让我直率。谢谢!

3
对node.js的新手来说,使用回调比事件有什么好处?
我是JavaScript新手,对V8引擎内部发生的事情一无所知。 话虽这么说,我真的很喜欢在node.js环境中的早期尝试,但是我发现自己一直在使用events.EventEmitter()作为发出全局事件的一种方式,以便我可以构造程序以适应通知者-观察者模式类似于我将要写的Objective-C或Python程序。 我发现自己一直在做这样的事情: var events = require('events'); var eventCenter = new events.EventEmitter(); eventCenter.on('init', function() { var greeting = 'Hello World!'; console.log('We're in the init function!); eventCenter.emit('secondFunction', greeting); }); eventCenter.on('secondFunction', function(greeting) { console.log('We're in the second function!); console.log(greeting); eventCenter.emit('nextFunction'); }); eventCenter.on('nextFunction', function { /* do stuff */ }); eventCenter.emit('init'); 因此,实际上,我只是将“异步” node.js代码结构化为按预期顺序执行操作的代码,如果可以的话,我有点“向后编码”。在性能上或哲学上以大量回调的方式执行此操作会有所区别吗?使用回调而不是事件来做相同的事情更好吗?

2
我们有一个大型的Ruby on Rails应用程序(每月有2500万用户),我们的管理层决定在Node.js中重写,我疯了吗?
请告诉我是否: Node.js将使我们的网站更快! Node.js将消耗更少的服务器资源,我们可以节省金钱! Node.js将使我们的生产力更高! Node.js意味着我们可以共享客户端和服务器端JavaScript代码。 为了澄清起见,我们正在重写前端服务器,该前端服务器将作为API与我们现有的Ruby on Rails应用程序通信。同时,我们将Ruby on Rails应用程序重构为服务。 现有架构的更多详细信息: Memcached用于HTML部分缓存 Redis用于会话和一些结构化数据缓存 MySQL单主机,多从机 有一张大桌子可以接受大量写操作(想象一个民意测验) 否则大多读。 MongoDB中的一些元数据 Ruby on Rails 3.0 Nginx和独角兽

4
npm中的可选依赖项?
我对此有类似的问题,但不完全相同。 我想让我的应用程序用户以其想要使用它的方式安装所需的任何依赖项。因此,例如,如果他们要保留到MongoDB,则仅安装与Mongo相关的库,但是如果他们要保留到Redis,则仅安装与Redis相关的库。我不想让他们下载并安装他们不会使用的库。 我知道我可以使用进行开发devDependencies,但这远不止于此。就像以上问题的答案所说,这与Python setuptools extras_require和Clojure的leiningen配置文件更紧密相关。在npm中有类似的内容吗?我真的觉得devDependencies应该是dev一种更加广泛的指定依赖项的方式。

3
Node.js是否真的增加了可伸缩性?
我一直在阅读有关C10K问题的信息,特别值得注意的是引用异步服务器I / O的部分。http://www.kegel.com/c10k.html#aio 我相信,这可以通过允许线程处理用户请求,同时依靠I / O中断(事件)通知线程已完成的工作,而不是由线程负责完成工作来总结Node.js在服务器上的工作。完整的CPU工作。线程可以继续执行其他操作(非阻塞),并在完成工作时得到通知(例如,找到文件或压缩视频)。 因此,这意味着套接字更“可用”线程,因此服务器上的用户也可以使用该线程。 然后我发现了这一点:http : //teddziuba.com/2011/10/straight-talk-on-event-loops.html 这里的作者声称,尽管事件驱动框架(中断线程)可以释放线程,但实际上并没有减少CPU要做的工作量!这里的基本原理是,例如,如果用户请求压缩他们上传的视频,则CPU仍然必须实际执行此工作,并且在执行该操作时将处于阻塞状态(为简单起见,请在此处忘记并行性-除非您更了解!)。 我是一个简单的编码器,不是服务器管理员或类似的人。我只是想知道:Node.js是来自“云计算”之神的礼物还是全是热销的东西,实际上不会通过改善可扩展性来节省公司的时间和/或金钱吗? 非常感谢。

3
Node.js与其他服务器端框架有何不同?
我注意到Node.js变得非常流行,并且我看到有人在其中进行小型项目的一些实例。 我还查看了利弊列表,以了解Node.js可以做什么,但是我仍然不清楚它与其他更成熟的服务器端技术(如PHP,Perl或Ruby)的区别滑轨。 具体来说,是什么将Node.js与当前替代方案区分开来,为什么?

3
Javascript开发人员的认证?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我正在寻找在javascript开发领域中扎实但又快节奏的入门。 我想到以下主题: Javascript高级概念,OOP jQuery,jQuery-UI,jQuery-Mobile bone.js node.js BDD和/或TDD http://www.codelesson.com的课程似乎很有希望。 存在/可以推荐哪些Javascript开发人员证书? 您还能推荐哪些其他供应商?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.