Node.js बनाम .Net प्रदर्शन


181

मैंने Node.js के तेज़ होने और बड़ी मात्रा में लोड को समायोजित करने में सक्षम के बारे में बहुत कुछ पढ़ा है। किसी को भी इस बनाम अन्य रूपरेखा के किसी भी वास्तविक दुनिया सबूत है, विशेष रूप से .Net? अधिकांश लेख जो मैंने पढ़े हैं, वे वास्तविक हैं या उनमें .Net की तुलना नहीं है।

धन्यवाद


1
क्या आप अधिक सटीक हो सकते हैं कि हम किस प्रकार के परिदृश्य में बात कर रहे हैं?
मार्कस ग्रैनस्ट्रॉम

1
मैं IIS में चल रहे तुलनीय वेब अनुप्रयोगों के लिए। नेट और Node.js के किसी भी प्रदर्शन तुलना में दिलचस्पी रखता हूं।
डेविड मेरिलेलेस

1
मैं किसी को भी एक वेब साइट बनाने की कल्पना नहीं कर सकता था जिसमें उच्च perf था। .Net से बाहर की आवश्यकताएं। आपके द्वारा चलाई जाने वाली सबसे बुनियादी समस्या यह है कि यह उच्च निष्पादन के बाद से लाइसेंस के मामले में बहुत प्रभावी नहीं है। साइटों को आमतौर पर स्केलिंग की आवश्यकता होती है। और नहीं, मैं .Net नफरत नहीं कर रहा हूँ। .Net बिलों का भुगतान करता है।
शेन कोर्ट्रेल

4
मुझे Node / express / mongo और new .net webapi / mongo का उपयोग करके एक छोटी सी REST API का आंतरिक परीक्षण करना था और ग्राहक जो चाहते थे, उसके आधार पर पूर्ण अंतर थे, लेकिन दिन के अंत में, बनाने के लिए पर्याप्त नहीं था। अंतर। आपको अपने स्वयं के परिदृश्यों के आधार पर अपने स्वयं के परीक्षण विकसित करने की आवश्यकता है। दोनों भाषाओं में अलग-अलग एपीआई लिखने के लिए हमें तीन दिन लगे और फिर ठीक से परीक्षण करने के लिए एक और दो दिन। यदि आप दूर से गंभीर कुछ भी करने की योजना बना रहे हैं, तो मैं आपकी आवश्यकताओं के आधार पर परीक्षण स्थापित करने का सुझाव दूंगा और अपने लिए निर्णय लूंगा जो आपके लोड के लिए बेहतर है।
एलेक्सगैड

5
@ShaneCourtrille आप भ्रमित कर रहे हैं। नेट (एक ढांचा) और विंडोज (एक ऑपरेटिंग सिस्टम)। वे बहुत अलग चीजें हैं और .Net के लिए कोई लाइसेंस की आवश्यकताएं नहीं हैं (जो मोनो के रूप में लिनक्स पर काफी अच्छी तरह से चलता है)।
वर्षाबाड़ी

जवाबों:


365

FAST होने और बहुत सारे LOAD को संभालना दो अलग चीजें हैं। एक सर्वर वास्तव में बात यह है कि तेजी से अगर आप इसे प्रति सेकंड 500 अनुरोध भेजने (के तहत दूसरा हो सकता है प्रति एक अनुरोध पेश करते पर पूरी तरह से croak लोड )।

आपको डायनामिक पृष्ठों पर स्टेटिक (और कैश्ड) बनाम पर विचार करना होगा। यदि आप स्थैतिक पृष्ठों के बारे में चिंतित हैं, तो IIS शायद नोड को हरा सकता है क्योंकि IIS कर्नेल-मोड कैशिंग का उपयोग करता है, जिसका अर्थ है कि जो अनुरोध स्थैतिक पृष्ठ का अनुरोध करते हैं, वे कर्नेल से बाहर निकलने के लिए भी नहीं जा रहे हैं।

