নোড.জেএস বনাম নেট পারফরম্যান্স


181

আমি নোড.জেএস দ্রুত এবং বিশাল পরিমাণে বোঝা সামঞ্জস্য করতে সক্ষম হওয়ার বিষয়ে অনেক কিছু পড়েছি। এই বনাম অন্যান্য ফ্রেমওয়ার্কগুলির কারও কাছে কি কোনও বাস্তব বিশ্ব প্রমাণ রয়েছে, বিশেষত নেট? আমি যে নিবন্ধগুলি পড়েছি সেগুলির বেশিরভাগই উপাখ্যানীয় বা নেট। এর সাথে তুলনা করে না।

ধন্যবাদ


1
আমরা কী ধরণের দৃশ্যে কথা বলছি তার মধ্যে আপনি আরও সুনির্দিষ্ট হতে পারেন?
মার্কাস গ্রানস্ট্রোম

1
আমি আইআইএসে চলমান তুলনামূলক ওয়েব অ্যাপ্লিকেশনগুলির জন্য নেট এবং নোড.জেএস এর যে কোনও পারফরম্যান্স তুলনা করতে আগ্রহী।
ডেভিড মেরিলিলিজ

1
আমি এমন কোনও ওয়েবসাইট তৈরির কথা কল্পনা করতে পারি না যার উচ্চ পারফেক্ট ছিল had নেট থেকে প্রয়োজনীয়তা। আপনি যে সর্বাধিক প্রাথমিক সমস্যাটি চালাতে চান তা হ'ল উচ্চ পারফরম্যান্সের পর থেকে লাইসেন্সের ক্ষেত্রে এটি খুব বেশি কার্যকর কার্যকর হচ্ছে না। সাইটের সাধারণত স্কেলিং আউট প্রয়োজন। এবং না আমি একটি। নেট বিদ্বেষী না। । নেট বিল পরিশোধ করে।
শেন কোর্ট্রিল

4
নোড / এক্সপ্রেস / মঙ্গো এবং নতুন। নেট ওয়েবপি / মঙ্গো ব্যবহার করে আমাকে একটি ছোট্ট আরএসটি এপিআইয়ের অভ্যন্তরীণ পরীক্ষা করতে হয়েছিল এবং ক্লায়েন্টটি যা চেয়েছিল তার উপর ভিত্তি করে পার্থক্য ছিল, কিন্তু দিনের শেষে, যথেষ্ট পরিমাণে তৈরি করার পক্ষে পর্যাপ্ত ছিল না পার্থক্য। আপনার নিজের পরিস্থিতির উপর ভিত্তি করে আপনার নিজের পরীক্ষা বিকাশ করতে হবে। উভয় ভাষায় আলাদা আলাদা এপিআই লিখতে আমাদের তিন দিন সময় লাগল এবং তারপরে সঠিকভাবে সেটআপের জন্য আরও দু'দিন দিন লাগল। যদি আপনি দূর থেকে গুরুতর কিছু করার পরিকল্পনা করে থাকেন, তবে আমি আপনার প্রয়োজনীয়তার উপর ভিত্তি করে পরীক্ষা করার পরামর্শ দিচ্ছি এবং নিজের বোঝার জন্য ভাল যা নিজের জন্য সিদ্ধান্ত নেব।
অ্যালেক্সগ্যাড

5
@ শ্যানকোর্টরিল আপনি বিভ্রান্ত করছেন। নেট (একটি কাঠামো) এবং উইন্ডোজ (একটি অপারেটিং সিস্টেম)। এগুলি খুব আলাদা জিনিস এবং নেট। এর জন্য লাইসেন্সের কোনও প্রয়োজনীয়তা নেই (যা মনোো হিসাবে লিনাক্সে বেশ সুন্দরভাবে চলে)।
রেইনবাবা

উত্তর:


365

হচ্ছে দ্রুত ও হ্যান্ডলিং প্রচুর লোড দুই ভিন্ন জিনিস। আপনি যদি প্রতি সেকেন্ডে 500 টি অনুরোধ প্রেরণ করেন ( LOAD এর অধীনে ) তবে সত্যই দ্রুতগতিতে প্রতি সেকেন্ডে একটি অনুরোধটি সরবরাহ করার ক্ষেত্রে একটি সার্ভার সম্পূর্ণ ক্রোক করতে পারে ।

