কোডের রাইটিং পদ্ধতিতে ক্রমান্বয়ে স্থানান্তর কী সিস্টেমের কার্যকারিতাকে প্রভাবিত করেছিল? এবং আমার যত্ন নেওয়া উচিত?


35

: TD; ডিআর:

আমি যা জিজ্ঞাসা করছিলাম সে সম্পর্কে কিছুটা বিভ্রান্তি ছিল, সুতরাং এই প্রশ্নের পিছনে ড্রাইভিং ধারণাটি এখানে:

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

এবং প্রশ্ন সম্পর্কে নয় ...

অণু-অপ্টিমাইজেশান, অকাল অপ্টিমাইজেশন ইত্যাদি সম্পর্কে নয়, এটি "এই বা সেই অংশটিকে মৃত্যুর দিকে অনুকূলকরণ" নয়।

এটা কি হয় তারপর?

এটি সামগ্রিক পদ্ধতি এবং কৌশল এবং সময়ের সাথে সাথে লেখার কোড সম্পর্কে চিন্তাভাবনার পদ্ধতি সম্পর্কে:

  • "নির্ভরতা হিসাবে আপনার কোডটিতে এই কোডটি ইনজেক্ট করুন"
  • "প্রতি ক্লাসে একটি ফাইল লিখুন"
  • "আপনার ডাটাবেস, নিয়ামক, ডোমেন থেকে আপনার দৃষ্টিভঙ্গি পৃথক করুন"।
  • স্প্যাগেটি একজাতীয় একক কোডব্লকটি লিখবেন না, তবে একসাথে কাজ করে এমন অনেকগুলি পৃথক মডুলার উপাদান লিখুন

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

আসল প্রশ্ন অনুসরণ:

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

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

এটি "পুরানো" বা "পুরানো" বা "স্প্যাগেটি" কোডিং অনুশীলনের সাথে তুলনা করে যেখানে আপনার 2500 লাইনের বিস্তৃত পদ্ধতি রয়েছে এবং বড় শ্রেণি এবং godশ্বর বস্তু সবকিছু করছেন।

আমার প্রশ্নটি হ'ল:

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

বিস্তারিত

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

সুতরাং, আমার প্রশ্ন - কতটা ওভারহেড (স্থান এবং গতিতে) ভালভাবে পৃথককৃত কোড (শত শত ফাইল, শ্রেণি এবং নকশার ধরণ ইত্যাদিতে বিভক্ত কোড) প্রকৃতপক্ষে "একটি বড় পদ্ধতি রয়েছে যার সাথে তুলনা করে একটি একক ফাইলের মধ্যে সবকিছু ", এই ওভারহেডের কারণে?

স্পষ্টতার জন্য আপডেট:

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

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

আপডেট: একাধিক ফাইল

আমি এখন নতুন কোড লিখছি যা ধীরে ধীরে পুরাতন কোডটি প্রতিস্থাপন করছে। বিশেষত আমি উল্লেখ করেছি যে পুরানো ক্লাসগুলির মধ্যে একটি একটি ~ 3000 লাইন ফাইল ছিল (যেমন আগেই বলা হয়েছে)। এখন এটি বিভিন্ন ডিরেক্টরি জুড়ে অবস্থিত 15-20 ফাইলের একটি সেট হয়ে উঠছে, টেস্ট ফাইল সহ এবং পিএইচপি ফ্রেমওয়ার্ক সহ আমি কিছু জিনিস একসাথে আবদ্ধ করতে ব্যবহার করছি না। আরও ফাইল আসছে। যখন ডিস্ক আই / ও এর কথা আসে তখন একাধিক ফাইল লোড করা বড় ফাইল লোড করার চেয়ে ধীর হয়। অবশ্যই সমস্ত ফাইল লোড হয় না, প্রয়োজনীয় হিসাবে এগুলি লোড হয় এবং ডিস্ক ক্যাচিং এবং মেমরি ক্যাশে করার বিকল্প উপস্থিত রয়েছে এবং এখনও আমি বিশ্বাস করি যে মেমরির loading multiple filesচেয়ে বেশি প্রসেসিং লাগে loading a single file। আমি এটি আমার উদ্বেগের সাথে যুক্ত করছি।