मुझे लगता है कि आप ASP.NET और नोड के बीच तुलना की तलाश कर रहे हैं। इस लड़ाई में, सब कुछ संकलित / व्याख्या किए जाने के बाद आप संभवतः प्रदर्शन में बहुत करीब होने जा रहे हैं। हो सकता है कि .NET का थोड़ा तेज हो या शायद नोड का थोड़ा तेज हो , लेकिन यह शायद इतना करीब है कि आपको ध्यान नहीं है। मैं .NET पर शर्त लगाता हूं, लेकिन मुझे यकीन नहीं है।

वह स्थान जो नोड वास्तव में सम्मोहक है, LOAD को संभालने के लिए है । यह वह जगह है जहाँ प्रौद्योगिकियाँ वास्तव में भिन्न होती हैं। ASP.NET अपने थ्रेड पूल से प्रत्येक अनुरोध के लिए एक धागा समर्पित करता है, और एक बार ASP.NET समाप्त हो गया है सभी उपलब्ध थ्रेड अनुरोध कतारबद्ध होने लगते हैं। यदि आप @ शंकर के उदाहरणों की तरह "हैलो वर्ल्ड" ऐप परोस रहे हैं, तो यह बहुत मायने नहीं रखता क्योंकि धागे अवरुद्ध होने वाले नहीं हैं और आप से पहले बहुत सारे अनुरोधों को संभालने में सक्षम होने जा रहे हैं। धागे से बाहर भागो। ASP.NET मॉडल के साथ समस्या तब आती है जब आप I / O अनुरोध करना शुरू करते हैं जो थ्रेड को ब्लॉक करता है (DB पर कॉल करें, सेवा के लिए http अनुरोध करें, डिस्क से फाइल पढ़ें)। इन अवरुद्ध अनुरोधों का मतलब है कि थ्रेड पूल से आपका मूल्यवान धागा कुछ नहीं कर रहा है। आपके पास जितना अधिक अवरुद्ध है,अपने ASP.NET एप्लिकेशन को लोड करें सेवा करने में सक्षम होने जा रहा है।

इस अवरोध को रोकने के लिए, आप I / O पूरा करने वाले पोर्ट का उपयोग करते हैं, जिसे प्रतिक्रिया के लिए प्रतीक्षा करते समय आपको थ्रेड रखने की आवश्यकता नहीं होती है। ASP.NET इसका समर्थन करता है, लेकिन दुर्भाग्य से .NET DON'T में कई सामान्य ढांचे / पुस्तकालय हैं। उदाहरण के लिए, ADO.NET I / O पूर्ण पोर्ट का समर्थन करता है, लेकिन Entity Framework उनका उपयोग नहीं करता है। तो आप एक ASP.NET ऐप बना सकते हैं जो विशुद्ध रूप से अतुल्यकालिक है और बहुत सारे भार को संभालता है, लेकिन अधिकांश लोग ऐसा नहीं करते हैं क्योंकि यह एक सिंक्रोनस के निर्माण के लिए उतना आसान नहीं है, और आप अपने कुछ पसंदीदा भागों का उपयोग करने में सक्षम नहीं हो सकते हैं अगर आप ऐसा करते हैं तो फ्रेमवर्क (लिनेक से लेकर संस्थाओं तक)।

समस्या यह है कि ASP.NET (और .NET ढाँचा) को एसिंक्रोनस I / O के बारे में बिना राय के बनाया गया था। यदि आप सिंक्रोनस या एसिंक्रोनस कोड लिखते हैं तो .NET का ध्यान नहीं है, इसलिए यह निर्णय लेने के लिए डेवलपर पर निर्भर है। इसका कारण यह है कि अतुल्यकालिक संचालन के साथ थ्रेडिंग और प्रोग्रामिंग को "कठिन" माना जाता था, और .NET सभी को खुश करना चाहता था (नॉब और विशेषज्ञ)। यह और भी कठिन हो गया क्योंकि .NET async करने के लिए 3-4 अलग-अलग पैटर्न के साथ समाप्त हुआ। .NET 4.5 वापस जाने की कोशिश कर रहा है। .NET फ्रेमवर्क को async IO के आसपास एक राय मॉडल के लिए वापस लेना है, लेकिन यह तब तक हो सकता है जब तक कि आप जिन रूपरेखाओं का ध्यान रखते हैं वे वास्तव में इसका समर्थन करते हैं।