আপনাকে স্থির (এবং ক্যাশেড) বনাম গতিশীল পৃষ্ঠাগুলিও বিবেচনা করতে হবে। আপনি যদি স্ট্যাটিক পৃষ্ঠাগুলি সম্পর্কে উদ্বিগ্ন হন, তবে সম্ভবত আইআইএস নোডকে বীট করতে চলেছে কারণ আইআইএস কার্নেল-মোড ক্যাচিং ব্যবহার করে, যার অর্থ একটি স্থির পৃষ্ঠার জন্য অনুরোধ করা অনুরোধগুলি এমনকি কার্নেল থেকে বেরিয়ে যাচ্ছে না।

আমি অনুমান করছি যে আপনি ASP.NET এবং নোডের মধ্যে একটি তুলনা খুঁজছেন। এই যুদ্ধে, সমস্ত কিছু সংকলিত / ব্যাখ্যা করার পরে আপনি সম্ভবত পারফরম্যান্সে বেশ ঘনিষ্ঠ হতে চলেছেন। হয়তো .NET একটু এর দ্রুততর হয়তো বা নোড একটু এর দ্রুততর , কিন্তু এটা সম্ভবত ঘনিষ্ঠ যথেষ্ট যে আপনি কি দেখেন না আছে। আমি নেট উপর বাজি ধরব, তবে আমি নিশ্চিতভাবে জানি না।

নোডটি যে জায়গাটি সত্যই বাধ্য করছে তা হ'ল লোড পরিচালনার জন্য । এখানেই প্রযুক্তিগুলি পৃথকভাবে পৃথক হয়। এএসপি.এনইটি তার থ্রেড পুল থেকে প্রতিটি অনুরোধের জন্য একটি থ্রেড উত্সর্গ করে এবং এএসপি.এনইটি একবারে সমস্ত উপলব্ধ থ্রেডের অনুরোধগুলি সারিবদ্ধ হতে শুরু করে। আপনি যদি @ শঙ্করের উদাহরণের মতো "হ্যালো ওয়ার্ল্ড" অ্যাপ্লিকেশনগুলি পরিবেশন করছেন, তবে থ্রেডগুলি অবরুদ্ধ করা হচ্ছে না এবং আপনি আপনার আগে প্রচুর অনুরোধগুলি পরিচালনা করতে সক্ষম হবেন এটি এতটা গুরুত্বপূর্ণ নয় you're থ্রেড আউট রান। এএসপি.এনইটি মডেলের সমস্যাটি তখনই আসে যখন আপনি থ্রেডকে ব্লক করে I / O অনুরোধ করা শুরু করেন (কোনও ডিবিতে কল করুন, কোনও পরিষেবাতে একটি http অনুরোধ করুন, ডিস্ক থেকে একটি ফাইল পড়ুন)। এই ব্লক করা অনুরোধগুলির অর্থ থ্রেড পুল থেকে আপনার মূল্যবান থ্রেড কিছুই করছে না। আপনার আরও ব্লকিং,আপনার ASP.NET অ্যাপ্লিকেশনটি লোড করুন পরিবেশন করতে সক্ষম হতে চলেছে।

এই ব্লকিং প্রতিরোধ করতে, আপনি I / O সমাপ্তি বন্দরগুলি ব্যবহার করেন যা কোনও সাড়া পাওয়ার জন্য অপেক্ষা করার সময় কোনও থ্রেড ধরে রাখার দরকার নেই। এএসপি.এনইটি এটি সমর্থন করে তবে দুর্ভাগ্যক্রমে। নেট নেট না প্রচুর সাধারণ ফ্রেমওয়ার্ক / লাইব্রেরি রয়েছে। উদাহরণস্বরূপ, ADO.NET I / O সমাপ্তি বন্দরগুলিকে সমর্থন করে তবে সত্তা ফ্রেমওয়ার্ক সেগুলি ব্যবহার করে না। সুতরাং আপনি একটি এএসপি.এনইটি অ্যাপ তৈরি করতে পারেন যা নিখুঁতভাবে অ্যাসিনক্রোনাস এবং প্রচুর বোঝা পরিচালনা করে তবে বেশিরভাগ লোকেরা এটি একক হিসাবে তৈরি করার মতো সহজ নয়, এবং আপনার পছন্দসই অংশগুলি ব্যবহার করতে সক্ষম না হতে পারে ফ্রেমওয়ার্কের (সত্তা থেকে লিনকের মতো) যদি আপনি তা করেন।