আপডেট: নির্ভরতা সবকিছু ইনজেকশন

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

আপডেট 2: "আরও ফাইলগুলিতে কোড পৃথক করা" পারফরম্যান্সকে উল্লেখযোগ্যভাবে প্রভাবিত করে (কম্পিউটিংয়ের সমস্ত স্তরে)

compartmentalize your code into multiple filesপ্রভাবের দর্শন কীভাবে আজকের কম্পিউটিং (পারফরম্যান্স, ডিস্ক ব্যবহার, মেমরি পরিচালনা, সিপিইউ প্রসেসিং টাস্ক)?

আমি কথা বলছি

আগে...

একটি হাইপোথিটিক্যাল অথচ অতটা অতুলের অতীত নয়, আপনি সহজেই কোনও ফাইলের একটি মনো-ব্লক লিখতে পারতেন যার মধ্যে মডেল এবং ভিউ এবং নিয়ামক স্প্যাগেটি বা স্প্যাগেটি-কোডেড নেই, তবে এটি ইতিমধ্যে লোড হয়ে যাওয়ার পরে সমস্ত কিছু চালায় । সি কোড ব্যবহার করে অতীতে কয়েকটি মানদণ্ডগুলি করেছিলাম আমি জানতে পেরেছিলাম যে একটি একক 900Mb ফাইল মেমরির মধ্যে লোড করা এবং এটি একটি বৃহত্তর ছোট ছোট ফাইল লোড করা এবং এটি একটি ছোট শান্ত-খাবারের প্রক্রিয়াজাতকরণের চেয়ে বড় অংশে প্রক্রিয়া করা খুব দ্রুত is শেষ পর্যন্ত একই কাজ করছেন हिस्साগুলি।

.. এবং এখন*

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

কি?

আমি বিভিন্ন দিকগুলিতে আগ্রহী, মেশিনে পরিধান এবং টিয়ার যা অনেকগুলি পৃথক পৃথক ফাইলগুলিতে কোডকে বিভাগীয়করণের মাধ্যমে তৈরি করা হয়।

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

সিপিইউর জন্য এটির অর্থ সম্ভবত বিভিন্ন রেজিস্টারকে আরও প্রসঙ্গে স্যুইচ করা এবং লোড করা।

এই সাব-ব্লকে (আপডেট # 2) আমি একক ফাইলে যে একই কাজগুলি করতে পারে, একইসাথে একাধিক ফাইল ব্যবহার করে কীভাবে সিস্টেমের কার্য সম্পাদনকে প্রভাবিত করে সে সম্পর্কে আরও কড়া আগ্রহী।

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

POSTডোমেন অবজেক্টে রূপান্তরিত করে , বৈধতা সহ একটি এইচটিএমএল ফর্ম তৈরি করতে আমি সর্বশেষ এবং সর্বশ্রেষ্ঠ আধুনিক ওও অনুশীলনগুলির সাথে জেন্ডার ফর্ম এপিআই ব্যবহার করেছি ।

এটি তৈরি করতে আমার 35 টি ফাইল লেগেছিল।

35 files = 
    = 10 fieldsets x {programmatic fieldset + fieldset manager + view template} 
    + a few supporting files

এগুলির সমস্তই এএ কয়েকটি সাধারণ এইচটিএমএল + পিএইচপি + জেএস + সিএসএস ফাইলের সাথে প্রতিস্থাপিত হতে পারে, সম্ভবত মোট ৪ টি হালকা ওজনের ফাইল।

ইহা কি ভালো? এটা মূল্য? ... 35 টি ফাইল + লোভ করা 4 টি অসংখ্য জেনড জ্রেমেওক লাইব্রেরি ফাইলগুলি যেগুলি তাদের কাজ করে, 4 টি সাধারণ ফাইল বনাম কল্পনা করুন।


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

7
@ ড্যান: আপনি দয়া করে 1, 5 এবং 10 বছরের রক্ষণাবেক্ষণের পরে কোডটি বেঞ্চমার্ক করতে আপনার ক্যালেন্ডারে রাখতে পারেন। যদি মনে থাকে আমি ফলাফলগুলি আবার যাচাই করব :)
ম্যাটনজ

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