दूसरी ओर नोड के डिजाइनरों ने एक राय बनाई कि ऑल I / O को एसिंक्स होना चाहिए। इस निर्णय के कारण, नोड डिज़ाइनर यह निर्णय लेने में भी सक्षम थे कि नोड के प्रत्येक उदाहरण को थ्रेड स्विचिंग को कम करने के लिए सिंगल थ्रेडेड किया जाएगा, और यह कि एक थ्रेड कोड को निष्पादित करेगा जिसे कतारबद्ध किया गया था। यह एक नया अनुरोध हो सकता है, यह एक DB अनुरोध से कॉलबैक हो सकता है, यह आपके द्वारा किए गए http बाकी अनुरोध से कॉलबैक हो सकता है। नोड थ्रेड संदर्भ स्विच को नष्ट करके सीपीयू दक्षता को अधिकतम करने की कोशिश करता है। क्योंकि नोड ने इस राय को चुना कि सभी I / O अतुल्यकालिक हैं, इसका मतलब यह भी है कि यह सभी फ्रेमवर्क / ऐड-ऑन इस विकल्प का समर्थन करते हैं। यह उन ऐप्स को लिखना आसान है जो नोड में 100% async हैं (क्योंकि नोड आपको ऐसे ऐप्स लिखने के लिए मजबूर करता है जो async हैं)।

फिर, मेरे पास एक या दूसरे तरीके को साबित करने के लिए कोई कठिन संख्या नहीं है, लेकिन मुझे लगता है कि नोड विशिष्ट वेब ऐप के लिए LOAD प्रतियोगिता जीतेगा। एक अत्यधिक अनुकूलित (100% async) .NET ऐप समतुल्य नोड दे सकता है। जेएस ऐप पैसे के लिए एक रन है, लेकिन अगर आपने औसतन सभी .NET और सभी नोड ऐप्स को औसत रूप से लिया है, तो औसत नोड शायद अधिक संभालती है भार।

उम्मीद है की वो मदद करदे।


39
याद रखें कि ASP.NET ने लंबे समय तक async अनुरोध संचालकों का समर्थन किया है, और MVC4 के साथ वे उपयोग करने के लिए बेहद सरल हो गए हैं।
फेबस्प्रो

12
"इन अवरुद्ध अनुरोधों का मतलब है कि थ्रेड पूल से आपका मूल्यवान धागा कुछ भी नहीं कर रहा है। आपके पास जितना अधिक अवरुद्ध है, उतना कम आपके ASP.NET ऐप को सेवा देने में सक्षम होने जा रहा है।" इससे कोई फर्क नहीं पड़ता कि क्या हम सामने (आने वाले अनुरोध) या बैकएंड (वास्तविक कार्य सूत्र) में कतार लगाते हैं? कोई बात नहीं, ग्राहक अनुरोध प्रतिक्रिया के लिए इंतजार कर रहा है। मुझे लगता है कि इस बहस में लोगों की अनदेखी "थ्रूपुट" है। इसके बारे में नहीं कि कितने सर्वर एक समवर्ती कनेक्शन को पकड़ते हैं, कितनी तेजी से यह प्रत्येक अनुरोध का सही जवाब दे सकता है?
23

19
// मुझे अपनी टिप्पणी संपादित नहीं करने देंगे, इसलिए यहां मेरा कहने का मतलब है ।// @sjdirect - प्रतिक्रिया समय के माध्यम से थ्रूपुट समान नहीं है। आप प्रतिक्रिया समय के बारे में ध्यान रखने के लिए सही हैं, लेकिन यह कतार समय + प्रतिक्रिया समय, या सिर्फ प्रतिक्रिया समय के बीच एक विकल्प है। अनुरोध का प्रसंस्करण दोनों परिदृश्यों में लंबे समय के रूप में होने जा रहा है (तुल्यकालिक रूप से आपके DB अनुरोध को किसी भी तेज़ी से निष्पादित करने के लिए नहीं जा रहा है), लेकिन यदि आपका अनुरोध थ्रेड अवरुद्ध है, तो आप अनुरोधों के साथ कतार समय जोड़ रहे हैं। क्योंकि आप पिछले अनुरोध के पूरा होने तक अनुरोध को संसाधित करना शुरू नहीं कर सकते हैं।
मैट डॉटसन

