আমি কাজের সময় নোড.জেএস ব্যবহার করি এবং এটি খুব শক্তিশালী বলে মনে করি। নোড.জেএস বর্ণনার জন্য একটি শব্দ চয়ন করতে বাধ্য করে আমি বললাম "আকর্ষণীয়" (যা নিখুঁত ইতিবাচক বিশেষণ নয়)। সম্প্রদায়টি প্রাণবন্ত এবং ক্রমবর্ধমান। জাভাস্ক্রিপ্ট, এর অদ্ভুততা সত্ত্বেও কোড করার জন্য দুর্দান্ত ভাষা হতে পারে And এবং আপনি প্রতিদিন "সেরা অনুশীলন" এবং নিজের কাঠামোগত কোডের নিদর্শনগুলি সম্পর্কে নিজের ধারণাটি পুনর্বিবেচনা করবেন। এই মুহুর্তে নোড.জেসগুলিতে প্রবাহিত ধারণার এক বিশাল শক্তি রয়েছে এবং এতে কাজ করা আপনাকে এই সমস্ত চিন্তাভাবনার কাছে উন্মোচিত করে - দুর্দান্ত মানসিক ভারোত্তোলন।
উত্পাদনে নোড.জেগুলি অবশ্যই নিশ্চিত, তবে "টার্ন-কী" মোতায়েন থেকে দূরে সম্ভবত ডকুমেন্টেশন দ্বারা প্রতিশ্রুতি দেওয়া হয়েছিল। নোড.জেএস ভি .6.x.x এর সাহায্যে "ক্লাস্টার" প্ল্যাটফর্মের সাথে একীভূত করা হয়েছে, প্রয়োজনীয় বিল্ডিং ব্লকগুলির একটি সরবরাহ করে, তবে আমার "প্রোডাকশন.জেএস" স্ক্রিপ্টটি লগ তৈরির মতো জিনিসগুলি পরিচালনা করার জন্য এখনও যুক্তিবিদ্যার 150 ডলার লাইন ডিরেক্টরি, মৃত শ্রমিকদের পুনর্ব্যবহার করা ইত্যাদি "গুরুতর" উত্পাদনের পরিষেবার জন্য আপনাকে আগত সংযোগগুলি থ্রটল করার জন্য এবং পিএইচপি-র জন্য অ্যাপাচি সমস্ত স্টাফ করার জন্য প্রস্তুত থাকতে হবে । সত্য কথা বলতে গেলে, রুবি অন রেলে এই সঠিক সমস্যাটি রয়েছে। এটি দুটি পরিপূরক ব্যবস্থার মাধ্যমে সমাধান করা হয়: 1) রুবেলকে রেল / নোডে লাগানো।লাইটড )। ওয়েবসার্ভার দক্ষতার স্ট্যাটিক কন্টেন্ট, অ্যাক্সেস লগিং লেখা URL গুলি পরিবেশন করতে পারেন, বিনষ্ট করা SSL , অ্যাক্সেস নিয়ম বলবত্, এবং একাধিক উপ-সেবা পরিচালনা করুন। প্রকৃত নোড পরিষেবাটিকে হিট করে এমন অনুরোধগুলির জন্য, ওয়েবসভারটি অনুরোধটি প্রক্সী করে। 2) ইউনিকর্নের মতো কাঠামো ব্যবহার করা যা শ্রমিক প্রক্রিয়া পরিচালনা করতে পারে, পর্যায়ক্রমে তাদের পুনর্ব্যবহার করা ইত্যাদি etc. আমি এখনও কোনও নোড.জেএস পরিবেশনকারী কাঠামো খুঁজে পাইনি যা সম্পূর্ণ বেকড বলে মনে হচ্ছে; এটি উপস্থিত থাকতে পারে তবে আমি এটি এখনও পাইনি এবং এখনও আমার হাতে রোলড "product.js" এ 150 ডলার লাইন ব্যবহার করছি।
এক্সপ্রেসের মতো ফ্রেমওয়ার্কগুলি পড়ার থেকে মনে হয় স্ট্যান্ডার্ড অনুশীলনটি হ'ল নড.জেএস পরিষেবার একটি জ্যাক-অফ-ট্রেডের মাধ্যমে সমস্ত কিছু পরিবেশন করা ... "অ্যাপ্লিকেশন (এক্সপ্রেস.স্ট্যাটিক (__ ডাইরনম + '/ পাবলিক'))" । লো-লোড পরিষেবা এবং উন্নয়নের জন্য, এটি সম্ভবত ঠিক আছে। তবে আপনি যখনই আপনার পরিষেবাতে বড় সময় বোঝা চাপানোর চেষ্টা করবেন এবং এটি 24/7 চালিয়ে যাবেন, আপনি দ্রুত প্রেরণাগুলি আবিষ্কার করবেন যা বড় সাইটগুলিকে ভাল বেকড, কঠোর সি-কোডের মতো চাপ দেয় like এনগিনেক্সের তাদের সাইটটিকে সামনে রেখে সমস্ত কিছু পরিচালনা করে hand স্থিতিশীল কন্টেন্ট অনুরোধগুলির (... আপনি অ্যামাজন ক্লাউডফ্রন্টের মতো সিডিএন স্থাপন না করা পর্যন্ত ))। কিছুটা হাস্যকর এবং উদ্বেগজনকভাবে নেতিবাচক এটিকে গ্রহণ করার জন্য, এই লোকটি দেখুন ।
নোড.জেএস আরও বেশি করে অ-পরিষেবা ব্যবহারের সন্ধান করছে। এমনকি আপনি ওয়েব সামগ্রীতে পরিবেশন করতে অন্য কিছু ব্যবহার করছেন, আপনি এখনও নিজের কোডটি সাজানোর জন্য এনপিএম মডিউলগুলি ব্যবহার করে নোড.জেএসকে বিল্ড সরঞ্জাম হিসাবে ব্যবহার করতে পারেন, এটি একটি একক সম্পত্তিতে সেলাইয়ের জন্য ব্রাউজারফি এবং এটি স্থাপনার জন্য ছোট করে দেওয়ার জন্য uglify-js ব্যবহার করতে পারেন । ওয়েবে মোকাবেলার জন্য, জাভাস্ক্রিপ্ট হ'ল একটি নিখুঁত প্রতিবন্ধকতা ম্যাচ এবং প্রায়শই এটি আক্রমণটির সবচেয়ে সহজতম পথে পরিণত করে। উদাহরণস্বরূপ, আপনি যদি জেএসওএন প্রতিক্রিয়া শুল্কের একগুচ্ছ মাধ্যমে ছাঁটাই করতে চান তবে আপনার আমার আন্ডারস্কোর-সিএলআই মডিউলটি ব্যবহার করা উচিত , কাঠামোগত ডেটার ইউটিলিটি-বেল্ট।
পেশাদারদের / কনস:
- প্রো: একটি সার্ভার লোকের জন্য, ব্যাকএন্ডে জাভাস্ক্রিপ্ট লেখা আধুনিক ইউআই প্যাটার্নগুলি শেখার "গেটওয়ে ড্রাগ"। আমি আর ক্লায়েন্ট কোড লেখার ভয় করি না।
- প্রো: যথাযথ ত্রুটি যাচাই করতে উত্সাহিত করার প্রবণতা (প্রোগ্রামারটিকে এটি পরিচালনা করার জন্য কার্যত সমস্ত কলব্যাক দিয়ে ত্রুটি ফিরিয়ে দেওয়া হয়েছে; এছাড়াও, async.js এবং অন্যান্য লাইব্রেরিগুলি "এই সাবটাস্কগুলির মধ্যে কোনওটি ব্যর্থ হলে" ব্যর্থ হয়) আদর্শ সিঙ্ক্রোনাস কোডের চেয়ে অনেক ভাল উদাহরণ )
- প্রো: কিছু আকর্ষণীয় এবং সাধারনত কঠোর কাজগুলি তুচ্ছ হয়ে যায় - যেমন ফ্লাইটে টাস্কগুলিতে স্ট্যাটাস পাওয়া, শ্রমিকদের মধ্যে যোগাযোগ করা, বা ক্যাশে স্থিতি ভাগ করা
- প্রো: শক্ত প্যাকেজ ম্যানেজারের উপর ভিত্তি করে বিশাল সম্প্রদায় এবং প্রচুর দুর্দান্ত লাইব্রেরি (এনপিএম)
- কন: জাভাস্ক্রিপ্টের কোনও মানক গ্রন্থাগার নেই। আপনি কার্যকারিতা আমদানিতে এতটা অভ্যস্ত হয়ে পড়েছেন যে আপনি যখন JSON.parse ব্যবহার করেন বা এমন কোনও পদ্ধতিতে অন্য বিল্ড ব্যবহার করেন যা কোনও এনপিএম মডিউল যুক্ত করার প্রয়োজন হয় না it এর অর্থ হ'ল প্রতিটি কিছুর পাঁচটি সংস্করণ রয়েছে। এমনকি নোড.জেএস "কোর" এর অন্তর্ভুক্ত মডিউলগুলির আরও পাঁচটি রূপ রয়েছে আপনার যদি ডিফল্ট প্রয়োগে অসন্তুষ্ট হয়। এটি দ্রুত বিবর্তনের দিকে চালিত করে, তবে কিছুটা বিভ্রান্তির সৃষ্টি করে।
একটি সাধারণ এক-প্রক্রিয়া-প্রতি-অনুরোধ মডেলের তুলনায় ( এলএএমপি) ) এর :
- প্রো: হাজার হাজার সক্রিয় সংযোগে স্কেলেবল। খুব দ্রুত এবং খুব দক্ষ। ওয়েব বহরের জন্য, এর অর্থ পিএইচপি বা রুবি বনাম প্রয়োজনীয় বাক্সের সংখ্যায় 10 এক্স হ্রাস হতে পারে
- প্রো: সমান্তরাল নিদর্শনগুলি লেখা সহজ। কল্পনা করুন যে আপনাকে মেমক্যাচ থেকে তিনটি (বা এন) ব্লব আনতে হবে । পিএইচপি-তে এটি করুন ... আপনি কি প্রথমে প্রথম ব্লব, তারপরে দ্বিতীয়, তৃতীয়টি কোড লিখেছেন? বাহ, এটা ধীর। একটি বিশেষ পিইসিএল আছে জন্য সেই নির্দিষ্ট সমস্যাটি সমাধানের জন্য মডিউল রয়েছে, তবে আপনি যদি আপনার ডাটাবেস ক্যোয়ারের সাথে সমান্তরালে কিছু মেমক্যাচড ডেটা আনতে চান তবে কী হবে? নোড.জেজে, যেহেতু দৃষ্টান্তটি অবিচ্ছিন্ন, একটি ওয়েব অনুরোধ সমান্তরালভাবে একাধিক জিনিস করা খুব স্বাভাবিক।
- কন: সংশ্লেষীয় কোডের তুলনায় অ্যাসিঙ্ক্রোনাস কোডটি মূলত আরও জটিল এবং সমবায় বাস্তবায়নের অর্থ কী তা সম্পর্কে দৃ of় ধারণা না থাকলে বিকাশকারীদের পক্ষে আপ-ফ্রন্ট লার্নিং বক্ররেখা শক্ত হতে পারে। তবুও, লকিং সহ যে কোনও ধরণের মাল্টিথ্রেডেড কোড লেখার চেয়ে এটি কম কম।
- কন: যদি কোনও গণনা-নিবিড় অনুরোধটি উদাহরণস্বরূপ, 100 এমএসের জন্য চালিত হয় তবে এটি একই অনুরূপ নোড.জেএস প্রক্রিয়াতে পরিচালিত অন্যান্য অনুরোধগুলির প্রক্রিয়াজাতকরণ বন্ধ করবে ... একে, সমবায়-মাল্টিটাস্কিং । ওয়েব ওয়ার্কার্স প্যাটার্ন দিয়ে এটি প্রশমিত করা যেতে পারে (ব্যয়বহুল টাস্কটি মোকাবেলা করার জন্য একটি উপ-প্রসেস বন্ধ করে দেওয়া)। বিকল্পভাবে, আপনি নোড.জেস সংখ্যক কর্মী ব্যবহার করতে পারেন এবং কেবল প্রত্যেককে একযোগে একক অনুরোধ পরিচালনা করতে দেওয়া (এখনও যথেষ্ট দক্ষ কারণ কোনও প্রক্রিয়া পুনর্ব্যবহারযোগ্য নেই)।
- কন: একটি উৎপাদন ব্যবস্থা চালনা আরো অনেক কিছু একটি চেয়ে জটিল সিজিআই এ্যাপাচি + + পিএইচপি মত মডেল পার্ল , রুবি , ইত্যাদি অপরিচালিত ব্যতিক্রম সমগ্র প্রক্রিয়ার নামিয়ে আনব, যুক্তি গুরুত্বসহ এখন পুনরায় চালু করতে ব্যর্থ হয়েছে শ্রমিকদের (দেখুন ক্লাস্টার )। বগি নেটিভ কোড সহ মডিউলগুলি প্রক্রিয়াটিকে হার্ড-ক্র্যাশ করতে পারে। যখনই কোনও শ্রমিক মারা যায়, যে কোনও অনুরোধ এটি পরিচালনা করছিল তা বাদ দেওয়া হয়, সুতরাং একটি বাগি এপিআই সহজেই অন্যান্য সংযুক্ত এপিআইয়ের জন্য পরিষেবা হ্রাস করতে পারে।
জাভা / সি # / সি (সি? সত্যই?) তে একটি "আসল" পরিষেবা লেখার তুলনায়
- প্রো: নোড.জেজে অ্যাসিঙ্ক্রোনাস করা অন্য কোথাও থ্রেড-সুরক্ষা করার চেয়ে সহজ এবং যুক্তিযুক্তভাবে আরও বেশি সুবিধা প্রদান করে। নোড.জেএস এখন পর্যন্ত সবচেয়ে কম বেদনাদায়ক অ্যাসিনক্রোনাস দৃষ্টান্ত হিসাবে কাজ করেছি good ভাল গ্রন্থাগারগুলির সাথে এটি সিঙ্ক্রোনাস কোড লেখার চেয়ে কিছুটা শক্ত।
- প্রো: কোনও মাল্টিথ্রেডিং / লকিং বাগ নেই। সত্য, আপনি আরও ভার্বোজ কোড লেখার ক্ষেত্রে বিনিয়োগ করেন যা কোনও অবরুদ্ধ ক্রিয়াকলাপ ছাড়াই একটি উপযুক্ত অ্যাসিনক্রোনাস ওয়ার্কফ্লো প্রকাশ করে। এবং আপনাকে কিছু পরীক্ষা লিখতে হবে এবং জিনিসটি কাজ করতে হবে (এটি একটি স্ক্রিপ্টিং ভাষা এবং ফ্যাট ফিঙ্গিং ভেরিয়েবলের নামগুলি কেবল ইউনিট-পরীক্ষার সময় ধরা পড়ে)। কিন্তু, আপনি একবার এটি কাজ করে নিলে, হাইজেনব্যাগগুলির পৃষ্ঠের অঞ্চল - এক মিলিয়নে একবারে উদ্ভাসিত অদ্ভুত সমস্যা - যা পৃষ্ঠের অঞ্চলটি অনেক নিচু। নোড.জেএস কোড লেখার করগুলি কোডিং পর্বে ভারীভাবে লোড করা হয়। তারপরে আপনি স্থিতিশীল কোডটি দিয়ে শেষ করবেন।
- প্রো: কার্যকারিতা প্রকাশ করার জন্য জাভাস্ক্রিপ্ট অনেক বেশি লাইটওয়েট। এটি শব্দের মাধ্যমে প্রমাণ করা শক্ত, তবে জেএসএন , ডায়নামিক টাইপিং, ল্যাম্বদা স্বরলিপি, প্রোটোটাইপাল উত্তরাধিকার, লাইটওয়েট মডিউলগুলি যাই হোক না কেন ... একই ধারণাগুলি প্রকাশ করার জন্য এটি কেবল কম কোড গ্রহণ করার ঝোঁক রাখে।
- কন: সম্ভবত আপনি সত্যিই জাভাতে কোডিং পরিষেবাদির মতো?
জাভাস্ক্রিপ্ট এবং নোড.জেএস সম্পর্কে অন্য দৃষ্টিভঙ্গির জন্য, জাভা থেকে নোড.জেএস , জাভা বিকাশকারীদের ইমপ্রেশন এবং নোড.জেএস শেখার অভিজ্ঞতার উপর একটি ব্লগ পোস্ট দেখুন check
মডিউল
নোড বিবেচনা করার সময়, মনে রাখবেন যে আপনার জাভাস্ক্রিপ্ট লাইব্রেরি পছন্দ আপনার অভিজ্ঞতা সংজ্ঞায়িত করবে । বেশিরভাগ লোক কমপক্ষে দু'জন, একটি অ্যাসিনক্রোনাস প্যাটার্ন সহায়ক (স্টেপ, ফিউচারস, অ্যাসিঙ্ক) এবং একটি জাভাস্ক্রিপ্ট চিনির মডিউল ( অ্যান্ডস্কোর.জেএস ) ব্যবহার করেন।
সহায়ক / জাভাস্ক্রিপ্ট চিনি:
- অ্যান্ডস্কোর.জেএস - এটি ব্যবহার করুন। সপ্তাহের দিন. এটি _.isString (), এবং _.isArray () এর মতো স্টাফ দিয়ে আপনার কোডটিকে সুন্দর এবং পঠনযোগ্য করে তোলে। আপনি কীভাবে অন্যথায় নিরাপদ কোড লিখতে পারেন তা আমি সত্যিই নিশ্চিত নই। এছাড়াও, বর্ধিত কমান্ড-লাইন-ফু-র জন্য, আমার নিজের ইন্ডোরস্কোর-সিএলআই দেখুন ।
অ্যাসিঙ্ক্রোনাস প্যাটার্ন মডিউল:
- পদক্ষেপ - সিরিয়াল এবং সমান্তরাল ক্রিয়াগুলির সংমিশ্রণ প্রকাশ করার জন্য একটি খুব মার্জিত উপায়। আমার ব্যক্তিগত পুনরুদ্ধার। স্টেপ কোডটি কেমন দেখায় আমার পোস্টটি দেখুন ।
- ফিউচারস - প্রয়োজনীয়তার মাধ্যমে অর্ডারটি প্রকাশ করার জন্য আরও অনেক নমনীয় (এটি কি সত্যিই ভাল জিনিস?) উপায়। "স্টার্ট এ, বি, সি সমান্তরালে শুরু করতে পারে। যখন এ, এবং বি শেষ হয়, এ বি শুরু করুন। যখন এ, এবং সি শেষ হয়, এসি শুরু করুন।" আপনার কর্মপ্রবাহে বাগগুলি এড়াতে যেমন নমনীয়তার জন্য আরও যত্নের প্রয়োজন (যেমন কলব্যাক কখনও কল করবেন না বা একাধিকবার কল করবেন না)। ফিউচার ব্যবহার করার বিষয়ে রায়নসের পোস্টটি দেখুন (এটি সেই পোস্ট যা আমাকে "ফিউচার" তৈরি করেছে)।
- অ্যাসিঙ্ক - প্রতিটি প্যাটার্নের জন্য একটি পদ্ধতি সহ আরও প্রচলিত লাইব্রেরি library পদক্ষেপে ধর্মান্তরিত হওয়ার আগে এবং পরে উপলব্ধি হওয়ার আগেই আমি এটি দিয়ে শুরু করেছি যে অ্যাসিঙ্কের সমস্ত নিদর্শন একক আরও পাঠযোগ্য দৃষ্টান্তের সাথে ধাপে প্রকাশ করা যেতে পারে।
- টেমজেএস - ওকেসিপিড দ্বারা রচিত, এটি প্রাক-কম্পাইলার যা সিরিয়াল এবং সমান্তরাল কর্মপ্রবাহকে মার্জিতভাবে লেখার জন্য একটি নতুন ভাষার প্রাথমিক "প্রতীক্ষা" যুক্ত করে। প্যাটার্নটি আশ্চর্যজনক দেখাচ্ছে তবে এটি প্রাক-সংকলন প্রয়োজন। আমি এখনও এই এক সম্পর্কে আমার মন আপ করছি।
- স্ট্রিমলাইনজেএস - টেমজেএস প্রতিযোগী itor আমি টেমের দিকে ঝুঁকছি, তবে আপনি নিজের মন তৈরি করতে পারেন।
বা অ্যাসিক্রোনাস লাইব্রেরি সম্পর্কে সমস্ত পড়তে, লেখকদের সাথে এই প্যানেল-সাক্ষাত্কারটি দেখুন ।
ওয়েব ফ্রেমওয়ার্ক:
- ওয়েব সাইটগুলি সংগঠিত করার জন্য রেলস-এস্ক কাঠামোর উপর গ্রেট রুবি এক্সপ্রেস করুন। এটি জ্যাডকে এক্সএমএল / এইচটিএমএল টেম্প্লেটিং ইঞ্জিন হিসাবে ব্যবহার করে , যা HTML কে বিল্ডিংয়ে কম বেদনাদায়ক করে তোলে, প্রায় মার্জিতও করে তোলে।
- jQuery প্রযুক্তিগতভাবে কোনও নোড মডিউল নয়, jQuery দ্রুত ক্লায়েন্ট-পার্শ্ব ব্যবহারকারী ইন্টারফেসের জন্য একটি ডি-ফ্যাক্টো স্ট্যান্ডার্ড হয়ে উঠছে। jQuery সিওএস-এর মতো নির্বাচকদের ডিওএম উপাদানগুলির সেটগুলির জন্য 'ক্যোয়ারী' দিতে সরবরাহ করে যা তারপরে (সেট হ্যান্ডলার, বৈশিষ্ট্য, শৈলী ইত্যাদি) চালিত হতে পারে। একই শিরা বরাবর, টুইটারের বুটস্ট্র্যাপ সিএসএস কাঠামো, একটি এমভিসি প্যাটার্নের জন্য ব্যাকবোন.জেএস এবং ব্রাউজারফাই.জে আপনার সমস্ত জাভাস্ক্রিপ্ট ফাইলগুলিকে একটি ফাইলে সেলাই করতে। এই মডিউলগুলি সমস্ত ডি-ফ্যাক্টো স্ট্যান্ডার্ডে পরিণত হচ্ছে সুতরাং আপনার যদি সেগুলি না শুনে তবে আপনার অন্তত তাদের পরীক্ষা করে নেওয়া উচিত।
পরীক্ষামূলক:
- জেএসহিন্ট - অবশ্যই ব্যবহার করা উচিত; আমি প্রথমে এটি ব্যবহার করি নি যা এখন বোধগম্য মনে হয়। জেএসলিন্ট জাভা-র মতো সংকলিত ভাষার সাথে আপনি যে মৌলিক যাচাইকরণগুলি পেয়েছেন তা গুচ্ছ যোগ করে। মেলানো বন্ধনী, অঘোষিত ভেরিয়েবল, অনেকগুলি আকার এবং আকারের টাইপ os আমি যাকে বলে "এনাল মোড" বলি তার বিভিন্ন রূপ আপনিও চালু করতে পারেন যেখানে আপনি শ্বেতক্ষেত্রের শৈলী যাচাই করেন এবং কোনটি নয়, যা আপনার চায়ের কাপের মতো হলে ঠিক - তবে আসল মানটি সঠিক লাইন নম্বরটিতে তাত্ক্ষণিক প্রতিক্রিয়া পাওয়া থেকে আসে যেখানে আপনি আপনার কোডটি চালনা না করে এবং আপত্তিকর লাইনে আঘাত না করে ")" ... একটি ক্লোজিং ভুলে গেছেন। "JSHint" র আরো-কনফিগারযোগ্য বৈচিত্র হয় ডগলাস Crockford এর JSLint ।
- মানতগুলির প্রতি মোচা প্রতিযোগী যা আমি পছন্দ করতে শুরু করি। উভয় ফ্রেমওয়ার্কগুলি বেসিকগুলি যথেষ্ট ভালভাবে পরিচালনা করে তবে জটিল প্যাটার্নগুলি মোচায় প্রকাশ করা সহজতর হতে থাকে।
- মানত মানত সত্যিই বেশ মার্জিত। এবং এটি একটি সুন্দর প্রতিবেদন (--spec) প্রিন্ট করে যা আপনাকে দেখায় যে কোন পরীক্ষার কেস পাস / ব্যর্থ হয়েছে। এটি শিখতে 30 মিনিট ব্যয় করুন এবং আপনি ন্যূনতম প্রচেষ্টা দিয়ে আপনার মডিউলগুলির জন্য প্রাথমিক পরীক্ষা তৈরি করতে পারেন।
- বোকচন্দর - মস্তিষ্কহীন HTML এবং জাভাস্ক্রিপ্ট ব্যবহার করার জন্য পরীক্ষা JSDom একটি ভার্চুয়াল "ব্রাউজার" হিসাবে। খুব শক্তিশালী জিনিস। ইন-ব্রাউজার কোডের বজ্রপাতের দ্রুততম ডিস্ট্রিমেন্টিক পরীক্ষাগুলি পেতে এটি রিপ্লির সাথে একত্রিত করুন ।
- কীভাবে পরীক্ষার "সম্পর্কে" চিন্তা করতে হবে তার একটি মন্তব্য:
- পরীক্ষাটি অ-.চ্ছিক। জাভাস্ক্রিপ্টের মতো গতিময় ভাষার সাথে, খুব কম স্ট্যাটিক চেক রয়েছে। উদাহরণস্বরূপ, এমন একটি পদ্ধতিতে দুটি পরামিতি পাস করা 4 যা প্রত্যাশা করে কোডটি কার্যকর না হওয়া পর্যন্ত ভাঙবে না। জাভাস্ক্রিপ্টে বাগ তৈরি করার জন্য খুব কম বার। সংকলিত ভাষাগুলির সাথে যাচাইয়ের ফাঁক তৈরি করতে প্রাথমিক পরীক্ষাগুলি প্রয়োজনীয়।
- বৈধতা ভুলে যান, কেবল আপনার কোডটি কার্যকর করুন। প্রতিটি পদ্ধতির জন্য, আমার প্রথম বৈধতা কেসটি "কিছুই বিরতি না" এবং এটিই প্রায়শই প্রায়শই জ্বলতে থাকে। আপনার কোডটি ৮০% বাগের ছোঁড়া ছাড়াই চলে বলে প্রমাণ করে এবং আপনার কোডের আত্মবিশ্বাসকে উন্নত করতে এমন অনেক কিছু করবে যে আপনি নিজেকে পিছনে ফিরে যাবেন এবং আপনাকে এড়িয়ে যাওয়া সংখ্যক বৈধতা যাচাই করতে পারবেন adding
- ছোট শুরু করুন এবং জড় বাঁধা ভেঙে দিন। আমরা সবাই অলস, এবং সময়ের জন্য চাপা পড়েছি এবং "অতিরিক্ত কাজ" হিসাবে টেস্টিং দেখতে সহজ easy তাই ছোট শুরু। পরীক্ষার কেস 0 লিখুন - আপনার মডিউলটি লোড করুন এবং সাফল্যের প্রতিবেদন করুন। আপনি যদি নিজেকে এই আরও অনেক কিছু করতে বাধ্য করেন তবে পরীক্ষার ক্ষেত্রে অন্তর্নিহিত বাধা ভেঙে যায়। ডকুমেন্টেশন পড়া সহ এটি আপনার প্রথম বার করতে <30 মিনিট। এখন পরীক্ষার কেস 1 লিখুন - আপনার পদ্ধতিগুলির মধ্যে একটিতে কল করুন এবং "কিছুই ভাঙবে না" যাচাই করুন, এটি হ'ল আপনি কোনও ত্রুটি ফিরে পান না। পরীক্ষার ক্ষেত্রে 1 আপনাকে এক মিনিটেরও কম সময় নেয়। জড়তা চলে যাওয়ার সাথে সাথে আপনার পরীক্ষার কভারেজটি ক্রমবর্ধমানভাবে বাড়ানো সহজ হয়ে যায়।
- এখন আপনার কোডগুলি দিয়ে আপনার পরীক্ষাগুলি বিকাশ করুন। মক সার্ভার এবং এই সমস্ত কিছুর সাথে "সঠিক" শেষ-শেষের পরীক্ষাটি দেখতে কেমন তা দেখে ভয় দেখাবেন না। কোড সহজ শুরু হয় এবং নতুন কেসগুলি পরিচালনা করতে বিকশিত হয়; পরীক্ষাও করা উচিত। আপনি আপনার কোডে নতুন কেস এবং নতুন জটিলতা যুক্ত করার সাথে সাথে নতুন কোডটি ব্যবহারের জন্য পরীক্ষার কেসগুলি যুক্ত করুন। আপনি বাগগুলি খুঁজে পেতে, ত্রুটিযুক্ত কোডটি coverাকতে যাচাইকরণ এবং / অথবা নতুন কেস যুক্ত করুন। আপনি যখন ডিবাগিং করছেন এবং কোনও কোডের টুকরোয় আত্মবিশ্বাস হারিয়ে ফেলছেন, ফিরে যান এবং পরীক্ষাগুলি যুক্ত করে প্রমাণ করুন যে এটি আপনাকে যা মনে করে তা করছে। উদাহরণস্বরূপ ডেটার স্ট্রিং ক্যাপচার করুন (আপনি যে কলগুলিতে কল করেন এমন অন্য পরিষেবাদি থেকে, ওয়েবসাইটগুলি যা আপনি স্ক্র্যাপ করেন, যাই হোক না কেন) এবং আপনার পার্সিং কোডে এগুলি খাওয়ান। এখানে কয়েকটি কেস, সেখানে উন্নত বৈধতা এবং আপনি অত্যন্ত নির্ভরযোগ্য কোড সহ শেষ করবেন।
এছাড়াও, প্রস্তাবিত নোড.জেএস মডিউলগুলির অফিসিয়াল তালিকাটি দেখুন । তবে, গিটহাবের নোড মডিউলগুলি উইকি অনেক বেশি সম্পূর্ণ এবং একটি ভাল সংস্থান।
নোড বোঝার জন্য, কয়েকটি মূল নকশা পছন্দ বিবেচনা করা সহায়ক:
নোড.জেএস হ'ল ইভেন্ট ভিত্তিক এবং আশ্বাসপ্রাপ্ত / নন-। ইভেন্টগুলি, আগত এইচটিটিপি সংযোগের মতো একটি জাভাস্ক্রিপ্ট ফাংশন বন্ধ করে দেবে যা কিছুটা কাজ করে এবং অন্যান্য অ্যাসিনক্রোনাস কাজগুলিকে বন্ধ করে দেয় যেমন একটি ডাটাবেসে সংযোগ স্থাপন করা বা অন্য সার্ভার থেকে সামগ্রী টানতে। একবার এই কাজগুলি বন্ধ হয়ে গেলে, ইভেন্টের ফাংশন শেষ হয়ে যায় এবং নোড.জেগুলি আবার ঘুমিয়ে যায়। অন্য কোনও ঘটনার সাথে সাথে, যেমন ডাটাবেস সংযোগ স্থাপন করা হচ্ছে বা বাহ্যিক সার্ভার যেমন সামগ্রীটির সাথে প্রতিক্রিয়া জানায়, কলব্যাক ফায়ার করে এবং আরও জাভাস্ক্রিপ্ট কোড কার্যকর করে, আরও বেশি অ্যাসিনক্রোনাস কার্য (যেমন একটি ডাটাবেস ক্যোয়ারীর মতো) চালু করে দেয়। এইভাবে, নোড.জেএস সুখে একাধিক সমান্তরাল কর্মপ্রবাহের জন্য ক্রিয়াকলাপ চালিয়ে যাবে, যে কোনও সময়ে সময়ে যে কোনও ক্রিয়াকলাপ অবরুদ্ধ থাকবে। এই কারণেই নোড.জেএস হাজার হাজার যুগপত সংযোগ পরিচালনা করার জন্য দুর্দান্ত কাজ করে।
কেন অন্য সবার মতো সংযোগের জন্য কেবল একটি প্রক্রিয়া / থ্রেড ব্যবহার করবেন না?নোড.জেজে, একটি নতুন সংযোগ হ'ল খুব ছোট গাদা বরাদ্দ। একটি নতুন প্রক্রিয়া কাটাতে উল্লেখযোগ্যভাবে আরও মেমরি লাগে, কিছু প্ল্যাটফর্মগুলিতে একটি মেগাবাইট। তবে আসল ব্যয়টি প্রসঙ্গ-স্যুইচিংয়ের সাথে যুক্ত ওভারহেড। যখন আপনার 10 ^ 6 কার্নেল থ্রেড থাকে, কার্নেলটি পরবর্তী কাজটি কার্যকর করতে হবে তা নির্ধারণ করে অনেক কাজ করতে হবে। একগুচ্ছ কাজ লিনাক্সের জন্য ও (1) শিডিয়ুলার তৈরিতে চলে গেছে, তবে শেষ পর্যন্ত, সিপিইউয়ের জন্য প্রতিযোগিতামূলক 10 ^ 6 প্রসেসের চেয়ে একক ইভেন্ট-চালিত প্রক্রিয়া চালানোর পক্ষে এটি আরও সহজ উপায়। এছাড়াও, ওভারলোডের পরিস্থিতিতে, মাল্টি-প্রসেস মডেলটি অত্যন্ত খারাপ আচরণ করে, সমালোচনামূলক প্রশাসন ও পরিচালন পরিষেবাকে, বিশেষত এসএসএইচডি অনাহারে (এর অর্থ এটি কী স্ক্রুযুক্ত তা বুঝতে আপনি এমনকি বাক্সটিতে লগইন করতে পারবেন না)।
নোড.জেএস একক থ্রেডেড এবং লক বিনামূল্যে । নোড.জেএস, খুব ইচ্ছাকৃত ডিজাইনের পছন্দ হিসাবে কেবল প্রক্রিয়া অনুযায়ী একক থ্রেড থাকে। এ কারণে একাধিক থ্রেডে একসাথে ডেটা অ্যাক্সেস করা মূলত অসম্ভব। সুতরাং, কোন তালার প্রয়োজন হয় না। থ্রেড শক্ত। সত্যিই কঠিন। যদি আপনি এটি বিশ্বাস না করেন তবে আপনি পর্যাপ্ত থ্রেডযুক্ত প্রোগ্রামিং করেন নি। লক করা ডান পাওয়া শক্ত এবং এর ফলে ফলাফলগুলি খুঁজে পাওয়া সত্যিই শক্ত really লকস এবং মাল্টি-থ্রেডিং অপসারণ করায় বাগের মধ্যে অন্যতম নস্টিস্ট ক্লাস চলে যায়। এটি নোডের একক বৃহত্তম সুবিধা হতে পারে।
তবে আমি কীভাবে আমার 16 কোর বাক্সটির সুবিধা নেব?
দুটি উপায়:
- ইমেজ এনকোডিংয়ের মতো বড় ভারী গণনার কাজগুলির জন্য, নোড.জেএস শিশু প্রসেসগুলিকে জ্বালিয়ে দিতে বা অতিরিক্ত কর্মী প্রক্রিয়াগুলিতে বার্তা প্রেরণ করতে পারে। এই নকশায়, আপনার কাছে একটি থ্রেড ভারী গণনার কাজগুলি করা এবং অন্যান্য 15 টি সিপিইউ চিউইং করা ইভেন্টগুলি এবং এন প্রসেসগুলি পরিচালনা করে।
- ওয়েবসার্চিতে স্কেলিং থ্রুপুট জন্য, আপনার ক্লাস্টার ব্যবহার করে একটি কোরে একাধিক নোড.জেএস সার্ভার চালানো উচিত (নোড.জেএস ভি0.6.x সহ, এখানে সংযুক্ত সরকারী "ক্লাস্টার" মডিউলটি লার্নবুস্ট সংস্করণটি প্রতিস্থাপন করেছে যা রয়েছে একটি ভিন্ন এপিআই)। এই স্থানীয় নোড.জেএস সার্ভারগুলি তারপরে লোডকে ভারসাম্য রেখে নতুন সংযোগগুলি গ্রহণ করতে সকেটে প্রতিযোগিতা করতে পারে। একবার কোনও সংযোগ গৃহীত হয়ে গেলে, এটি ভাগ করে নেওয়া এই প্রক্রিয়াগুলির একটিতে দৃly়ভাবে আবদ্ধ হয়ে যায়। তত্ত্বগতভাবে, এটি খারাপ শোনাচ্ছে, তবে বাস্তবে এটি বেশ ভালভাবে কাজ করে এবং আপনাকে থ্রেড-নিরাপদ কোড লেখার মাথাব্যথা এড়াতে দেয়। এছাড়াও, এর অর্থ হ'ল নোড.জেস মেমরি ব্যান্ডউইথকে আরও কার্যকরভাবে ব্যবহার করে দুর্দান্ত সিপিইউ ক্যাশে স্নেহ লাভ করে।
নোড.জেএস আপনাকে ঘাম না ভাঙিয়ে কিছু সত্যই শক্তিশালী কাজ করতে দেয়। ধরুন আপনার কাছে নোড.জেএস প্রোগ্রাম রয়েছে যা বিভিন্ন ধরণের কাজ করে,কমান্ডগুলির জন্য টিসিপি পোর্টে শোনায়, কিছু চিত্রের এনকোড করে, যাই হোক না কেন। পাঁচটি লাইন কোডের সাথে আপনি এইচটিটিপি ভিত্তিক ওয়েব ম্যানেজমেন্ট পোর্টালে যুক্ত করতে পারেন যা সক্রিয় কার্যগুলির বর্তমান অবস্থা দেখায়। এটি করা সহজ:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(myJavascriptObject.getSomeStatusInfo());
}).listen(1337, "127.0.0.1");
এখন আপনি একটি ইউআরএল হিট করতে পারেন এবং আপনার চলমান প্রক্রিয়ার স্থিতি পরীক্ষা করতে পারেন। কয়েকটি বোতাম যুক্ত করুন এবং আপনার একটি "পরিচালনা পোর্টাল" রয়েছে। আপনার যদি চলমান পার্ল / পাইথন / রুবি স্ক্রিপ্ট থাকে তবে কেবল "পরিচালনা পোর্টালে নিক্ষেপ করা" ঠিক সহজ নয়।
তবে জাভাস্ক্রিপ্টটি শয়তান / মন্দ / মন্দ / স্প্যান-অফ-দ্য শয়তান নয়? জাভাস্ক্রিপ্টের কিছু অদ্ভুত অদ্ভুততা রয়েছে তবে "ভাল অংশগুলি" দিয়ে সেখানে খুব শক্তিশালী ভাষা রয়েছে এবং যে কোনও ক্ষেত্রে জাভাস্ক্রিপ্ট ক্লায়েন্টের (ব্রাউজার) ভাষা। জাভাস্ক্রিপ্ট এখানে থাকার জন্য; অন্যান্য ভাষাগুলি এটিকে আইএল হিসাবে লক্ষ্য করছে এবং বিশ্ব মানের প্রতিভা সর্বাধিক উন্নত জাভাস্ক্রিপ্ট ইঞ্জিন উত্পাদন করতে প্রতিযোগিতা করছে। ব্রাউজারে জাভাস্ক্রিপ্টের ভূমিকার কারণে, জাভাস্ক্রিপ্ট জ্বলজ্বল করে তুলতে প্রচুর পরিমাণে ইঞ্জিনিয়ারিং প্রচেষ্টা চালিত হচ্ছে। V8অন্তত এই মাসের জন্য সর্বশেষতম এবং সর্বশ্রেষ্ঠ জাভাস্ক্রিপ্ট ইঞ্জিন। এটি দক্ষতা এবং স্থিতিশীলতা উভয় ক্ষেত্রে স্ক্রিপ্টিংয়ের অন্যান্য ভাষা উড়িয়ে দেয় (রুবি আপনার দিকে তাকিয়ে)। এবং মাইক্রোসফ্ট, গুগল এবং মজিলায় সেরা জাভাস্ক্রিপ্ট ইঞ্জিন তৈরির প্রতিযোগিতা করার জন্য বিশাল দলগুলি নিয়ে এটি আরও ভাল হতে চলেছে (এটি এখন আর কোনও জাভাস্ক্রিপ্টের "দোভাষী" হিসাবে নেই যতগুলি আধুনিক ইঞ্জিন প্রচুর পরিমাণে করে অনেকগুলি জেআইটি করেহুডের অধীনে সংজ্ঞাটি কেবল এক্সিকিউট-একবার কোডের ফ্যালব্যাক হিসাবে ব্যাখ্যার সাথে)) হ্যাঁ, আমরা সকলেই আশা করি আমরা জাভাস্ক্রিপ্টের বেশ কয়েকটি বিজোড় ভাষা চয়ন করতে পারব, তবে এটি আসলে খুব খারাপ নয়। এবং ভাষাটি এতটাই নমনীয় যে আপনি সত্যিই জাভাস্ক্রিপ্ট কোডিং করছেন না, আপনি স্টেপ বা jQuery কোডিং করছেন - জাভাস্ক্রিপ্টে অন্য যে কোনও ভাষার চেয়ে লাইব্রেরিগুলি অভিজ্ঞতার সংজ্ঞা দেয়। ওয়েব অ্যাপ্লিকেশনগুলি তৈরি করতে, আপনাকে জাভাস্ক্রিপ্টটি বেশিরভাগ ক্ষেত্রেই জানতে হবে, তাই এটির সাথে সার্ভারে কোডিং করার ক্ষেত্রে এক ধরণের দক্ষতা-সেট সিনেরি রয়েছে। এটি আমাকে ক্লায়েন্ট কোড লেখার ভয় করে না।
তদুপরি, আপনি যদি জাভাস্ক্রিপ্টকে ঘৃণা করেন তবে আপনি কফি স্ক্রিপ্টের মতো সিনট্যাকটিক চিনি ব্যবহার করতে পারেন । বা গুগল ওয়েব টুলকিট (জিডাব্লুটি) এর মতো জাভাস্ক্রিপ্ট কোড তৈরি করা অন্য যে কোনও কিছু ।
জাভাস্ক্রিপ্টের কথা বলতে গেলে, "ক্লোজার" কী? - আপনি কল চেইনগুলি জুড়ে লেক্সিকালি স্কোপড ভেরিয়েবলগুলি বজায় রাখার জন্য খুব সুন্দর অভিনব উপায়। ;) এটার মত:
var myData = "foo";
database.connect( 'user:pass', function myCallback( result ) {
database.query("SELECT * from Foo where id = " + myData);
} );
// Note that doSomethingElse() executes _BEFORE_ "database.query" which is inside a callback
doSomethingElse();
দেখুন কীভাবে আপনি "মাইডাটা" কোনও অবজেক্টে স্ট্যাশ করার মতো অদ্ভুত কিছু না করে ব্যবহার করতে পারেন? এবং জাভা থেকে ভিন্ন, "মাইডাটা" ভেরিয়েবলটি কেবল পঠনযোগ্য হবে না। এই শক্তিশালী ভাষার বৈশিষ্ট্যটি অ্যাসিনক্রোনাস-প্রোগ্রামিংকে অনেক কম ভার্বোস এবং কম বেদনাদায়ক করে তোলে।
অ্যাসিঙ্ক্রোনাস কোড লেখা সর্বদা সাধারণ একক থ্রেডযুক্ত স্ক্রিপ্ট লেখার চেয়ে জটিল হতে চলেছে, তবে নোড.জেএস এর সাথে এটি এতটা শক্ত নয় এবং আপনি সহস্র সাম্প্রতিক সংযোগগুলির দক্ষতা এবং স্কেলাবিলিটি ছাড়াও প্রচুর উপকার পাবেন। ..