2
আপনার প্রকল্পের জন্য নির্দিষ্ট গতির প্রয়োজনীয়তা রয়েছে তা স্পষ্ট করতে। অথবা আপনি কি চান আপনার কোডটি "দ্রুততর!" যদি এটি পরে থাকে তবে আমি এটি নিয়ে চিন্তা করব না, কোড যা যথেষ্ট দ্রুত তবে বজায় রাখা সহজ কোডের চেয়ে অনেক বেশি ভাল যা দ্রুতের চেয়ে দ্রুত তবে এটি একটি গোলযোগ।
করম্যাক মুলহাল

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

উত্তর:


10

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

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

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

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

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

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

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


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

1
ব্যক্তিগতভাবে, আমি দেখতে পেলাম যে আরও "" আধুনিক "" কোডটি প্রোফাইলের পক্ষে কিছুটা সহজ ... কম রক্ষণাবেক্ষণযোগ্য ...
একে_এপ্রিল

25

চূড়ান্ত যত্ন ব্যতীত, এই উদ্বেগগুলির মতো মাইক্রো অপ্টিমাইজেশান অনাদায়ী কোডে বাড়ে।

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

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

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

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

শেষ পর্যন্ত তাই এটি জীবনচক্র পরিচালনায় নেমে আসে এবং "এটি দ্রুত তাই এটি সর্বদা দ্রুত হবে" "এর মতো সহজ নয়।

সর্বোপরি, ধীরে ধীরে সঠিক কোডটি দ্রুত ভুল কোডের চেয়ে অসীম দ্রুত।


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

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

17

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

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

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

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

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

বিশেষত ইনলাইনে একটি ভাল পঠন: http://www.gotw.ca/gotw/033.htm


আমার প্রশ্নের দৃষ্টিকোণ থেকে আগত, আমি সেহ প্রতি ইনলাইনিংয়ের উপর যেমন মনোনিবেশ করছি না, তবে সিপিইউ, বাস 'এবং' আই / ও'র সময় প্রক্রিয়াটি কোডের বিভিন্ন অংশের সাথে সংযোগ স্থাপনের জন্য "কোডিং ওয়্যারিং" -র দিকে দৃষ্টি নিবদ্ধ করছি। আমি অবাক হয়েছি যদি এমন কোনও পয়েন্ট থাকে যেখানে ৫০% বা তার বেশি কোড রয়েছে এবং আপনি চালিত করতে চান এমন আসল কোডের 50% রয়েছে। আমি কল্পনা করতে পারি যে কেউ যে কঠোর কোডটি লিখতে পারে তাতেও প্রচুর ঝলক রয়েছে এবং এটি জীবনের সত্যতা বলে মনে হয়। বিটস এবং বাইটস লেভেলে চলিত আসল কোডের বেশিরভাগটি হ'ল লজিস্টিক্স - এক স্থান থেকে অন্য স্থানে মান সরিয়ে নেওয়া, এক জায়গায় বা অন্য জায়গায় ঝাঁপিয়ে পড়া, এবং কেবল কখনও কখনও যোগ
ডেনিস

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

3
@ ডেনিস - একটি বিষয় বিবেচনা করার বিষয় হ'ল যে ওও ভাষায় প্রোগ্রামার লিখেছেন (ক + বি) এবং কোন কোড উত্পন্ন হয় (দুটি রেজিস্টারের একটি সহজ যোগ? প্রথমে স্মৃতি থেকে সরানো? কাস্টিং, তারপরে কোনও অবজেক্টের অপারেটরে +?) কল করে। সুতরাং প্রোগ্রামার স্তরের 'ছোট ফাংশন' মেশিন কোডে একবার রেন্ডারে ছোট কিছু হতে পারে।
মাইকেল কোহেন

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