সমস্যাটি হ'ল ASP.NET (এবং .NET ফ্রেমওয়ার্ক) অসম্পূর্ণ আই / ও সম্পর্কে অন-মতামত তৈরি করার জন্য তৈরি করা হয়েছিল। .NET আপনি সিঙ্ক্রোনাস বা অ্যাসিক্রোনাস কোড লেখেন কিনা সে বিষয়ে কোন চিন্তা করে না, তাই এই সিদ্ধান্ত নেওয়া বিকাশকারীদের up এর একটি কারণ হ'ল আসিনক্রোনাস অপারেশনগুলির সাথে থ্রেডিং এবং প্রোগ্রামিংটিকে "শক্ত" বলে মনে করা হয়েছিল, এবং .NET সবাইকে খুশি করতে চেয়েছিল (noobs এবং বিশেষজ্ঞ)। এটি আরও শক্ত হয়ে গেল কারণ .NET অ্যাসিঙ্ক করার জন্য 3-4 টি বিভিন্ন প্যাটার্ন সহ শেষ হয়েছিল। .NET 4.5 পিছনে ফিরে আসার চেষ্টা করছে এবং এসআইএনসি IO এর আশেপাশে একটি মতামতপূর্ণ মডেল তৈরি করতে নেট নেট ফ্রেমওয়ার্কটিকে পুনরায় প্রেরণ করতে চাইছে, তবে আপনি যে ফ্রেমওয়ার্কগুলি যত্নবান তা আসলে এটি সমর্থন না করা পর্যন্ত কিছুক্ষণ সময় থাকতে পারে।

অন্যদিকে নোডের ডিজাইনাররা একটি মতামতযুক্ত পছন্দ করেছেন যে সমস্ত আই / ও হ'ল একত্রে হওয়া উচিত। এই সিদ্ধান্তের কারণে, নোড ডিজাইনাররা সিদ্ধান্তটি নিতে সক্ষম হন যে নোডের প্রতিটি উদাহরণ থ্রেড স্যুইচিং হ্রাস করার জন্য একক থ্রেডযুক্ত হবে এবং এই থ্রেডটি কেবল সীমাবদ্ধ কোডটি কার্যকর করবে। এটি একটি নতুন অনুরোধ হতে পারে, এটি কোনও ডিবি অনুরোধের কলব্যাক হতে পারে, এটি আপনার করা একটি HTTP বিশ্রাম অনুরোধের কলব্যাক হতে পারে। নোড থ্রেড কনটেক্সট সুইচগুলি বাদ দিয়ে সিপিইউ দক্ষতা সর্বাধিক করার চেষ্টা করে। কারণ নোড এই মতামতযুক্ত পছন্দটি করেছেন যে সমস্ত I / O অবিচ্ছিন্ন, এর অর্থ এই যে এটির সমস্ত ফ্রেমওয়ার্ক / অ্যাড-অনগুলি এই পছন্দটিকে সমর্থন করে। নোডে 100% অ্যাসিঙ্কযুক্ত অ্যাপ্লিকেশনগুলি লেখা আরও সহজ (কারণ নোড আপনাকে এমন অ্যাপ্লিকেশন লিখতে বাধ্য করে যা অ্যাসিঙ্ক হয়)।