6
यह वास्तव में जानकारीपूर्ण था, धन्यवाद! एक बात ध्यान देने योग्य है कि एंटिटी फ्रेमवर्क 6 (वर्तमान में RC1) अब .NET 4.5 से अतुल्यकालिक पैटर्न का समर्थन करता है। msdn.microsoft.com/en-us/data/jj819165
संसद

4
यह बेहद सट्टा है! डेटा होना बहुत अच्छा होगा। आमतौर पर मैं प्रदर्शन के विषयों के साथ आगे बढ़ने का फैसला करता हूं।
KingPuppy

50

मैंने नोडज और IIS के बीच अल्पविकसित प्रदर्शन परीक्षण किया। IIS "हेल्लो, वर्ल्ड!" को बाहर करते समय नोडज की तुलना में लगभग 2.5 गुना तेज है। नीचे कोड।

मेरा हार्डवेयर: डेल अक्षांश E6510, कोर i5 (डुअल कोर), 8 जीबी रैम, विंडोज 7 एंटरप्राइज 64 बिट ओएस

नोड सर्वर

runs at http://localhost:9090/
/// <reference path="node-vsdoc.js" />
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { "Content-Type": "text/html" });
response.write("<p>hello, world!</p>");
response.end();
}).listen(9090);

default.htm

hosted by iis at http://localhost/test/
<p>hello, world!</p>

टास्क समानांतर लाइब्रेरी का उपयोग करके मेरा स्वयं का बेंचमार्क प्रोग्राम:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;

namespace HttpBench
{
class Program
{
    private int TotalCount = 100000;
    private int ConcurrentThreads = 1000;
    private int failedCount;
    private int totalBytes;
    private int totalTime;
    private int completedCount;
    private static object lockObj = new object();

    /// <summary>
    /// main entry point
    /// </summary>
    static void Main(string[] args)
    {
        Program p = new Program();
        p.Run(args);
    }

    /// <summary>
    /// actual execution
    /// </summary>
    private void Run(string[] args)
    {
        // check command line
        if (args.Length == 0)
        {
            this.PrintUsage();
            return;
        }
        if (args[0] == "/?" || args[0] == "/h")
        {
            this.PrintUsage();
            return;
        }

        // use parallel library, download data
        ParallelOptions options = new ParallelOptions();
        options.MaxDegreeOfParallelism = this.ConcurrentThreads;
        int start = Environment.TickCount;
        Parallel.For(0, this.TotalCount, options, i =>
            {
                this.DownloadUrl(i, args[0]);
            }
        );
        int end = Environment.TickCount;

        // print results
        this.Print("Total requests sent: {0}", true, this.TotalCount);
        this.Print("Concurrent threads: {0}", true, this.ConcurrentThreads);
        this.Print("Total completed requests: {0}", true, this.completedCount);
        this.Print("Failed requests: {0}", true, this.failedCount);
        this.Print("Sum total of thread times (seconds): {0}", true, this.totalTime / 1000);
        this.Print("Total time taken by this program (seconds): {0}", true, (end - start) / 1000);
        this.Print("Total bytes: {0}", true, this.totalBytes);
    }

    /// <summary>
    /// download data from the given url
    /// </summary>
    private void DownloadUrl(int index, string url)
    {
        using (WebClient client = new WebClient())
        {
            try
            {
                int start = Environment.TickCount;
                byte[] data = client.DownloadData(url);
                int end = Environment.TickCount;
                lock (lockObj)
                {
                    this.totalTime = this.totalTime + (end - start);
                    if (data != null)
                    {
                        this.totalBytes = this.totalBytes + data.Length;
                    }
                }
            }
            catch
            {
                lock (lockObj) { this.failedCount++; }
            }
            lock (lockObj)
            {
                this.completedCount++;
                if (this.completedCount % 10000 == 0)
                {
                    this.Print("Completed {0} requests.", true, this.completedCount);
                }
            }
        }
    }