12

এটি "পুরানো" বা "খারাপ" কোড অনুশীলনের সাথে তুলনা করে যেখানে আপনার 2500 লাইনের বিস্তৃত পদ্ধতি রয়েছে এবং বড় শ্রেণি সমস্ত কিছু করছে compared

আমি মনে করি না যে কেউ কখনও এটি করা একটি ভাল অনুশীলন বলে মনে করেন। এবং আমি লোকদের সন্দেহ করি যে এটি এটি সম্পাদনকারী কারণে করেছে।

আমার মনে হয় ডোনাল্ড নুথের বিখ্যাত উক্তিটি এখানে খুব প্রাসঙ্গিক:

আমাদের ছোট কার্যকারিতা সম্পর্কে ভুলে যাওয়া উচিত, সময়ের প্রায় 97% বলুন: অকাল অনুকূলতা হ'ল সমস্ত মন্দের মূল।

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


11

অভিজ্ঞ প্রোগ্রামারদের পাশাপাশি বর্তমান চিন্তাভাবনা শোনার জন্য আপনাকে যত্নবান হওয়া দরকার। যে লোকেরা বহু বছর ধরে বিশাল সফ্টওয়্যার নিয়ে কাজ করেছে তাদের অবদানের জন্য কিছু আছে।

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

  • এই ধারনা যে কোনও কোডের লাইনটি অন্য যে কোনও হিসাবে মোটামুটি সময় নেয়। উদাহরণস্বরূপ cout << endlবনাম a = b + c। পূর্বেরটি হাজারের চেয়ে বেশি সময় নেয় longer স্ট্যাকেক্সচেঞ্জের ফর্মটির অনেকগুলি প্রশ্ন রয়েছে "আমি এই কোডটি অনুকূল করার বিভিন্ন পদ্ধতি চেষ্টা করেছি, তবে এটি কোনও পার্থক্য বলে মনে হচ্ছে না কেন?" এর মাঝখানে যখন কোনও বড়-পুরানো ফাংশন কল আসে।

  • এই ধারণাটি যে কোনও ফাংশন বা পদ্ধতি কল, একবার লিখিত, অবশ্যই প্রয়োজনীয়। ফাংশন এবং পদ্ধতিগুলি কল করা সহজ, এবং কলিংটি বেশ কার্যকর। সমস্যা হ'ল তারা ক্রেডিট কার্ডের মতো। তারা আপনাকে সত্যিকারের চেয়ে বেশি ব্যয় করতে প্ররোচিত করে এবং আপনি যা ব্যয় করেছিলেন তা তারা লুকিয়ে রাখে। তার উপরে, বৃহত সফ্টওয়্যারটির বিমূর্ত স্তরগুলির উপর স্তর রয়েছে, সুতরাং প্রতিটি স্তরে কেবল 15% বর্জ্য থাকলেও 5 টিরও বেশি স্তরগুলি যা 2 এর ধীরগতির কারণের সাথে মিশ্রিত হয় এটির উত্তরটি কার্যকারিতা অপসারণ বা লিখন নয় বড় কাজগুলি, এই সমস্যাটির জন্য নিজেকে সতর্ক থাকতে এবং এটি নির্মূল করতে ইচ্ছুক এবং সক্ষম হওয়া হ'ল

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

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

... যখন আমি আরও চিন্তা করি আমি এটি যুক্ত করব।


8

সংক্ষিপ্ত উত্তর হল হ্যাঁ". এবং, সাধারণত, কোডটি কিছুটা ধীর হবে।

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

সংযোজন: সাধারণভাবে, ছোট, আরও ভাল স্ট্রাকচারড কোডটি মাল্টি-থ্রেডিংয়ের পক্ষে আরও সুসংহত হওয়া উচিত, বড় গতিবেগ পাওয়ার জন্য আপনার সর্বোত্তম উপায়।


