নিম্নলিখিত পরিস্থিতিগুলি GPT প্রয়োগ করার সময় লক্ষ্য করা কিছু সাধারণ ভুলের প্রতিনিধিত্ব করে। যদিও এই ধরনের বাস্তবায়নগুলি GPT-এর বর্তমান সংস্করণের সাথে ভালভাবে কাজ করছে বলে মনে হতে পারে, তবে এটি নিশ্চিত নয় যে তারা ভবিষ্যতে এটি চালিয়ে যাবে। সবচেয়ে চরম ক্ষেত্রে এই বাস্তবায়নের ফলে বিজ্ঞাপন পরিবেশন অপ্রত্যাশিত উপায়ে ভেঙে যেতে পারে। সেগুলি অসমর্থিত বাস্তবায়ন হিসাবে বিবেচিত হয়।
প্রতিটি দৃশ্যে দেখানো সমস্যা সমাধানের জন্য একটি প্রস্তাবিত পদ্ধতি অন্তর্ভুক্ত।
মনে রাখবেন যে এই তালিকাটি সম্ভাব্য সমস্যাগুলির একটি সম্পূর্ণ বিস্তৃত তালিকা উপস্থাপন করে না, তবে যে ধরনের সমস্যাগুলির সমাধান করা প্রয়োজন তা চিহ্নিত করার জন্য এটি একটি সহায়ক গাইড হিসাবে কাজ করবে বলে আশা করা হচ্ছে।
উপরন্তু, আপনার বাস্তবায়নের উপর নির্ভর করে, আপনার সাইটের মধ্যে এই ধরনের পরিবর্তনের প্রয়োজন হতে পারে এমন সব জায়গার সন্ধান করতে হবে।
সাধারণ ভুল
দৃশ্যকল্প 1: GPT জাভাস্ক্রিপ্ট লাইব্রেরির অনানুষ্ঠানিক কপি ব্যবহার করা
উচ্চ স্তরের ব্যবহার কেস বিবরণ | হোস্টিং gpt.js, pubads_impl.js, বা আপনার নিজের সার্ভার থেকে লোড করা কোনো লাইব্রেরি, অথবা কোনো অনানুষ্ঠানিক উৎস থেকে এই ফাইলগুলি লোড করা। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
|
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Correct: Access these files from a Google domain
<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous" async></script>
// Also correct, if using Limited Ads
<script src="https://pagead2.googlesyndication.com/tag/js/gpt.js" async></script>
|
দৃশ্যকল্প 2: gpt.js স্ক্রিপ্ট ট্যাগ শ্রোতাদের উপর নির্ভর করা
উচ্চ স্তরের ব্যবহার কেস বিবরণ | জাভাস্ক্রিপ্ট ফাইল gpt.js লোড হলে GPT API কল করার জন্য প্রস্তুত বলে ধরে নেওয়া ভুল, কারণ API-এর কিছু অংশ pubads_impl.js ফাইল দ্বারা সরবরাহ করা হয়। স্ক্রিপ্ট ট্যাগের সাথে সংযুক্ত ইভেন্ট শ্রোতাদের মধ্যে থেকে API এর উপর যেকোন উপায়ে (ফ্রেমওয়ার্ক সহ) নির্ভর করা তাই ভুল। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = (useSSL ? 'https:' : 'http:') +
'//www.googletagservices.com/tag/js/gpt.js';
// Incorrect: Attaching a callback to the script's onload event.
tag.onload = callback;
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(tag, node); |
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Make sure that googletag.cmd exists.
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
// Correct: Queueing the callback on the command queue.
googletag.cmd.push(callback); |
সংশোধনের ব্যাখ্যা / বর্ণনা | googletag.cmd কমান্ডের একটি তালিকা বজায় রাখে যা GPT প্রস্তুত হওয়ার সাথে সাথে চালানো হবে। GPT লোড হয়ে গেলে আপনার কলব্যাক চালানো হয়েছে তা নিশ্চিত করার এটি সঠিক উপায়। |
দৃশ্য 3: GPT প্রস্তুত কিনা তা জানতে googletag অবজেক্ট চেক করা হচ্ছে
উচ্চ স্তরের ব্যবহার কেস বিবরণ | যেহেতু জাভাস্ক্রিপ্ট ফাইল gpt.js লোড করার সময় বা যখন googletag অবজেক্টটি সংজ্ঞায়িত করা হয় তখন GPT API প্রস্তুত নাও হতে পারে, তাই GPT API উপলব্ধ আছে কিনা তা দেখার জন্য বস্তুটি পরীক্ষা করা নির্ভরযোগ্য নয়। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
functionProcessingGPT();
} |
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
functionProcessingGPT();
} |
সংশোধনের ব্যাখ্যা / বর্ণনা | API কল করার জন্য প্রস্তুত হওয়ার সাথে সাথে GPT বুলিয়ান ফ্ল্যাগ googletag.apiReady তৈরি করবে যাতে আপনি নির্ভরযোগ্য দাবি করতে পারেন। |
দৃশ্যকল্প 4: অস্পষ্ট কোড সিনট্যাক্সের উপর নির্ভর করা
উচ্চ স্তরের ব্যবহার কেস বিবরণ | আপনি যদি মিনিফাইড জিপিটি লাইব্রেরি কোডের সুনির্দিষ্ট সিনট্যাক্সের উপর নির্ভর করে থাকেন, তাহলে আপনি প্রায় অবশ্যই ভাঙার অভিজ্ঞতা পাবেন। অনুগ্রহ করে API রেফারেন্স গাইডে নথিভুক্ত API-এ আপনার ব্যবহার সীমিত করুন, কারণ আমরা ক্রমাগত উন্নতির জন্য GPT-এর অভ্যন্তরীণ কাজগুলিকে ক্রমাগত পরিবর্তন করছি৷ উদাহরণস্বরূপ, refresh() কল করার জন্য PubAdsService সম্পূর্ণরূপে লোড হলে সনাক্ত করা একটি সাধারণ প্রয়োজন। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
functionProcessingGPT();
} |
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
functionProcessingGPT();
} |
সংশোধনের ব্যাখ্যা / বর্ণনা | শুধুমাত্র পাবলিক API এর উপর নির্ভর করা যেতে পারে। PubAdsService সম্পূর্ণরূপে লোড হয়েছে কিনা তা সনাক্ত করার ক্ষেত্রে আমাদের একটি বুলিয়ান মান আছে googletag.pubadsReady । |
দৃশ্যকল্প 5: GPT-এর যেকোনো ফাংশন বা ভেরিয়েবল ওভাররাইট করা
উচ্চ স্তরের ব্যবহার কেস বিবরণ | GPT দ্বারা ব্যবহৃত যেকোন ফাংশন বা ভেরিয়েবলকে ওভাররাইট করার উপর ভিত্তি করে কেসগুলি ব্যবহার করুন যেকোন সময় ভেঙে যেতে পারে কারণ এটি একটি সমর্থিত ব্যবহারের ক্ষেত্রে নয়। GPT অভ্যন্তরীণ সময়ের পরিবর্তনগুলি ভাঙার দ্বারা এই ধরনের ভুল আচরণকে সামনে আনতে পারে। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = []; |
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || []; |
দৃশ্য 6: GPT-তে ভুল-অর্ডারিং কল
উচ্চ স্তরের ব্যবহার কেস বিবরণ | GPT-এর অভ্যন্তরীণ অংশগুলি বিকশিত হওয়ার সাথে সাথে রেসের অবস্থাগুলি ভাঙন সৃষ্টি করতে পারে। বিবৃতিগুলির একটি ভুলভাবে অর্ডার করা সেট যা কার্যকর করার নির্দিষ্ট সময়ের কারণে কার্যকর ছিল ভবিষ্যতে কার্যকর নাও থাকতে পারে। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a); |
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices(); |
সংশোধনের ব্যাখ্যা / বর্ণনা | GPT-এর স্বাভাবিক সময়কে সম্মান করার বিষয়টি নিশ্চিত করে রেসের অবস্থা এড়িয়ে চলুন। বৈধ আংশিক আদেশের উদাহরণের মধ্যে রয়েছে:- ডিফাইন-এনেবল-ডিসপ্লে
- পৃষ্ঠা-স্তরের সেটিংস সংজ্ঞায়িত করুন
- স্লট সংজ্ঞায়িত করুন
- পরিষেবাগুলি সক্ষম করুন()
- প্রদর্শন স্লট
- সক্ষম-সংজ্ঞায়িত-প্রদর্শন
- পৃষ্ঠা-স্তরের সেটিংস সংজ্ঞায়িত করুন
- পরিষেবাগুলি সক্ষম করুন()
- স্লট সংজ্ঞায়িত করুন
- প্রদর্শন স্লট
|
দৃশ্য 7: অপব্যবহার বন্ধ এবং জাভাস্ক্রিপ্ট পরিবর্তনশীল স্কোপিং
উচ্চ স্তরের ব্যবহার কেস বিবরণ | JavaScript ভেরিয়েবল স্কোপিং সম্পর্কে ভুল অনুমান, এবং googletag.cmd.push এ পাস করা ফাংশনে ক্যাপচার করা ভেরিয়েবলের মান। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Variable x is declared outside the anonymous function
// but referenced within it.
for (var x = 0; x < slotCount; x++) {
window.googletag.cmd.push(
function(){
// If GPT is not yet loaded, this code will be executed subsequently when
// the command queue is processed. Every queued function will use the last value
// assigned to x (most likely slotCount).
// This is because the function closure captures the reference to x,
// not the current value of x.
window.googletag.display(slot[x]);
})
}
} |
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | window.googletag.cmd.push(
function(){
// Correct: We both declare and reference x inside the context of the function.
for (var x = 0; x < slotCount; x++){
window.googletag.display(slot[x]);
}
}
) |
সংশোধনের ব্যাখ্যা / বর্ণনা | জাভাস্ক্রিপ্টে, ক্লোজারগুলি মানের পরিবর্তে রেফারেন্স দ্বারা ভেরিয়েবল ক্যাপচার করে। এর মানে হল যে যদি একটি ভেরিয়েবল পুনরায় বরাদ্দ করা হয়, তাহলে তার নতুন মান ব্যবহার করা হবে যখন এটি ক্যাপচার করা ফাংশন ক্লোজারটি পরে কার্যকর করা হবে। এইভাবে কলব্যাক অবিলম্বে কার্যকর করা হয় বা বিলম্বিত হয় তার উপর নির্ভর করে বন্ধের কোডের আচরণ পরিবর্তিত হতে পারে। অ্যাসিঙ্ক্রোনাসভাবে লোড করা GPT-এর ক্ষেত্রে, GPT কত দ্রুত কমান্ড সারিতে কলব্যাকগুলি লোড করে তার উপর নির্ভর করে অবিলম্বে কার্যকর হতে পারে বা না। আগের উদাহরণে, এটি সারিবদ্ধ কমান্ডের আচরণকে পরিবর্তন করে। কোনো সমস্যা এড়াতে, কমান্ড সারিতে রাখা ফাংশনগুলি অবিলম্বে কার্যকর হবে এই অনুমান ছাড়াই কোড লেখা উচিত, এবং জাভাস্ক্রিপ্টের স্কোপিং নিয়মগুলির বিষয়ে যত্ন নেওয়া উচিত। |
দৃশ্যকল্প 8: ডিসপ্লে কল করার পরে DOM-এর মধ্যে স্লট কন্টেইনারগুলি সরানো
উচ্চ স্তরের ব্যবহার কেস বিবরণ | ডিসপ্লে কল করার পরে DOM-এ স্লট কন্টেইনারগুলি সরানো বা ঢোকানোর ফলে GPT-এ অবাঞ্ছিত রিফ্লো এবং অপ্রত্যাশিত আচরণ হতে পারে। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Moving slot containers after calling display
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");
...
// Inserting another element before the slot container, pushing the slot container down the page.
document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
|
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Correct: Make any DOM order changes before calling display
document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
...
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");
|
দৃশ্য 9: ব্রাউজার APIs ওভাররাইট করা
উচ্চ স্তরের ব্যবহার কেস বিবরণ | ওভাররাইট করা (ওরফে মাঙ্কি প্যাচিং, পলিফিলিং) ব্রাউজার APIs GPT-এ সমর্থিত নয়৷ এই অভ্যাসের অপ্রত্যাশিত উপায়ে GPT-এর মতো তৃতীয় পক্ষের স্ক্রিপ্ট ভাঙার সম্ভাবনা রয়েছে। |
ত্রুটি সহ উদাহরণ কোড স্নিপেট | // Incorrect: Overwriting window.fetch
const { fetch: originalFetch } = window;
window.fetch = (...args) => {
console.log('Fetching!');
return originalFetch(resource, config);
};
|
ত্রুটি ঠিক করার জন্য প্রস্তাবিত উপায় | // Correct: Avoid making changes to browser APIs.
// If you need custom logic, consider leaving the browser API intact.
const myFetch = (...args) => {
console.log('Fetching!');
return window.fetch(...args);
}
|