    /// <summary>
    /// print usage of this program
    /// </summary>
    private void PrintUsage()
    {
        this.Print("usage: httpbench [options] <url>");
    }

    /// <summary>
    /// print exception message to console
    /// </summary>
    private void PrintError(string msg, Exception ex = null, params object[] args)
    {
        StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("Error: ");
        sb.AppendFormat(msg, args);
        if (ex != null)
        {
            sb.Append("Exception: ");
            sb.Append(ex.Message);
        }
        this.Print(sb.ToString());
    }

    /// <summary>
    /// print to console
    /// </summary>
    private void Print(string msg, bool isLine = true, params object[] args)
    {
        if (isLine)
        {
            Console.WriteLine(msg, args);
        }
        else
        {
            Console.Write(msg, args);
        }
    }

}
}

और परिणाम:

IIS: httpbench.exe http://localhost/test

Completed 10000 requests.
Completed 20000 requests.
Completed 30000 requests.
Completed 40000 requests.
Completed 50000 requests.
Completed 60000 requests.
Completed 70000 requests.
Completed 80000 requests.
Completed 90000 requests.
Completed 100000 requests.
Total requests sent: 100000
Concurrent threads: 1000
Total completed requests: 100000
Failed requests: 0
Sum total of thread times (seconds): 97
Total time taken by this program (seconds): 16
Total bytes: 2000000

nodejs: httpbench.exe http://localhost:9090/

Completed 10000 requests.
Completed 20000 requests.
Completed 30000 requests.
Completed 40000 requests.
Completed 50000 requests.
Completed 60000 requests.
Completed 70000 requests.
Completed 80000 requests.
Completed 90000 requests.
Completed 100000 requests.
Total requests sent: 100000
Concurrent threads: 1000
Total completed requests: 100000
Failed requests: 0
Sum total of thread times (seconds): 234
Total time taken by this program (seconds): 27
Total bytes: 2000000

निष्कर्ष: IIS लगभग 2.5 गुना (विंडोज पर) नोडज से तेज है। यह एक बहुत ही अल्पविकसित परीक्षा है, और किसी भी तरह से निर्णायक नहीं है। लेकिन मेरा मानना ​​है कि यह एक अच्छा शुरुआती बिंदु है। Nodejs शायद अन्य प्लेटफार्मों पर, अन्य वेब सर्वरों पर तेज है, लेकिन Windows IIS पर विजेता है। अपने ASP.NET MVC को नोडज में बदलने के लिए देख रहे डेवलपर्स को आगे बढ़ने से पहले दो बार सोचना चाहिए।

अपडेट किया गया (5/17/2012) Tomcat (विंडोज़ पर) IIS को बीट करने में लगता है, लगभग स्थिर HTML को डायस करने में IIS से लगभग 3 गुना तेज।

बिल्ला

index.html at http://localhost:8080/test/
<p>hello, world!</p>

टॉमकट परिणाम

httpbench.exe http://localhost:8080/test/
Completed 10000 requests.
Completed 20000 requests.
Completed 30000 requests.
Completed 40000 requests.
Completed 50000 requests.
Completed 60000 requests.
Completed 70000 requests.
Completed 80000 requests.
Completed 90000 requests.
Completed 100000 requests.
Total requests sent: 100000
Concurrent threads: 1000
Total completed requests: 100000
Failed requests: 0
Sum total of thread times (seconds): 31
Total time taken by this program (seconds): 5
Total bytes: 2000000

अद्यतन निष्कर्ष: मैंने कई बार बेंचमार्क कार्यक्रम चलाया। टॉमकैट STATIC HTML, ON WINDOWS को बाहर करने में सबसे तेज़ सर्वर प्रतीत होता है।