1
আমি দেখতে পাচ্ছি না কেন Doubles থেকে স্যুইচ করতে আরও doubleভাল কাঠামোগত কোডের প্রয়োজন require
সুইভ

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

রেকর্ডটির জন্য, আমি এই উত্তরটি হ্রাসকারী ছিল না।
এসভিক

7

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

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


আমি আরও কল্পনা করেছি যে এএসএমের হার্ডওয়ারে আসলে চালানোর আগে ভাল অপ্টিমাইজেশন করা যেতে পারে।

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

আমি ধরে নিচ্ছি যে একটি কোডে আরও বেশি বেশি ফাংশন এবং আরও বেশি কিছু অবজেক্ট এবং ক্লাস যুক্ত করার ফলে ছোট কোড টুকরাগুলির মধ্যে আরও এবং আরও বেশি পরামিতি উত্তীর্ণ হবে।

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


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

পিএস: এই দুটি ক্রকফোর্ডের কথাবার্তা আমার মাথায় ছড়িয়ে পড়ে এবং আমি মনে করি তারা কিছুটা সম্পর্কিত। প্রথমটি হ'ল সুপার সংক্ষিপ্ত সিএস ইতিহাস (যা কোনও সঠিক বিজ্ঞানের সাথে জানা সর্বদা ভাল); এবং দ্বিতীয়টি হল আমরা কেন ভাল জিনিসকে প্রত্যাখ্যান করি।


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

4

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


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

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

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

কাঁচা সিপিইউ বেঞ্চমার্কের চেয়ে পারফরম্যান্সের আরও অনেক কিছুই রয়েছে। আমার এন্ড্রয়েড ফোনটি ঠিকঠাক কাজ করে, যখন এভি কোনও আপডেট স্ক্যান করে এবং তারপরে এটি কেবল আমার চেয়ে বেশি সময় ধরে স্তব্ধ হয় এবং এটি একটি কোয়াড-কোর 2 জিবি র‌্যাম মডেল হিসাবে উপস্থিত থাকে! আজ ব্যান্ডউইথ (নেটওয়ার্ক বা মেমরি যাই হোক না কেন) সম্ভবত প্রধান বাধা। আপনার সুপারফেস সিপিইউ সম্ভবত 99% সময় এর থাম্বগুলিকে বার করে দিচ্ছে এবং সামগ্রিক অভিজ্ঞতা এখনও খারাপ।
gbjbaanb

4

ঠিক 20+ বছর আগে, যা আমি অনুমান করছি যে আপনি নতুনকে कॉल করছেন না এবং "পুরানো বা খারাপ" নন, নিয়মটি ছিল একটি মুদ্রিত পৃষ্ঠায় ফিট করার জন্য ফাংশনগুলি যথেষ্ট ছোট রাখার। আমাদের তখন ডট ম্যাট্রিক্স প্রিন্টার ছিল তাই লাইনের সংখ্যা কিছুটা নির্দিষ্ট ছিল সাধারণত প্রতি পৃষ্ঠায় লাইনের সংখ্যার জন্য কেবল এক বা দুটি পছন্দ ... 2500 লাইনের চেয়ে কম।

আপনি সমস্যার অনেক দিক, রক্ষণাবেক্ষণযোগ্যতা, কর্মক্ষমতা, পরীক্ষাযোগ্যতা, পঠনযোগ্যতা জিজ্ঞাসা করছেন। আপনি যতটা পারফরম্যান্সের দিকে ঝুঁকছেন তেমন কম রক্ষণাবেক্ষণযোগ্য এবং পঠনযোগ্য কোডটি হয়ে যাবে, তাই আপনাকে নিজের আরামের স্তরটি খুঁজে বের করতে হবে যা প্রতিটি পৃথক প্রোগ্রামারের জন্য পৃথক হতে পারে এবং পৃথক হতে পারে।