আবার, আমার কাছে কোনও এক বা অন্য উপায় প্রমাণ করার মতো শক্ত নম্বর নেই তবে আমি মনে করি নোড টিপিক্যাল ওয়েব অ্যাপের জন্য লোড প্রতিযোগিতা জিতবে। একটি অত্যন্ত অপ্টিমাইজড (১০০% অ্যাসিঙ্ক)। নেট অ্যাপ্লিকেশনটি সমপরিমাণ নোড.জেএস অ্যাপ্লিকেশনটিকে তার অর্থের বিনিময়ে চালাতে পারে, তবে আপনি যদি সেখানে সমস্ত নেট নেট এবং সমস্ত নোড অ্যাপস নিয়ে থাকেন তবে গড়ে নোড সম্ভবত আরও বেশি পরিচালনা করে ভার.

আশা করি এইটি কাজ করবে.


39
মনে রাখবেন যে এএসপি.এনইটি দীর্ঘ সময় ধরে অ্যাসিঙ্ক অনুরোধ হ্যান্ডলারকে সমর্থন করেছে এবং এমভিসি 4 এর সাহায্যে তারা ব্যবহার করা অত্যন্ত সহজ হয়ে গেছে।
ফেবস্প্রো

12
"এই ব্লক করা অনুরোধগুলির অর্থ হ'ল থ্রেড পুল থেকে আপনার মূল্যবান থ্রেড কিছুই করছে না you আপনার যত বেশি ব্লকিং হবে, আপনার এএসপি.নেট অ্যাপটি যত কম লোড করবে সে পরিবেশন করতে সক্ষম হবে" " কেন আমরা সামনের সারিতে (আগত অনুরোধটি) বা ব্যাক-এন্ড (প্রকৃত কাজের থ্রেড) সারি করলাম তা কেন গুরুত্বপূর্ণ নয়? যাই হোক না কেন, ক্লায়েন্টের অনুরোধটি প্রতিক্রিয়াটির জন্য অপেক্ষা করছে। আমি মনে করি এই বিতর্কে লোকেরা যে বিষয়টিকে অগ্রাহ্য করে তা হ'ল "থ্রুপুট"। এটি কোনও সার্ভারের কন্ট্রাক্ট সংযোগগুলির বিষয়ে নয়, প্রতিটি অনুরোধের সঠিকভাবে এটি কতটা দ্রুত সাড়া দিতে পারে?
sjdirect

19
// আমাকে আমার মন্তব্য সম্পাদনা করতে দেবেন না, তাই আমি যা বলতে চাইছিলাম তা এখানেই রয়েছে //// @ এসজেডাইরেক্ট - থ্রুপুট প্রতিক্রিয়া সময়ের মতো নয়। প্রতিক্রিয়া সময় সম্পর্কে যত্নশীল আপনি ঠিক, কিন্তু এটি সারি সময় + প্রতিক্রিয়া সময়, বা ঠিক প্রতিক্রিয়া সময়ের মধ্যে একটি পছন্দ। অনুরোধটির প্রক্রিয়াটি উভয় পরিস্থিতিতে ঠিক ততক্ষণ সময় নিতে চলেছে (সমকালীনভাবে কার্যকর করা আপনার ডিবি অনুরোধটিকে দ্রুত কার্যকর করতে পারে না), তবে যদি আপনার অনুরোধের থ্রেডগুলি অবরুদ্ধ করা হয়, তবে আপনি অনুরোধগুলিতেও সারিবদ্ধ সময় যুক্ত করবেন কারণ আপনি পূর্বের অনুরোধগুলি না করা পর্যন্ত আপনি অনুরোধটি প্রক্রিয়া শুরু করতে পারবেন না।
ম্যাট ডটসন

6
এটি সত্যিই তথ্যবহুল ছিল, আপনাকে ধন্যবাদ! তবে একটি বিষয় লক্ষণীয় যে সত্তা ফ্রেমওয়ার্ক 6 (বর্তমানে আরসি 1) এখন .NET 4.5 থেকে অ্যাসিনক্রোনাস প্যাটার্ন সমর্থন করে। এমএসডিএন.মাইক্রোসফট.এইন-us
সংসদ

4
এটি বিশাল জল্পনা-কল্পনা! এটি ডেটা রাখা দুর্দান্ত হবে। পারফরম্যান্সের বিষয়গুলি নিয়ে কীভাবে এগিয়ে যেতে হয় তা আমি সাধারণত এটিই স্থির করি।
কিংপ্পি

50