अपडेट किया गया (5/18/2012) पहले मेरे पास 10,000 समवर्ती अनुरोधों के साथ कुल 100,000 अनुरोध थे। मैंने इसे 1,000,000 कुल आवश्यकता और 100,000 समवर्ती अनुरोधों तक बढ़ाया। आईआईएस चिल्लाती हुई विजेता के रूप में सामने आती है, जिसमें नोडजे सबसे खराब हैं। मैंने नीचे दिए गए परिणामों को सारणीबद्ध किया है:

NodeJS बनाम IIS बनाम Tomcat विन्डोज़ पर स्टेटिक HTML की सेवा


55
आप बिल्लियों के साथ सेब की तुलना कर रहे हैं। ASP.NET MVC के साथ Node.js की तुलना करें। अधिकांश IIS स्थिर फ़ाइलों की सेवा करने में तेज़ है, हालांकि मुझे इस पर भी संदेह है।
ऐलेसियोलेक्स

12
@alessioalex: मुझे समझ नहीं आता कि यह तुलना वैध क्यों नहीं है। मैं स्थिर HTML के लिए प्रतिक्रिया समय की तुलना कर रहा हूँ। IIS default.htm से static html को बाहर कर रहा है, जबकि नोडज सर्वर उसी स्ट्रिंग को बाहर कर रहा है, और IIS आगे निकलता है। ASP.NET MVC एप्लिकेशन की तुलना में अधिक प्रयास और समय की आवश्यकता होगी, और मैं इसे बाद में करने की योजना बना रहा हूं।
शंकर

28
ठीक है, कहते हैं कि IIS विंडोज पर Node की तुलना में स्थिर फ़ाइलों की सेवा करने में बेहतर है। IIS केवल स्टैटिक फ़ाइलों और जैसे (Apache या NGINX) की सेवा करता है, Node इससे कहीं अधिक काम करता है। आपको ASP.NET MVC की नोड के साथ तुलना करना चाहिए (डेटाबेस को क्वेरी करना, बाहरी सेवा से डेटा पुनर्प्राप्त करना, आदि)। आपको ASP.NET MVC पर नोड के साथ भारी प्रदर्शन लाभ मिलेगा।
एलेसियोलेक्स

27
यदि आप ऐसा करने जा रहे हैं, तो कृपया कम से कम नोड की प्रकृति को समझें। एक नोड प्रक्रिया केवल एक कोर का उपयोग कर सकती है। तो, आप जो तुलना कर रहे हैं, वह एक नोड पर एक कोर पर एक आईआईएस और कई कोर का उपयोग करते हुए टॉमकैट प्रक्रिया है। ठीक से तुलना करने के लिए, आपको नोड क्लस्टर को चलाने की आवश्यकता है। क्लस्टर समाधान का उपयोग करने के लिए नोडjs.org/api/cluster.html देखें । हालाँकि, मैं आपको अनुभव से बता सकता हूं, नोड और एसिंक्स सी # के बीच का अंतर 10-15% या तो इस बात पर निर्भर करता है कि आप क्या कर रहे हैं।
एलेक्सगैड

14
इसके अलावा, नोड और IIS और टॉमकैट के साथ स्थिर फ़ाइलों का परीक्षण अर्थहीन है। सबसे पहले, नोड स्थिर फ़ाइलों के लिए महान नहीं है, लेकिन इसका वास्तव में होने का मतलब नहीं है (सही काम के लिए सही उपकरण का उपयोग करें)। यदि कोई अपनी स्थिर फ़ाइलों की गति के बारे में चिंतित है, तो उन्हें वैसे भी सीडीएन का उपयोग करना चाहिए।
एलेक्सगैड

25

NIO सर्वर (Node.js आदि) BIO सर्वर की तुलना में तेज़ होते हैं। (IIS आदि)। मेरे दावे का समर्थन करने के लिए, TechEmpower एक वेब फ्रेमवर्क बेंचमार्क पर विशेष कंपनी है । वे बहुत खुले हैं और सभी फ्रैमवर्क्स के परीक्षण का एक मानक तरीका है।

