: 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 টি সাধারণ ফাইল বনাম কল্পনা করুন।