ASP.NET Core vs. NodeJS

This blog post intends to describe similarities and differences between ASP.NET Core (.NET 5+) and NodeJS for server-side web application functionality. I do not specifically intend to discuss technologies such as TypeScript and Deno, which likely address some of these concerns. I also didn’t mention some elements where I consider the technologies to be basically equivalent or where I have no information. This blog post contains my current perspectives based on extremely limited knowledge and experience. I am not an expert in .NET or ASP.NET and I know almost nothing about NodeJS. Hopefully, this post provides the start of a framework for discussion.

In no particular order:

  • R&D, Maintenance, Documentation, and Support
    • Microsoft is highly committed to maintaining .NET and ASP.NET Core.
    • The community is highly committed to maintaining JavaScript and NodeJS.
  • Developer Community
    • ASP.NET developers are a subset of web developers.
    • All web developers must know JavaScript.
  • Libraries
    • Extensive libraries are available to .NET programmers.
    • Extensive libraries are available to JavaScript programmers. Personally, I only had a few small experiences with NodeJS. In one, it seemed to download a huge dependency graph to do something relatively trivial.
  • Maturity
    • .NET is older than NodeJS and therefore plausibly more mature in the context of security, testing, performance, stability, and other aspects required for enterprise solutions.
  • Scriptability
    • .NET is scriptable via PowerShell, WSL, and the dotnet command.
    • JavaScript is a scripting language.
  • Single Technology
    • .NET requires C# or another programming language for code that runs on the server (http://blazor.net supports C# on the client).
    • NodeJS uses JavaScript for code that runs on the server, where all web developers must know JavaScript.
  • Platform Independence
    • Historically, .NET required Microsoft Windows and ASP.NET required Internet Information Server. .NET 5 is open source, free, and runs on Windows, Linux, and Apple. ASP.NET Core is open source, includes a web server, and can interoperate with other web servers.
    • NodeJS is free and JavaScript runs everywhere.
  • Serverless Processing
    • Both AWS and Azure support .NET and NodeJS serverless processing, which is a cloud computing model in which customers are responsible for processing loads but not aware of or responsible for individual servers.
  • Implementation
    • .NET compiles into a platform-independent Intermediary Language (IL) that frameworks translate to platform-specific machine language that can remain memory resident after its first use.
    • NodeJs uses a highly-tuned server-side scripting engine.
  • Compile-Time Error Detection
    • .NET requires compilation, automating location of typographical and other errors from reaching source control.
    • JavaScript does not require compilation, though code analysis tooling can provide equivalent features.
  • Strong Typing
    • .NET supports strong typing, which has significant advantages and minor disadvantages.
    • JavaScript does not support strong typing, which has some advantages and some significant disadvantages.
  • Developer Tooling
    • Visual Studio Community (free) provides incredible developer productivity and satisfaction for .NET developers, with alternatives such as JetBrains Rider.
    • JavaScript developers use a wider variety of editors and IDEs including Visual Studio code.
  • Language-Integrated Query (LINQ) (C#) | Microsoft Docs
    • LINQ integrates strongly-typed query features directly into the C# programming language most commonly used with .NET, facilitating development, clarifying code to improve maintainability, as well as increasing abstraction and consistency.
    • JavaScript does not support strong typing or LINQ.

Working with headless content management has shown me the advantages of static HTML over ASP.NET for content delivery, by which I mean hosting of the published website. For certain requirements, such as relatively complex applications, I would consider ASP.NET for content delivery. Otherwise, for HTML, not for my preference but because I think it would benefit a typical customer, I think that I would lean towards static files containing content retrieved from the CMS, using JavaScript to access additional services at runtime. If I ever needed server-side processing during HTML generation, I would certainly ASP.NET Core, but I would prefer to access the CMS during the build process or from the client. I cannot comment on technology to manage build processes, especially those that extract content from a CMS, but that does not sound like .NET.

Service-oriented architectures allow use of appropriate technologies for each task. As a developer that prefers C# to JavaScript, I would hope to implement all services with ASP.NET Core unless I had significant reasons to consider JavaScript, such as a customer that would prefer NodeJS or the existence of relevant libraries only for JavaScript. If needed, it should be possible to replace an ASP.NET service with a JavaScript service that implements the same service contracts, and vice-versa, but likely at a different URL. this indicates the need for a service broker, which I would probably implement in ASP.NET Core… Update: Web Service Brokerage Architecture [for Headless CMS] – Deliverystack.net

If you have additional considerations that should appear in this list or perspectives on any of these points, please comment on this blog post.

One thought on “ASP.NET Core vs. NodeJS

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: