জাভাস্ক্রিপ্ট ত্রুটি পরিচালনার জন্য সেরা অনুশীলনগুলি কী কী?


137

আমি আমার জাভাস্ক্রিপ্ট একটি বিট আরো ত্রুটি প্রমাণ শুরু অপেক্ষায় থাকবো, এবং আমি ব্যবহার করে ডকুমেন্টেশন প্রচুর খোঁজার করছি try, catch, finally, এবং throw, কিন্তু আমি কখন এবং কোথায় ত্রুটি নিক্ষেপ করা বিশেষজ্ঞদের থেকে পরামর্শ একটি টন খোঁজার করছি।

  • কোডের প্রতিটি টুকরা কি চেষ্টা / ক্যাচে আবৃত করা উচিত?
  • ত্রুটিগুলি ধরা উচিত কোন সময়ে এই মত আরও পরামর্শ আছে ?
  • কোডটি উত্পাদনে নিঃশব্দে ব্যর্থ হওয়ার পরিবর্তে ত্রুটি বাড়াতে অসুবিধা আছে কি?
  • এটি এতদূর বাস্তবায়ন পর্যন্ত এসও তে স্পর্শ করা হয়েছে, তবে সার্ভার-লগিং জেএস ত্রুটিগুলি কার্যকর কৌশল হিসাবে রয়েছে?
  • আমার আবেদনে ফাঁদে ফেলার ভুল সম্পর্কিত আমার আর কিছু জানা উচিত?

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

আপনি দিতে পারেন কোন পরামর্শের জন্য ধন্যবাদ!


এটি অবশ্যই যদি কিছু ভুল হয়ে যায় এবং সম্ভাব্য ত্রুটি বার্তাগুলির ভলিউমটি কতটা ব্যতিক্রমীভাবে ব্যর্থ হয় তার উপর নির্ভর করে surely আপনি ব্যর্থ হতে চান না কারণ আপনার ত্রুটি লগিং ডিরেক্টরিটি এখন পূর্ণ আপনি? - আপনি এখানে কি একদম তাকান? stackoverflow.com/search?q=error+logging+javascript
mplungjan

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

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