আমি নোডেজ এবং আইআইএসের মধ্যে একটি প্রাথমিক পারফরম্যান্স পরীক্ষা করেছি। "হ্যালো! নীচে কোড।

আমার হার্ডওয়্যার: ডেল অক্ষাংশ E6510, কোর আই 5 (ডুয়াল কোর), 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

উপসংহার: আইআইএস নোডেজের চেয়ে প্রায় 2.5 গুণ (উইন্ডোজে) দ্বারা দ্রুত। এটি একটি অত্যন্ত প্রাথমিক পরীক্ষা এবং কোনওভাবেই চূড়ান্ত নয়। তবে আমি বিশ্বাস করি এটি একটি ভাল সূচনা পয়েন্ট। নোডেজ সম্ভবত অন্যান্য ওয়েব সার্ভারগুলিতে, অন্যান্য প্ল্যাটফর্মে দ্রুত, তবে উইন্ডোজ আইআইএস-এ বিজয়ী। বিকাশকারীরা তাদের এএসপি.নেট এমভিসিকে নোডেজগুলিতে রূপান্তর করতে দেখছে তাদের এগিয়ে যাওয়ার আগে দু'বার বিরতি দেওয়া উচিত এবং চিন্তা করা উচিত।

আপডেট হয়েছে (5/17/2012) টমক্যাট (উইন্ডোতে) আইআইএসের হাতকে নীচে মারবে বলে মনে হচ্ছে, স্থির এইচটিএমএল ডিশ করার ক্ষেত্রে আইআইএসের চেয়ে প্রায় 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

আপডেট উপসংহার: আমি একাধিকবার বেঞ্চমার্ক প্রোগ্রাম চালিয়েছি। টমক্যাট স্ট্যাটিক এইচটিএমএল, উইন্ডো থেকে ডিশ করার ক্ষেত্রে দ্রুততম সার্ভার হিসাবে উপস্থিত হয়।

আপডেট হয়েছে (5/18/2012) আগে আমার 10,000 সমবর্তী অনুরোধের সাথে 100,000 মোট অনুরোধ ছিল। আমি এটিকে 10,000,000 মোট চাহিদা এবং 100,000 একযোগে অনুরোধে বাড়িয়েছি। আইআইএস চিৎকারের বিজয়ী হিসাবে প্রকাশিত হয়েছে, নোডেজ সবচেয়ে খারাপ ফেয়ার করেছে। আমি নীচের ফলাফলগুলি সারণীকরণ করেছি:

নোডজেএস বনাম আইআইএস বনাম টমক্যাট উইন্ডোজে স্ট্যাটিক এইচটিএমএল সরবরাহ করছে


55
আপনি বিড়ালের সাথে আপেল তুলনা করছেন। নোড.জেএস এর সাথে এএসপি.এনইটি এমভিসির সাথে তুলনা করুন। স্থিতিশীল ফাইলগুলি পরিবেশন করতে বেশিরভাগ আইআইএস দ্রুততর, যদিও আমি এটিতেও গুরুতর সন্দেহ করি।
অ্যালিসিওএলেেক্স

12
@ এলেসিওএলেক্স: কেন এই তুলনাটি বৈধ নয় তা আমি বুঝতে পারি না। আমি স্থিতিশীল এইচটিএমএলের প্রতিক্রিয়া বারের সাথে তুলনা করছি। আইআইএস ডিফল্ট এইচটিএমএলটি ডিফল্ট এইচটিএমএল থেকে ডিশ করছে, যখন নোডেজ সার্ভার একই স্ট্রিংটি ডিশ করছে, এবং আইআইএস সামনে চলে আসে। একটি এএসপি.নেট এমভিসি অ্যাপ্লিকেশনটির তুলনায় আরও বেশি প্রচেষ্টা এবং সময় প্রয়োজন হবে এবং আমি এটি পরে করার পরিকল্পনা করছি।
শঙ্কর

