First of all, the performance. When used, it feels like the performance of Node.js is not as good as expected. The memory usage is about the same level as Ruby, and it is more than Python and PHP. In terms of computing performance (i.e. CPU usage), pure computing does not have much advantage, but because it can control the asynchronous process well, the overall performance is much better than PHP. I personally think Node.js has great potential in performance, because there are many large projects that are committed to improving the performance of JavaScript virtual machines - such as major browsers; at the same time, JavaScript is a language with simple syntax and an open standard. Unlike Python and PHP, it is difficult to perform large-scale reconstructions to improve performance because of compatibility considerations.
Then there is the package manager and library. Node.js has built-in npm, because npm is a very easy-to-use package manager, because JavaScript has low writing threshold, and JavaScript has many excellent front-end libraries that have been ported to the back-end, so there are now more packages on NPM than PyPI and RubyGems, and then far exceed PEAR and Composer. The difference from PHP in the development of Node.js is that everyone is not afraid of adding dependencies. Every small requirement goes to NPM to find existing libraries to implement - and it can often be found. Therefore, the development of Node.js is basically about combining dependencies, and then tends to write a library even if it is small, which is more similar to UNIX's idea. On the other hand, the Node.js community is very open source friendly. The friendliness here means that most libraries are openly developed on Github and use very loose protocols, such as MIT, which is not as "aggressive" as GPL.
In the community, most of the applications of Node.js are still on the web backend, and the libraries related to the web backend are basically made by a few big shots. For example, express, jshttp, jade, mocha and koa were developed by four or five people led by TJ masters, which is an interesting phenomenon. ― Although TJ God finally decided to fade out of the Node.js community.
Toolchain, Node.js is relatively young, and many useful tools have just appeared in the past two years, such as precompiled dialects, unit tests and simulation tests, building tools, etc.; I dare not say how good it is, but it is much better than PHP. As for the reason, firstly, it is largely because these libraries are both front-end and back-end, because of the hard demands of the web front-end, which benefit Node.js by the way; then because of JavaScript's flexible and simple syntax, these tools can be implemented in some very clever and elegant ways. As for the IDE, it still benefits from the web front-end, and there are still some IDEs available - although the JavaScript language itself is not very conducive to static analysis.
Syntax, I would like to emphasize the simple and flexible syntax of JavaScript. The important point is that JSON, JSON is almost the most common data format in the web field at present, and JavaScript has native support for JSON! All data structures in JavaScript are expanded around a superset of JSON, Object, including arrays, functions, objects and classes. Of course, this also brings trouble, because there are few restrictions on writing, which leads to not knowing how to write. When you first start learning, you will inevitably refactor it to understand the advantages and disadvantages of various design patterns in different situations and find a way to write them that suits you and is suitable for specific projects. Therefore, it can be said that Node.js is easy to get started, but building large-scale projects is still a test of the skills of developers. Due to historical issues, the syntax of JavaScript is not beautiful, but fortunately we have various pre-compiled dialects, such as Coffee Script, TypeScript, Dart, LiveScript and ClojureScript. There is always one that suits you.
Use scenarios, JavaScript is a general programming language, so there is no need to mention the front and back ends of the web, let’s take a look at other aspects. I personally think Node.js is still very suitable for writing server tools, or operation and maintenance tools, because many situations in operation and maintenance can work asynchronously, and JavaScript has relatively good regular support, so it is not a big problem to replace bash and Python; Node.js only needs to install the interpreter and can be used casually, without fear of avoiding the introduction of dependencies. For desktop and mobile device programming, Node.js has node-webkit and various other shells. Although the current usage experience is not very good, it can significantly reduce development costs and easily cross-platforms. It is believed that the future is also bright.
Finally, let’s talk about learning Node.js. In my opinion, learning Node.js has two points. One is to clarify the “asynchronous IO based on event callbacks” of Node.js. This is the most different point between Node.js and other mainstream programming languages. Then the second step is to take a look at the top 100 libraries on NPM. There is no need to look closely. Just be familiar with it and know what each library does. After completing these two steps, congratulations, you are already a Node.js developer.