নোড.জেএস বনাম এএসপি.নেট কোর সম্পাদন পরীক্ষার অপ্রত্যাশিত ফলাফল


177

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

অ্যাপ্লিকেশন 1: http://localhost:3000/nodejs node.js

ব্যবহার : নোড.জেএস, এক্সপ্রেস এবং ভ্যাশ রেন্ডারিং ইঞ্জিন।

নোডেজ অ্যাপ্লিকেশন

এই শেষ পয়েন্টে কোডটি

router.get('/', function(req, res, next) {
  var vm = {
    title: 'Express',
    time: new Date()
  }
  res.render('index', vm);
});

আপনি দেখতে পাচ্ছেন, timeভেরিয়েবলের মাধ্যমে বর্তমান তারিখটি ভিউতে পাঠানো ছাড়া এটি কিছুই করে না ।

অ্যাপ্লিকেশন 2: http://localhost:5000/aspnet-core asp.net core

ব্যবহার করে : এএসপি.নেট কোর, ডিফল্ট টেম্পলেট লক্ষ্যবস্তুdnxcore50

তবে এই অ্যাপ্লিকেশনটিতে কোনও তারিখের সাথে কেবল কোনও পৃষ্ঠা সরবরাহ করা ব্যতীত অন্য কিছু করে। এটি বিভিন্ন এলোমেলো পাঠ্যের 5 অনুচ্ছেদ তৈরি করে। এটি নোডেজ অ্যাপ্লিকেশনটির তুলনায় তাত্ত্বিকভাবে এই সামান্য কিছুটা ভারী করা উচিত।

asp.net কোর অ্যাপ্লিকেশন

এই পৃষ্ঠাটি রেন্ডারকারী ক্রিয়া পদ্ধতিটি এখানে

