নোড.জেএস কি ব্যাকগ্রাউন্ড প্রসেসিংয়ের জন্য উপযুক্ত?


10

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

আমার এবং নোডের জন্য একটি বড় "জয়" হ'ল এটি ক্লায়েন্ট এবং সার্ভার উভয়ের জন্য জাভাস্ক্রিপ্ট ব্যবহার করে। আমি আমার দিনের চাকরিতে জাভা এবং জাভাস্ক্রিপ্টে কোড করি তবে রুবিতেও বেশ ভাল।

তবে, যেমনটি আমি বলেছিলাম, যেকোন জায়গায় একটি ভাষা ব্যবহার করা আকর্ষণীয় বলে মনে হচ্ছে এবং জেএস এই বিলটি ফিট করে বলে মনে হচ্ছে seems

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

মতামত প্রশংসা।

ধন্যবাদ


আপনি নোডের বিকল্প হিসাবেও ভার্ট.এক্সে দেখতে চাইতে পারেন ।
মাইকে

উত্তর:


13

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

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

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

//event CBs are more DOM-style than Node style and this isn't built-in Node file I/O
//keeping it simple and quick since I'll just get Node stuff wrong from memory
file.get('someFile.txt', function(e){
    e.fileObj.find('some snippet', function(e){
        someFinalCallBackHandler( e.snippetLocations );
    } );
} );

ভাগ্যক্রমে এটিকে আরও ভালভাবে পরিচালনা করার জন্য প্রচুর সরঞ্জাম এবং উদাহরণ রয়েছে। বেশিরভাগ প্রতিশ্রুতিবদ্ধ প্রক্রিয়াগুলির চারপাশে ঘোরাফেরা করে এবং কেবল একে অপরের কলব্যাকের প্রতিক্রিয়া বোঝাতে একটি ক্রিয়াকলাপের শৃঙ্খলাবদ্ধ করে কেবল একটি কুশলরে পিরিমিড স্টাডকে আপনার জন্য কুৎসিত পিরামিড স্টাফ দেয়।

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

রেলগুলি থেকে সবচেয়ে বড় পার্থক্যটি হ'ল জেএস কখনই রেলের মতো হওয়ার সম্ভাবনা নেই। আমরা এটির পক্ষে সক্ষম হয়ে ওঠার জন্য কোডের ঝোঁক যাইহোক আপনি এটি খুব দ্রুত চান তাই ফ্যাক্টর এবং আর্কিটেকচারের সাথে নিজেকে ঝুলানোর জন্য দড়িটি রয়েছে সাম্প্রতিক বছরগুলি পর্যন্ত জেএসে বেশ DIY Y আমি সেই স্বাধীনতা বলি, কিন্তু আমি বুঝতে পারি যে এটি অনেকটা দেবের কাছে আদর্শ হিসাবে দেখা যায় না।

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

তবে আপনার মূল প্রশ্নের উত্তর আরও স্পষ্টভাবে / সংক্ষিপ্তভাবে বলার জন্য : ব্যাকগ্রাউন্ড প্রক্রিয়াগুলির সাথে এটি কি ভাল?

হ্যাঁ, নোড মূলত ইভেন্ট এবং কলব্যাকের মাধ্যমে একটি অ্যাপ ড্রাইভিংয়ের মাধ্যমের সাথে ব্যাকগ্রাউন্ড প্রক্রিয়াজাত করে।


1
এখানে প্রচুর সাধারণ তথ্য রয়েছে, তবে আপনি নোড.জেএস এর অনুরোধগুলিকে সংবিধানে পরিচালনা করার সামর্থ্য সম্পর্কে কিছু বলেননি।
রবার্ট হার্ভে

ভাল যুক্তি. আমি সেখানে আরও কিছু ফোকাস রাখব।
এরিক রেপেন

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

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

এই উত্তরটি এতগুলি উত্সাহের দাবিদার
আমিন মোহাম্মদ

2

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


1

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

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

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

আরও মনে রাখবেন যে কিছু এন্টারপ্রাইজ ক্ষমতাতে নোড কিছুটা দুর্বল হতে পারে। উদাহরণস্বরূপ, এর লগিং গ্রন্থাগারগুলি জাভা এর সাথে তুলনা করে না। বর্তমানে এমন কোনও ভাল লগিং ফ্রেমওয়ার্ক নেই যা এমনকি সমর্থন করে এবং এমডিসি, যা অনুশীলনের মানে আপনাকে অনেক কিছু করতে হবে var logPrefix = userId + ": "

আমি কখনও কোনও বেসরকারী এনপিএম রেপো চালাইনি, আপনার কোড মালিকানাধীন কিনা তার উপর নির্ভর করে আপনার একটির প্রয়োজন হতে পারে।


1

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

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

পরামর্শ, স্ট্রিম ব্যবহার করে এমন মডিউলগুলিকে আটকে দিন। এটি সেই নির্দিষ্ট পদক্ষেপের জন্য মডিউলগুলিতে আপনার প্রসেসিংটিকে পাইপ করা সহজ করে তুলতে পারে। তুমি কেমন তাকান ঘটনা-স্ট্রীম ব্যবহার করা হয় নি: শ্বাসে-জেড জন্য নি: শ্বাসে বিল্ড টুল উদাহরণস্বরূপ, আপনি দেখতে পারেন এটা কিভাবে করতে সক্ষম।

সিএসভি-র জন্য, আপনি নোড- সিএসভি ব্যবহার করতে পারেন , যা প্রসেসরের স্ট্রিমে রেকর্ড পাইপ করার জন্য একটি বেস স্থাপনে বেশ ভাল।

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

দ্রষ্টব্য: এক্সএমএল-স্ট্রিমের মতো আরও প্রসেসর রয়েছে যা নীচে এক্সপেট (সি লাইব্রেরি) ব্যবহার করবে, যা আরও বেশি পারফরম্যান্স দিতে পারে, তবে বিল্ড পরিবেশ ছাড়াই কম পোর্টেবল।

সাধারণভাবে, এটি ব্যবহারে সত্যই আনন্দ হয়েছে ...

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