28
ঠিক আছে, বলুন যে আইআইএস নোডের চেয়ে উইন্ডোজে স্ট্যাটিক ফাইলগুলি পরিবেশন করার ক্ষেত্রে আরও ভাল। আইআইএস কেবল স্থির ফাইল এবং যেমন (অ্যাপাচি বা এনজিআইএনএক্স) পরিবেশন করে, নোড তার চেয়ে অনেক বেশি কাজ করে। আপনার এএসপি.এনইটি এমভিসির সাথে নোডের সাথে তুলনা করা উচিত (ডাটাবেসটি অনুসন্ধান করা, বাহ্যিক পরিষেবা থেকে ডেটা পুনরুদ্ধার করা ইত্যাদি) ইত্যাদি। আপনি নোডকে এএসপি.নেট এমভিসির মাধ্যমে দুর্দান্ত পারফরম্যান্সের লাভ দেখতে পাবেন।
এলেসিয়োএলেক্স

27
আপনি যদি এটি করতে যাচ্ছেন তবে দয়া করে নোডের প্রকৃতিটি কমপক্ষে বুঝতে পারেন। একটি নোড প্রক্রিয়া কেবল একটি একক কোর ব্যবহার করতে পারে। সুতরাং, আপনি যা তুলনা করছেন তা হ'ল একটি নোড প্রক্রিয়া যা একটি কোরতে আইআইএসে চলে এবং একাধিক কোর ব্যবহার করে টমক্যাট প্রক্রিয়া। সঠিকভাবে তুলনা করার জন্য আপনাকে নোড ক্লাস্টার চালানো দরকার। একটি সহজ ক্লাস্টার সমাধান ব্যবহার করার জন্য nodejs.org/api/cluster.html দেখুন । যাইহোক, আমি আপনাকে অভিজ্ঞতা থেকে বলতে পারি, নোড এবং অ্যাসিঙ্ক সি # এর মধ্যে পার্থক্যটি আপনি যা করছেন তার উপর নির্ভর করে 10-15% হয়।
অ্যালেক্সগ্যাড

14
এছাড়াও, নোড এবং আইআইএস এবং টমক্যাট দিয়ে স্থির ফাইলগুলির পরীক্ষা করা অর্থহীন। প্রথমত, স্থির ফাইলগুলির জন্য নোড দুর্দান্ত নয় তবে এটি সত্যিকার অর্থে বোঝানো হয়নি (সঠিক কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করুন)। যদি কেউ তাদের স্থিতিশীল ফাইলগুলির গতি সম্পর্কে উদ্বিগ্ন হন তবে তাদের কোনওভাবেই সিডিএন ব্যবহার করা উচিত।
অ্যালেক্সগ্যাড

25

এনআইও সার্ভারগুলি (নোড.জেএস ইত্যাদি) বিআইও সার্ভারের চেয়ে দ্রুত গতিতে থাকে। (আইআইএস ইত্যাদি)। দাবি ফিরে পেতে চাইলে, TechEmpower উপর বিশেষ একটি কোম্পানী ওয়েব ফ্রেমওয়ার্ক benchmarks । এগুলি খুব উন্মুক্ত এবং সমস্ত ফ্রেমওয়ার্ক পরীক্ষা করার একটি স্ট্যান্ডার্ড পদ্ধতি রয়েছে।

রাউন্ড 9 টি পরীক্ষা বর্তমানে সর্বশেষ (মে 2014)। অনেকগুলি আইআইএস স্বাদযুক্ত পরীক্ষা করা হয়েছে তবে এসপনেট-স্ট্রিপডকে দ্রুততম আইআইএস বৈকল্পিক বলে মনে হচ্ছে।

প্রতি সেকেন্ডে প্রতিক্রিয়াগুলির ফলাফল এখানে (উচ্চতর ভাল):

  • জেএসএন সিরিয়ালাইজেশন
    • 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

সমস্ত ক্ষেত্রে, নোড.জেএস আইআইএসের চেয়ে 2x + দ্রুত হতে থাকে।


1
একাধিক প্রশ্ন পরীক্ষা ব্যতীত, যেখানে এএসপিএনইটের দুটি এন্ট্রি রয়েছে (এস্পনেট-স্ট্রিপড-কাঁচা এবং অ্যাস্পেট-মাইএসকিএল-কাঁচা) যে উভয়ই নোডেজ-মাইএসকিএল-কে হারিয়েছে, এটি শীর্ষ এনজেএস এন্ট্রি।
গ্যালাকটিক