[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
[Route("aspnet-core")]
public IActionResult Index()
{
    var sb = new StringBuilder(1024);
    GenerateParagraphs(5, sb);

    ViewData["Message"] = sb.ToString();
    return View();
}

স্ট্রেস পরীক্ষার ফলাফল

নোড.জেএস অ্যাপ স্ট্রেস পরীক্ষার ফলাফল

আপডেট: গর্জি কোসেভের পরামর্শ অনুসরণ করে

ব্যবহার npm install -g recluster-cli && NODE_ENV=production recluster-cli app.js 8

নোডেজ পরীক্ষা 2

এএসপি.নেট কোর অ্যাপ স্ট্রেস পরীক্ষার ফলাফল

asp.net মূল স্ট্রেস পরীক্ষার ফলাফল

বিশ্বাস করতে পারছি না আমার চোখ! এটি সত্য হতে পারে না যে এই প্রাথমিক পরীক্ষায় এসপিএন কোরটি নোডেজের চেয়ে অনেক দ্রুত faster অবশ্যই এই দুটি ওয়েব প্রযুক্তির মধ্যে পারফরম্যান্স পরিমাপ করতে ব্যবহৃত একমাত্র মেট্রিক নয়, তবে আমি ভাবছি যে নোড.জেসের দিক দিয়ে আমি কী ভুল করছি?

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

আপনি যদি আমাকে আরও কোড স্নিপেট অন্তর্ভুক্ত করতে চান দয়া করে মন্তব্যে জবাব দিন।

আপডেট: .NET কোর অ্যাপ্লিকেশন সময় বিতরণ

অ্যাপনেটিকর অ্যাপ্লিকেশন সময় বিতরণ

সার্ভারের প্রতিক্রিয়া

HTTP/1.1 200 OK
Cache-Control: no-store,no-cache
Date: Fri, 12 May 2017 07:46:56 GMT
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Server: Kestrel

52
"আমি সবসময়ই ভাবতাম যে নোড.জেএসএসপিএন কোরের চেয়ে দ্রুত" - আমি কৌতূহলী যে আপনি কেন এটি মনে করেন? আমি এমন কোনও মানদণ্ড দেখিনি যা এটিকে সমর্থন করবে (
নোড.জেএস

7
@ ইউনোলিশিপ এটিই শুনেছিলাম যা আমি সঙ্গী শুনেছি, এটি "ব্যবহার করা সহজ" এবং "দ্রুত বিকাশমান" খুব শুনেছি, সাধারণত লোকেরা কখনও এএসপি.নেটে কাজ করেনি, বিশেষত ভিজ্যুয়াল স্টুডিওতে। আমি কোনও প্রযুক্তি নিয়ে বড়াই করছি না - তবে এটি আমি লক্ষ্য করেছি এমন প্যাটার্ন।
undefined

3
এখানে প্রশ্ন কি? যদি এটি প্রশংসনীয় হয়: হ্যাঁ এটি হয়। techempower.com/benchmark/… .... এছাড়াও আপনার টুলচেন আপডেট করুন Dnxcore50 কমপক্ষে এক বা দুই বছর পুরানো।
থমাস

2
ক্লাস্টার মডিউলটি ব্যবহার করে টনি টোনি নোডজেস একাধিক শ্রমিককে উত্সাহ দেয় এবং একক প্রক্রিয়াতে শোনার মূল প্রক্রিয়াটির লোড ভাগ করে দেয়। এটি কেবলমাত্র বিভিন্ন বন্দরে একাধিক অ্যাপ্লিকেশন সেট আপ করা এড়ানো যায়। এছাড়াও যদি নোডজেগুলি ক্লাস্টার মোডে চলমান থাকে তবে আইআইএসে বিভিন্ন পোর্টে চলমান অ্যাসপ নেট নেট অ্যাপ্লিকেশনগুলি থাকা উচিত এবং কিছু লোড ব্যালান্সারের মাধ্যমে তাদের মধ্যে লোড ভাগ করে নেওয়া উচিত, তবে এটি সঠিক তুলনা হবে comp
বিপ্রেশ

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

উত্তর:


188

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

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

এই নোড.জেএস সার্ভারটি বিবেচনা করুন যা প্রতিক্রিয়া দেওয়ার আগে 1 সেকেন্ড অপেক্ষা করে

const server = http.createServer((req, res) => {
  setTimeout(() => {
    res.statusCode = 200;
    res.end();
  }, 1000);
});

এখন এটির জন্য 100 টি সমকালীন কনইঙ্কশন নিক্ষেপ করি s সুতরাং আমরা আশা করি যে প্রায় 1000 টি অনুরোধ সম্পূর্ণ হবে।

$ wrk -t100 -c100 -d10s http://localhost:8000
Running 10s test @ http://localhost:8000
  100 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.01s    10.14ms   1.16s    99.57%
    Req/Sec     0.13      0.34     1.00     86.77%
  922 requests in 10.09s, 89.14KB read
Requests/sec:     91.34
Transfer/sec:      8.83KB

আপনি দেখতে পাচ্ছেন যে 922 টি সমাপ্ত হয়ে আমরা ব্যালপার্কে উঠি।

এখন নীচের এসপ নেটওয়ার্ডটি বিবেচনা করুন, যেমনটি লেখা হয়েছে যদিও async / প্রতীক্ষিত এখনও সমর্থিত নয়, সুতরাং আমাদের নোড.জেএস লঞ্চের যুগে ফিরে ডেট করুন।

app.Run((context) =>
{
    Thread.Sleep(1000);
    context.Response.StatusCode = 200;
    return Task.CompletedTask;
});

$ wrk -t100 -c100 -d10s http://localhost:5000
Running 10s test @ http://localhost:5000
  100 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.08s    74.62ms   1.15s   100.00%
    Req/Sec     0.00      0.00     0.00    100.00%
  62 requests in 10.07s, 5.57KB read
  Socket errors: connect 0, read 0, write 0, timeout 54
Requests/sec:      6.16
Transfer/sec:     566.51B

62! এখানে আমরা থ্রেডপুলের সীমাটি দেখি। এটি টিউন করে আমরা আরও সমবর্তী অনুরোধগুলি ঘটতে পারি, তবে আরও সার্ভার সংস্থানগুলির ব্যয়ে।

এই আইও-আবদ্ধ কাজের চাপগুলির জন্য, প্রক্রিয়াকরণ থ্রেডগুলি ব্লক করা এড়ানোর পদক্ষেপটি ছিল নাটকীয়।

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

app.Run(async (context) =>
{
    await Task.Delay(1000);
    context.Response.StatusCode = 200;
});

$ wrk -t100 -c100 -d10s http://localhost:5000
Running 10s test @ http://localhost:5000
  100 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.01s    19.84ms   1.16s    98.26%
    Req/Sec     0.12      0.32     1.00     88.06%
  921 requests in 10.09s, 82.75KB read
Requests/sec:     91.28
Transfer/sec:      8.20KB

এখানে কোনও আশ্চর্যের কিছু নেই, আমরা এখন node.js.

তো এইসবের মানে কি?

আপনার ইমপ্রেশনগুলি যে নোড.জেএস হ'ল "দ্রুত" এমন এক যুগ থেকে আসে যা আমরা আর বাস করি না Add যোগ করুন এটি কখনও নোড / জেএস / ভি 8 ছিল না যে "দ্রুত" ছিল, এটি হ'ল তারা প্রতি-অনুরোধের থ্রেডটি ভেঙেছে মডেল. বাকি সবাই ধরা পড়েছে।

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

দাবি অস্বীকার: রবিবার সকালে নিদ্রাহীন অবস্থায় ম্যাকবুক এয়ারে বয়স্ক ম্যাকবুক এয়ারে সমস্ত কোড লিখিত এবং পরীক্ষাগুলি চালিত হয়। কোডটি ধরতে এবং উইন্ডোজে চেষ্টা করে দেখতে বা নিখরচায় আপনার প্রয়োজনীয়তাগুলি নির্দ্বিধায় দেখুন - https://github.com/csainty/nodejs-vs-aspnetcore


35
নোডজেস কখনই অনন্য ছিল না, নোডেজ প্রবর্তনের আগে থ্রেড প্রতি অনুরোধের মডেলটিও Asp.Net এ বিদ্যমান ছিল I I / O সমস্ত পদ্ধতিতে ফ্রেমওয়ার্ক দ্বারা সরবরাহ করা 2 টি সংস্করণ সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস ছিল, তাদের ASYNC পদ্ধতিগুলি "Async" মূলশব্দ দিয়ে শেষ হয়েছিল for যেমন। মেথডনামসিঙ্ক
বিপ্রেশ

যেমন উদা। ইউ ২০০৮ সালের ডিবি অপারেশন সম্পর্কিত এই নিবন্ধটি উল্লেখ করতে পারেন কোডেডেজেস্ট.com
আর্টিকেলস /

4
"তারা মূলধারার দিকে নিয়েছে" - কয়েকটি বিষয় অনন্য, তারা বিষয়টি আরও ব্যাপক শ্রোতার সামনে তুলে ধরে। একটি পদ্ধতির উপলব্ধ থাকা এবং এটি একটি মূল নীতি হিসাবে বেক করা দুটি খুব আলাদা জিনিস।
ক্রিস সায়ন্তি

4
এখানে সেরা উত্তর। সময়কাল।
নার্ভালেক্স

3
@ লাইব্রিনডলি আমি একমত নই, এটি প্রদত্ত হার্ডওয়্যারটির সর্বাধিক থ্রুপুট প্রদর্শন করার চেষ্টা করছে না, এটি ব্লকিং এবং অ-ব্লকিংয়ের মধ্যে পার্থক্য প্রদর্শন করছে। আপনি যদি কাঁচা থ্রুপুট তুলনা করতে চান তবে আমি টেকেম্পোরের সাথে লিঙ্ক করব।
ক্রিস স্যান্টি

14

এক্সপ্রেস এবং কোয়ার মতো নোড ফ্রেমওয়ার্কগুলির একটি ভয়াবহ ওভারহেড রয়েছে। "কাঁচা" নোড উল্লেখযোগ্যভাবে দ্রুত।

আমি এটি চেষ্টা করে দেখিনি, তবে একটি নতুন কাঠামো রয়েছে যা "কাঁচা" নোডের পারফরম্যান্সের খুব কাছাকাছি চলে আসে: https://github.com/aerojs/aero

(এই পৃষ্ঠায় মানদণ্ড দেখুন)

আপডেট: এখানে কিছু পরিসংখ্যান রয়েছে: https://github.com/blitzprog/webserver-benchmark

Node:
    31336.78
    31940.29
Aero:
    29922.20
    27738.14
Restify:
    19403.99
    19744.61
Express:
    19020.79
    18937.67
Koa:
    16182.02
    16631.97
Koala:
    5806.04
    6111.47
Hapi:
    497.56
    500.00

আপনি দেখতে পাচ্ছেন, সর্বাধিক জনপ্রিয় নোড.জেএস ফ্রেমওয়ার্কগুলিতে ওভারহেডগুলি খুব তাৎপর্যপূর্ণ!


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