राउंड 9 परीक्षण वर्तमान में नवीनतम (मई 2014) हैं। कई आईआईएस फ्लेवर का परीक्षण किया जाता है, लेकिन एस्पनेट-स्ट्रिप को सबसे तेज आईआईएस संस्करण माना जाता है।

यहां प्रति सेकंड प्रतिक्रियाओं में परिणाम (उच्चतर बेहतर है):

  • JSON सीरियलाइज़ेशन
    • NodeJS: 228,887
    • aspnet-छीन: 105,272
  • एकल क्वेरी
    • NodeJS-mysql: 88,597
    • aspnet-छीन कच्चे: 47,066
  • एकाधिक प्रश्न
    • NodeJS-mysql: 8,878
    • aspnet-छीन कच्चे: 3,915
  • सादे पाठ
    • NodeJS: 289,578
    • aspnet-छीन: 109,136

सभी मामलों में, Node.js IIS की तुलना में 2x + तेज होता है।


1
मल्टीपल क्वेरीज़ टेस्ट को छोड़कर, जहाँ ASPNET की दो प्रविष्टियाँ (aspnet-stripped-raw और aspnet-mysql-raw) होती हैं जो दोनों नोड्स-mysql को हराती हैं, जो कि शीर्ष njs प्रविष्टि है।
गैलेक्टिक

3
खैर, मल्टीपल क्वेरीज़ टेस्ट सर्वर की गति का बिल्कुल परीक्षण नहीं कर रहा है। यह मुख्य रूप से MySQL ड्राइवर की गति का परीक्षण कर रहा है। NodeJS मुख्य रूप से MongoDB, CouchDB जैसे NO- SQL डेटाबेस का उपयोग करता है। MySQL ड्राइवर को अनुकूलित नहीं किया जा सकता है। Json क्रमांकन और प्लेनटेक्स्ट परीक्षण शुद्ध सर्वर गति देते हैं - मैं उन पर अधिक विश्वास करता हूं।
22-28 पर ttekin

क्या होगा अगर मैं IIS नोड का उपयोग करता हूं? मेरा प्रदर्शन नीचा होगा या वही रहेगा।
उमाशंकर

3
बेंचमार्क पृष्ठ के लिंक के लिए धन्यवाद। हालाँकि उत्तर को अपडेट की आवश्यकता हो सकती है, .NET कोर 2.1 के आगमन के साथ चीजें काफी बदल सकती हैं। उदाहरण के लिए, 2018 JSON क्रमांकन बेंचमार्क ASP.NET Core को 971,122 अनुरोधों / सेकंड और Node.js पर 561,593 अनुरोधों / सेकंडों पर सूचीबद्ध करता है, इसलिए आज ASP.NET Core उस संबंध में Node.js की तुलना में लगभग दोगुना दिखाई देगा।
stakx - अब

13

मुझे मार्कस ग्रैनस्ट्रॉम के साथ सहमत होना होगा, यहां परिदृश्य बहुत महत्वपूर्ण है।

ईमानदार होने के लिए ऐसा लगता है जैसे आप एक उच्च प्रभाव वास्तु निर्णय ले रहे हैं। मेरी सलाह होगी कि आप चिंता के क्षेत्रों को अलग करें और जो भी विचार कर रहे हैं, उसके बीच एक "सेंकना" करें।

दिन के अंत में आप निर्णय के लिए ज़िम्मेदार होते हैं और मुझे नहीं लगता कि बहाना "स्टैकओवरफ़्लो के कुछ लड़के ने मुझे एक लेख दिखाया जिसमें कहा गया कि यह ठीक होगा" यह आपके बॉस के साथ कट जाएगा।


1
मैं लोगों को समझाने के लिए कुछ ढूंढ रहा हूं (मेरे बॉस सहित) यह MVC.net वेबसाइट के विकल्प के रूप में विचार करने योग्य है, न कि उन्हें समझाने के लिए कि हमें स्वैप करना चाहिए। मैंने अब तक पाया सभी उपाख्यानों का उल्लेख है कि यह अधिक भार का समर्थन कर सकता है और बेहतर प्रदर्शन कर सकता है। क्या किसी ने वास्तव में यह साबित किया है?
डेविड मेरिलेलेस