3
ভাল, একাধিক ক্যোয়ারী পরীক্ষাটি ঠিক সার্ভারের গতি পরীক্ষা করে নি। এটি মূলত মাইএসকিউএল ড্রাইভারের গতি পরীক্ষা করছে। নোডজেএস মূলত মংডোডিবি, কাউচডিবি এর মতো নো-এসকিউএল ডাটাবেস ব্যবহার করে। মাইএসকিউএল ড্রাইভারটি অনুকূলিত হতে পারে না। জসন সিরিয়ালাইজেশন এবং প্লেটেক্সট টেস্টগুলি খাঁটি সার্ভারের গতি দেয় - আমি তাদের আরও বিশ্বাস করি।
ttekin

আমি যদি আইআইএস নোড ব্যবহার করি? আমার অভিনয়টি হ্রাস হবে বা একই হবে।
উমাশঙ্কর

3
বেঞ্চমার্ক পৃষ্ঠায় লিঙ্কের জন্য ধন্যবাদ। উত্তরটি অবশ্য আপডেটের প্রয়োজন হতে পারে, নেট কোর ২.১ এর আবির্ভাবের সাথে জিনিসগুলি বেশ কিছুটা পরিবর্তিত হতে পারে। উদাহরণস্বরূপ, 2018 জেএসএন সিরিয়ালাইজেশন বেঞ্চমার্ক এএসপি.নেট কোরকে 971,122 টি অনুরোধ / সেকেন্ডে এবং নোড.জেএসকে 561,593 টি অনুরোধ / সেকেন্ডে তালিকাভুক্ত করেছে, সুতরাং আজ এএসপি.এনইটি কোর সেই ক্ষেত্রে নোড.জেসের চেয়ে দ্বিগুণ দ্রুত উপস্থিত হবে।
স্টাকাক্স -

13

আমাকে মার্কাস গ্রানস্ট্রমের সাথে একমত হতে হবে দৃশ্যটি এখানে খুব গুরুত্বপূর্ণ।

সত্য কথা বলে মনে হচ্ছে আপনি উচ্চ প্রভাবের স্থাপত্য সংক্রান্ত সিদ্ধান্ত নিচ্ছেন। আমার পরামর্শ হ'ল উদ্বেগের ক্ষেত্রগুলি বিচ্ছিন্ন করা এবং আপনি যে স্ট্যাকগুলি বিবেচনা করছেন তার মধ্যে একটি "বেক অফ" করুন।

দিনের শেষে আপনি এই সিদ্ধান্তের জন্য দায়ী এবং আমি অজুহাত মনে করি না "স্ট্যাকওভারফ্লোতে থাকা কোনও লোক আমাকে একটি নিবন্ধ দেখিয়েছিল যা বলেছিল যে এটি ঠিক হবে" আপনার বসের সাথে এটি কেটে দেবে।


1
আমি লোককে বোঝানোর জন্য কিছু খুঁজছি (আমার বস সহ) এটি এমভিসি নেট ওয়েবসাইটের বিকল্প হিসাবে বিবেচনা করার মতো, তাদেরকে বোঝাতে নয় যে আমাদের বদলে নেওয়া উচিত। আমি এখন পর্যন্ত যা কিছু পেয়েছি তা হ'ল উপাখ্যানপূর্ণ উল্লেখ করেছে যে এটি আরও বেশি বোঝা সমর্থন করতে পারে এবং আরও ভাল সম্পাদন করতে পারে। আসলেই কি কেউ প্রমাণ করেছে?
ডেভিড মেরিলিলিজ