সংকলক দ্বারা উত্পাদিত কোড হিসাবে (মেশিন কোড যদি আপনি চান), ফাংশনটি বৃহত্তর স্ট্যাকের নিবন্ধগুলিতে অন্তর্বর্তী মানগুলি ছড়িয়ে দেওয়ার প্রয়োজনের আরও বেশি সুযোগ। যখন স্ট্যাক ফ্রেম ব্যবহার করা হয় তখন স্ট্যাকের ব্যবহারটি বড় অংশে থাকে। রেজিস্টারগুলিতে ডেটা বেশি থাকার এবং স্ট্যাকের উপর নির্ভরতা কম রাখার জন্য আরও কম কার্যকারী কার্যকারিতা। স্ট্যাকের ছোট অংশগুলি প্রাকৃতিকভাবে ফাংশন অনুযায়ী প্রয়োজন। স্ট্যাক ফ্রেমের পারফরম্যান্সের জন্য উপকারিতা এবং কনস রয়েছে। আরও ছোট ফাংশন মানে আরও ফাংশন সেটআপ এবং ক্লিনআপ। অবশ্যই এটি আপনি কীভাবে সংকলন করেন, কী সুযোগগুলি আপনি সংকলকটি দেন তার উপরও নির্ভর করে। আপনার 2500 লাইন ফাংশনের পরিবর্তে 250 10 লাইন ফাংশন থাকতে পারে, একটি 2500 লাইন ফাংশন সংকলকটি পেতে চলেছে যদি এটি পুরো জিনিসটি জুড়ে / অনুকূলিত করতে পারে তবে তা করতে পারে। তবে আপনি যদি এই 250 10 লাইন ফাংশন নেন এবং 2, 3, 4, 250 পৃথক ফাইল জুড়ে এগুলি ছড়িয়ে দেন, প্রতিটি ফাইল আলাদাভাবে সংকলন করেন তবে সংকলকটি যতটা ডেড কোড থাকতে পারে তা অপ্টিমাইজ করতে সক্ষম হবে না। এখানে নীচের লাইনটি উভয়ের পক্ষে পক্ষে মতামত রয়েছে এবং এটির পক্ষে একটি সাধারণ নিয়ম রাখা সম্ভব নয় এটি সবচেয়ে ভাল উপায়।

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

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

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


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

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

2

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

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

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


0

[কম্পিউটার-সময় উপাদান]

লুজার কাপলিং এবং ছোট ফাংশনগুলির প্রতি রিফ্যাকচারিং কি কোডের গতিকে প্রভাবিত করে?

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

একাধিক-ফাইল উদ্বেগ I / O ওভারহেডকে যুক্ত করে, যাতে এটি গতিকেও বেশ খানিকটা প্রভাবিত করে (কম্পিউটারের সময়)।

[মানব-গতির উপাদান]

(এবং আমার যত্ন নেওয়া উচিত?)

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

সুতরাং 2x - 4x নেটিভ কোড কার্যকরকরণে ধীরে ধীরে ধীরে ধীরে এই অন্যান্য কারণগুলির দ্বারা প্রায়শই ডুবে যাবে।

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


0

উত্তর (আপনি যদি এটি মিস করেছেন)

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

সংক্ষেপে

পারফরম্যান্স সম্পর্কে চিন্তা করবেন না

প্রশ্নের প্রসঙ্গে, স্মার্ট স্মার্ট সংকলক এবং দোভাষীগণ এরই মধ্যে যত্ন নিচ্ছেন

রক্ষণাবেক্ষণযোগ্য কোড লেখার বিষয়ে যত্ন নিন

কোড যেখানে রক্ষণাবেক্ষণ ব্যয় যুক্তিসঙ্গত মানবিক বোধগম্যতার স্তরে। উদাহরণস্বরূপ 1000 টি ছোট ফাংশন কোডটি অক্ষম করে না লিখুন এমনকি আপনি প্রত্যেকে বুঝতে পারছেন না, এবং 1 গড অবজেক্ট ফাংশনটি লিখবেন না যা বোঝার জন্য খুব বড় নয়, তবে 10 টি সু-ইঞ্জিনিয়ার্ড ফাংশন লিখুন যা একটি মানুষের জ্ঞান করে, এবং হয় বজায় রাখা সহজ.

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