1
এটি একটি ভাল প্রশ্ন জোশ, +1। চারপাশের সিনট্যাক্টিক পরামর্শের অনেক কিছুই, তবে আপনি যেমন বলেন যে এটি সহজ অংশ। এটি এই প্রশ্নের উত্তরে স্পষ্ট করা হয়েছে ( স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / ২৮২৫৪২//২ ) যেখানে এটি ব্যাখ্যা করা হয়েছে যে ব্যতিক্রমগুলি সাধারণভাবে জেএসে ব্যবহৃত হয় না এবং কারণগুলি দেওয়া হয়।
হোয়াইটনিল্যান্ড

উত্তর:


63

এন্টারপ্রাইজ জাভাস্ক্রিপ্ট ত্রুটি হ্যান্ডলিংয়ের স্লাইডগুলির এক বিশাল আকর্ষণীয় সেটটি http://www.devhands.com/2008/10/javascript-error-handling-and-general-best-p ੈਕਟices / এ পাওয়া যাবে

সংক্ষেপে এটি সংক্ষেপে:

  1. ধরে নিন আপনার কোডটি ব্যর্থ হবে
  2. সার্ভারে ত্রুটিগুলি লগ করুন
  3. আপনি, ব্রাউজার নয়, ত্রুটিগুলি পরিচালনা করবেন
  4. কোথায় ত্রুটি হতে পারে সনাক্ত করুন
  5. আপনার নিজের ত্রুটি নিক্ষেপ করুন
  6. মারাত্মক বনাম অ-মারাত্মক ত্রুটিগুলির পার্থক্য করুন
  7. একটি ডিবাগ মোড সরবরাহ করুন

স্লাইডগুলি আরও বিশদে যায় এবং সম্ভবত আপনাকে কিছু দিকনির্দেশ দেয়।

হালনাগাদ

উপরে উল্লিখিত উপস্থাপনাটি এখানে পাওয়া যাবে: http://www.slideshare.net/nzakas/enterprise- জাভাস্ক্রিপ্ট- অরর- হ্যান্ডলিং- উপস্থাপনা


24
ডিহ্যান্ডস লিঙ্কটি ভেঙে গেছে।
রায়ান গেটস

7
2017 এ যারা এটি পড়ে, তাদের কাছে আমি যুক্তি দিয়েছি যে আপনি স্লাইডগুলি থেকে খুব বেশি মূল্য পাবেন না - এই সংক্ষিপ্তসারটি আপনাকে 90% তথ্য দেয়। এটি এখনও মূল্যবান তথ্য। চিয়ার্স!
ফিলিপ হেবার্ট

29

ইয়াহুর নিকোলাস জাকাস! খ্যাতি অ্যাজাক্স এক্সপেরিয়েন্স ২০০৮ এন্টারপ্রাইজ ত্রুটি হ্যান্ডলিং ( স্লাইড ) নিয়ে একটি আলোচনা করেছিলেন , যাতে তিনি এরকম কিছু প্রস্তাব করেছিলেন:

function log(sev,msg) {
    var img = new Image();
    img.src = "log.php?sev=" +
        encodeURIComponent(sev) +
        "&msg=" + encodeURIComponent(msg);
}

// usage
log(1, "Something bad happened.")

// Auto-log uncaught JS errors
window.onerror = function(msg, url, line) {
    log(1, msg);
    return true;
}

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

আপনি যখন উইন্ডো.অররার কলগুলিতে লগিং শুরু করবেন, আপনি দুটি জিনিস লক্ষ্য করবেন:

  1. যদি আপনার সাইটটি মোটামুটি জটিল হয় তবে আপনি প্রচুর ত্রুটি লগ করতে চলেছেন
  2. আপনি অকেজো "উইন্ডো.অরারির সংজ্ঞায়িত: 0" বার্তাগুলির একগুচ্ছ দেখতে পাচ্ছেন

লগ এন্ট্রিগুলির টরেন্ট হ্রাস করা সার্ভারে লগ ইন করার আগে তীব্রতা এবং / অথবা একটি এলোমেলো সংখ্যার জন্য পরীক্ষার মতোই সহজ:

function log(sev,msg) {
    if (Math.random() > 0.1) return; // only log some errors

    var img = new Image();
    img.src = "log.php?sev=" +
        encodeURIComponent(sev) +
        "&msg=" + encodeURIComponent(msg);
}

"Undefined মধ্যে window.error: 0" বেহুদা পরিচালনা ত্রুটি আপনার সাইটে আর্কিটেকচারের উপর নির্ভর করে, কিন্তু সব আয়াক্স কল শনাক্ত করা এবং একটি ব্যতিক্রম নিক্ষেপ কিছু ব্যর্থ হয় (সম্ভবত ব্যবহার করে একটি স্ট্যাক ট্রেস ফিরে চেষ্টা করে দেখতে পারেন stacktrace.js )।


67
আমি জানি এটি একটি পুরানো প্রশ্ন, তবে এলোমেলোভাবে কিছু ত্রুটি উপেক্ষা করার পরামর্শ দেওয়া আমার মধ্যে সবচেয়ে খারাপ ধারণাগুলি।
jbabey

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

1
ডিবাগিং মোডে থাকা অবস্থায় লগিং ত্রুটিগুলি সম্ভবত উত্পাদন ত্রুটি প্রতিবেদনকে সীমাবদ্ধ করার মতোই গুরুত্বপূর্ণ, সুতরাং কেউ নোট করতে পারেন যে লগিংয়ের প্রান্তিকিকে সীমাবদ্ধ করে সেই মানটি পরিচালনার জন্য একটি সমাধান প্রয়োজন।
frattaro

2
@ নিকবুল আমি ২০১১-২০১২ এ ফিরে ফেসবুকস জাভাস্ক্রিপ্ট মডিউলগুলির একগুচ্ছ ইঞ্জিনিয়ার করেছিলাম; আমি এটি এটি খুঁজে পেয়েছি যেখানে।
জেনস রোল্যান্ড 15

1
@ নিকবুল সবেমাত্র আমার পুরানো ফাইলগুলি চেক করেছেন, এখনও এগুলি রয়েছে। আমি এই কৌশলটি ফেসবুক বুটলোডার মডিউলে পেয়েছি: if (global.logJSError) if (Math.random() < .01) logJSError('bootloader', {(স্বীকার করে যে কোডটি সমস্ত ত্রুটিগুলি থ্রোট্ট করে না, কেবলমাত্র নির্দিষ্ট সময়ের টাইমআউট ত্রুটিগুলি)
জেনস রোল্যান্ড

7

আইএইচএমও, আপনি জাভা স্ক্রিপ্টে ত্রুটি পরিচালনা করার মতো অন্যান্য বেশ কয়েকটি ভাষায় (এএফাইক: পাইথন, জাভা) ব্যবহার করা উচিত।

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

  • আপনি যে কোডটি মোড়তে চান তার অংশটি পুরো অ্যালগরিদমের মূল অংশ । যদি এটি ব্যর্থ হয় তবে এটি করতে পারে:

    • কোডগুলির পরবর্তী অংশে ত্রুটি তৈরি করুন (উদাহরণস্বরূপ কারণ একটি ভেরি অনুপস্থিত ...)
    • পৃষ্ঠাটি প্রত্যাশিতভাবে দেখতে না পেলেন (সামগ্রী বা সিএসএসের উপর প্রভাব)
    • ফলাফলগুলি ব্যবহারকারীর কাছে অদ্ভুত প্রদর্শিত হবে (কোড আচরণের উপর প্রভাব)
  • আপনি জানেন যে কোড আপনি লিখছেন তা প্রতিটি ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ নয়

  • আপনি পরিকল্পনা করেছিলেন যে কোডটি ব্যর্থ হতে পারে (কারণ এটি যদি তখন ... তবে ... ব্লকগুলি দিয়ে কাজ করা উচিত তা পরীক্ষা করার কোনও উপায় নেই)
  • এবং আপনি যখন চূড়ান্ত ব্যবহারকারীকে বিরক্ত না করে ডিবাগ করতে চান তখনও

অবশেষে, জাভাস্ক্রিপ্ট বিশেষজ্ঞদের দিতে অন্যান্য উপাদান থাকতে পারে।

আমার 2 সেন্ট বাক্সে,

শুভেচ্ছা সহ,

ম্যাক্স


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

5

অন্যান্য উত্তরগুলির পাশাপাশি: একটি গুরুত্বপূর্ণ বিষয় জাভাস্ক্রিপ্ট ত্রুটিযুক্ত বস্তু এবং ফাংশন পরামিতিগুলিতে উপলভ্য প্রসঙ্গ ডেটা ব্যবহারwindow.onerror করা।

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

এমনকি কনসোল অবজেক্টেও সমস্যা হতে পারে । আমি এই দ্বারা অনুপ্রাণিত একটি কাস্টম উইন্ডো.অনরর ফাংশন এবং এই কোড দ্বারা অনুপ্রাণিত কোনও প্রদত্ত স্ট্যান্ডার্ড ত্রুটিযুক্ত বস্তুর সন্ধান করতে একটি বিশেষ ফাংশন ব্যবহার করি ।

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

এছাড়াও ব্যবহার করবেন না ব্যবহার throw 'My message', ব্যবহার throw new Error('My message'), আপনি এমনকি কাস্টম ত্রুটি থাকতে পারে, পড়া এই নিবন্ধটি

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

এখানে একটি গাইড

আপনার লিবস এবং ফ্রেমওয়ার্কগুলিকে ইন্টারসেপ্টরের মতো সাধারণ ত্রুটি হ্যান্ডলিং ব্যবহার সম্পর্কেও ভাবুন:

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