17
তবে এমভিসি ওয়েবসাইটটিতে কী ভুল? আপনি কেন বিকল্প খুঁজতে চেষ্টা করছেন? এটি সর্বাধিক গুরুত্বপূর্ণ প্রশ্নটি. যদি সমস্যাটি হয় তবে এটি ভারী সমবর্তী ভারের নিচে কুকুরটি ধীর হয়ে যায়, তবে আপনার নিশ্চিত হওয়া উচিত যে আপনি async.net ব্যবহার করছেন। যদি এটি এখনও সত্যই ধীর হয় তবে আপনাকে আপনার কোডটি ভেঙে ফেলতে হবে এবং আপনার বাধা কোথায় রয়েছে তা বের করতে হবে। আমার অভিজ্ঞতায়, বাস্তব জগতের পরিস্থিতিতে নোড এবং অ্যাসিঙ্ক নেট এর মধ্যে একটি বৃহত্তর পৃথক নয়। আপনি আপনার প্ল্যাটফর্মটি পরিবর্তন করতে পারেন, তবে আপনি সম্ভবত কোড অটল / মাথাব্যথার অন্য সেটগুলির জন্য কোডের বাধা / মাথাব্যথার একটি সেট পরিবর্তন করতে পারেন।
অ্যালেক্সগ্যাড

1

প্রধান পার্থক্য যা আমি দেখছি তা হ'ল নোড .js হ'ল ডায়নামিক প্রোগ্রামিং ল্যাঙ্গুয়েজ (টাইপ চেকিং), সুতরাং প্রকারগুলি অবশ্যই রান-টাইমে প্রাপ্ত হওয়া উচিত। সি # .NET এর মতো দৃ strongly়ভাবে টাইপ করা ভাষাগুলি নোড। জেএস (এবং পিএইচপি ইত্যাদি) এর বিরুদ্ধে লড়াইতে তাত্ত্বিকভাবে অনেক বেশি সম্ভাব্য জয় পেয়েছে, বিশেষত যেখানে ব্যয়বহুল গণনা। উপায় দ্বারা .NET এর নোড .js এর চেয়ে সি / সি ++ এর সাথে আরও ভাল দেশীয় আন্তঃসংযোগ হওয়া উচিত।


4
আপনার পরামর্শ যে জেএস-এ টাইপ করা "দুর্বল" হ্রাস করে দেয় তা ভুল এবং অপ্রাসঙ্গিক এবং নির্বিশেষে, এটি আপেল এবং স্টোনগুলির তুলনা করে (এমনকি কমলাগুলিও আপনি যে পরামর্শ দিচ্ছেন তার চেয়ে বেশি সাদৃশ্য হবে)।
রেইনবাবা

7
@rainabba আপনি যখন কোনও ধরণের গণনার তুলনা করেন (উদাহরণস্বরূপ x এর ফিবোনাচি) তিনি সম্পূর্ণ সঠিক।
স্ট্যান

5
@ স্টিভ প্রকৃতপক্ষে, জেড দেওয়া, আপনি এখনও এটি বলতে পারবেন না কারণ জেএস একটি ভাষা এবং। নেট একটি কাঠামো। এগুলি সম্পূর্ণ আলাদা জিনিস। । নেট রানটাইমগুলি একটি নির্দিষ্ট প্রসেসরের আর্কিটেকচারের জন্য সংকলিত হয় এবং তাই আপনি হার্ডওয়ারের একক অংশের জন্য কোডের একটি নির্দিষ্ট অংশের কার্যকারিতা পরিবর্তন করতে পারবেন না। ভি 8-তে যেমন দেখানো হয়েছে, জেএসকে ব্যাখ্যা করা এবং সম্পাদন করা যায় এবং অত্যন্ত ভিন্ন গতি হতে পারে এবং ভাবার কোনও কারণ নেই যে একদিন জেএস-এ লেখা আপনার ফিবোনাচি কোডটি সিএলআর দিয়ে চালিত কোডের সাথে যতটা দ্রুত চলবে না (সম্ভবত, এটি হবে দ্রুত)। আপেল এবং স্টোনস; আমি যেমন বলেছি
রায়নাবা

1
আপনি ঠিকই বলেছেন, তবে আমার দৃষ্টিতে আমি অন্য দেশগুলিকে চিনি না,
চীনায়

1
একই জিনিস জেএসকে বলা যেতে পারে। জেএস ফিবোনাচি ধরার সময়, আপনি কি সত্যিই ভাবেন যে। এনইটি যেখানে অপেক্ষা করবে সেখানেই থাকবে?
কোয়ানবেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.