17
लेकिन एमवीसी वेबसाइट में क्या गलत है? आप एक विकल्प खोजने की कोशिश क्यों कर रहे हैं? यह सबसे महत्वपूर्ण प्रश्न है। यदि समस्या यह है कि यह भारी समवर्ती लोड के तहत कुत्ता धीमा है, तो आपको यह सुनिश्चित करना चाहिए कि आप async.net का उपयोग कर रहे हैं। यदि यह वास्तव में धीमा है, तो आपको अपने कोड को तोड़ने और यह पता लगाने की आवश्यकता है कि आपकी अड़चनें कहां हैं। मेरे अनुभव में, वास्तविक दुनिया के परिदृश्यों में नोड और एसिंक्स नेट के बीच एक बड़ा अंतर नहीं है। आप अपना प्लेटफ़ॉर्म बदल सकते हैं, लेकिन आप संभवतः कोड अड़चनों / सिरदर्द के एक सेट को कोड अड़चनों / सिरदर्द के एक और सेट के लिए बदल देंगे।
एलेक्सगैड

1

मुख्य अंतर जो मैं देख रहा हूं कि नोड .js गतिशील प्रोग्रामिंग भाषा (प्रकार की जाँच) है, इसलिए प्रकार रन-टाइम व्युत्पन्न होने चाहिए। C # .NET जैसी जोरदार टाइप की गई भाषाओं में सैद्धांतिक रूप से अधिक संभावित नोड (.js और PHP) के खिलाफ लड़ाई जीत जाती है, खासकर जहां महंगी गणना है। वैसे .NET को नोड .js की तुलना में C / C ++ के साथ बेहतर देशी हस्तक्षेप होना चाहिए।


4
आपका सुझाव है कि जेएस में "कमजोर" टाइपिंग इसे धीमा कर देती है, यह गलत और अप्रासंगिक है और इसकी परवाह किए बिना, कि सेब और स्टोन्स की तुलना की जा रही है (यहां तक ​​कि संतरे जो आप सुझाव दे रहे हैं, उससे अधिक परिचित होंगे)।
22

7
@rainabba जब आप किसी प्रकार की गणना की तुलना करते हैं (जैसे x का योग) तो वह पूरी तरह सही है।
स्टेन

5
@ चेस्ट वास्तव में, Z को देखते हुए, आप अभी भी यह नहीं कह सकते कि JS एक भाषा है और .Net एक ढांचा है। वे पूरी तरह से अलग चीजें हैं। .Net रनटाइम्स को एक विशेष प्रोसेसर आर्किटेक्चर के लिए संकलित किया जाता है और इसलिए आप हार्डवेयर के एक टुकड़े के लिए कोड के किसी विशेष चंक के प्रदर्शन को नहीं बदल सकते हैं। जैसा कि वी 8 में दिखाया गया है, जेएस की व्याख्या की जा सकती है और निष्पादित की जा सकती है और अलग-अलग गति हो सकती है और यह सोचने का कोई कारण नहीं है कि एक दिन जेएस में लिखा गया आपका रिट्रेन्स कोड बस सीएलआर के माध्यम से कोड चलाने के साथ तेज नहीं चलेगा (संभावना है, यह होगा) और तेज)। सेब और पत्थर; जैसा मैंने कहा।
रेनबा

1
हो सकता है कि आप सही हों, लेकिन मेरी दृष्टि में, मैं अन्य देशों को नहीं जानता, चीन में, कई ऐसे प्रोग्रामर जिनका मैंने अभी हाल ही में EF या Linq Sql में जाना था, इन रूपरेखाओं ने .net के प्रदर्शन को काफी कम कर दिया है
dexiang

1
यही बात जेएस को भी कही जा सकती है। जबकि जेएस रिट्रेसमेंट पर पकड़ बना रहा है, क्या आपको वास्तव में लगता है कि .NET वह रहेगा जहां वह इंतजार कर रहा है?
quanben
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.