শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন ইমপ্লিমেন্টেশন কুইকস্টার্ট

শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন ব্যবহার করার জন্য এই ডকুমেন্টটি একটি কুইকস্টার্ট গাইড। আপনার উভয় API-এর বোঝার প্রয়োজন হবে কারণ শেয়ার্ড স্টোরেজ মান সঞ্চয় করে এবং ব্যক্তিগত একত্রীকরণ সমষ্টিগত প্রতিবেদন তৈরি করে।

লক্ষ্য শ্রোতা: বিজ্ঞাপন প্রযুক্তি এবং পরিমাপ প্রদানকারী।

শেয়ার্ড স্টোরেজ API

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

শেয়ার্ড স্টোরেজ প্রসঙ্গ মূলে সীমাবদ্ধ ( sharedStorage কলার)।

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

শেয়ার্ড স্টোরেজ আহ্বান করা হচ্ছে

বিজ্ঞাপন প্রযুক্তিগুলি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে শেয়ার্ড স্টোরেজে লিখতে পারে। শেয়ার্ড স্টোরেজ থেকে পড়া শুধুমাত্র একটি বিচ্ছিন্ন জাভাস্ক্রিপ্ট পরিবেশের মধ্যে ঘটে যাকে ওয়ার্কলেট বলা হয়।

  • জাভাস্ক্রিপ্ট অ্যাড টেক ব্যবহার করে নির্দিষ্ট শেয়ার্ড স্টোরেজ ফাংশন যেমন জাভাস্ক্রিপ্ট ওয়ার্কলেটের বাইরে মান সেট করা, যুক্ত করা এবং মুছে ফেলার মতো কাজ করতে পারে। যাইহোক, শেয়ার্ড স্টোরেজ পড়া এবং প্রাইভেট অ্যাগ্রিগেশন করার মতো কাজগুলি জাভাস্ক্রিপ্ট ওয়ার্কলেটের মাধ্যমে সম্পন্ন করতে হবে। একটি জাভাস্ক্রিপ্ট ওয়ার্কলেটের বাইরে ব্যবহার করা যেতে পারে এমন পদ্ধতিগুলি প্রস্তাবিত API সারফেস - ওয়ার্কলেটের বাইরে পাওয়া যাবে।

    একটি অপারেশন চলাকালীন ওয়ার্কলেটে ব্যবহৃত পদ্ধতিগুলি প্রস্তাবিত API সারফেস - ওয়ার্কলেটে পাওয়া যাবে।

  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    জাভাস্ক্রিপ্টের মতো, শুধুমাত্র নির্দিষ্ট ফাংশনগুলি যেমন শেয়ার করা স্টোরেজে মান নির্ধারণ, সংযুক্ত করা এবং মুছে ফেলা প্রতিক্রিয়া শিরোনাম ব্যবহার করে করা যেতে পারে। একটি প্রতিক্রিয়া শিরোনামে শেয়ার্ড স্টোরেজের সাথে কাজ করতে, Shared-Storage-Writable: ?1 অনুরোধ শিরোনামে অন্তর্ভুক্ত করতে হবে।

    ক্লায়েন্ট থেকে একটি অনুরোধ শুরু করতে, আপনার নির্বাচিত পদ্ধতির উপর নির্ভর করে নিম্নলিখিত কোডটি চালান:

    • fetch() ব্যবহার করে

      fetch("https://a.example/path/for/updates", {sharedStorageWritable: true});
      
    • একটি iframe বা img ট্যাগ ব্যবহার করা

      <iframe src="https://a.example/path/for/updates" sharedstoragewritable></iframe>
      
    • একটি iframe বা img ট্যাগের সাথে একটি IDL বৈশিষ্ট্য ব্যবহার করা

      let iframe = document.getElementById("my-iframe");
      iframe.sharedStorageWritable = true;
      iframe.src = "https://a.example/path/for/updates";
      

শেয়ার্ড স্টোরেজ: রেসপন্স হেডারে আরও তথ্য পাওয়া যাবে।

শেয়ার্ড স্টোরেজে লেখা

শেয়ার্ড স্টোরেজে লিখতে, জাভাস্ক্রিপ্ট ওয়ার্কলেটের ভিতর বা বাইরে থেকে sharedStorage.set() কল করুন। যদি ওয়ার্কলেটের বাইরে থেকে কল করা হয়, তবে ডেটাটি ব্রাউজিং প্রসঙ্গের মূলে লেখা হয় যেখান থেকে কলটি করা হয়েছিল। ওয়ার্কলেটের ভিতর থেকে কল করা হলে, ডাটাটি ব্রাউজিং প্রসঙ্গটির মূলে লেখা হয় যা ওয়ার্কলেট লোড করেছে। সেট করা কীগুলির শেষ আপডেট থেকে 30 দিনের মেয়াদ শেষ হওয়ার তারিখ রয়েছে।

ignoreIfPresent ক্ষেত্রটি ঐচ্ছিক। উপস্থিত থাকলে এবং true সেট করা হলে, কীটি ইতিমধ্যেই বিদ্যমান থাকলে আপডেট করা হয় না। কী আপডেট না হলেও set() কল থেকে কী মেয়াদ 30 দিনে পুনর্নবীকরণ করা হয়।

শেয়ার্ড স্টোরেজ একই কী দিয়ে একই পৃষ্ঠা লোডে একাধিকবার অ্যাক্সেস করা হলে, কীটির মান ওভাররাইট করা হয়। যদি পূর্ববর্তী মান বজায় রাখার প্রয়োজন হয় তাহলে sharedStorage.append() ব্যবহার করা ভালো।

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    ওয়ার্কলেটের বাইরে:

    window.sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: true });
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: false });
    // Shared Storage: {'myKey': 'myValue2'}
    

    একইভাবে, ওয়ার্কলেটের ভিতরে:

    sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    আপনি প্রতিক্রিয়া শিরোনাম ব্যবহার করে শেয়ার্ড স্টোরেজেও লিখতে পারেন। এটি করার জন্য, নিম্নলিখিত কমান্ডগুলির সাথে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করুন:

    Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present
    
    Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present=?0
    

    একাধিক আইটেম কমা দ্বারা পৃথক করা যেতে পারে এবং set , append , delete এবং clear একত্রিত করতে পারে।

    Shared-Storage-Write :
    set;key="hello";value="world";ignore_if_present, set;key="good";value="bye"
    

একটি মান যুক্ত করা হচ্ছে

আপনি append পদ্ধতি ব্যবহার করে বিদ্যমান কী-তে একটি মান যোগ করতে পারেন। যদি কী বিদ্যমান না থাকে, কলিং append() কী তৈরি করে এবং মান সেট করে। এটি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে সম্পন্ন করা যেতে পারে।

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    বিদ্যমান কীগুলির মান আপডেট করতে, ওয়ার্কলেটের ভিতরে বা বাইরে থেকে sharedStorage.append() ব্যবহার করুন।

    window.sharedStorage.append('myKey', 'myValue1');
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.append('myKey', 'myValue2');
    // Shared Storage: {'myKey': 'myValue1myValue2'}
    window.sharedStorage.append('anotherKey', 'hello');
    // Shared Storage: {'myKey': 'myValue1myValue2', 'anotherKey': 'hello'}
    

    ওয়ার্কলেটের ভিতরে যুক্ত করতে:

    sharedStorage.append('myKey', 'myValue1');
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    ভাগ করা সঞ্চয়স্থানে একটি মান সেট করার অনুরূপ, আপনি কী-মান জুড়িতে পাস করতে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করতে পারেন।

    Shared-Storage-Write : append;key="myKey";value="myValue2"
    

মানগুলির ব্যাচ আপডেট করা

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

আপনি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে লক সেট করতে পারেন:

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    উপলব্ধ জাভাস্ক্রিপ্ট পদ্ধতি যা batchUpdate() এর সাথে ব্যবহার করা যেতে পারে:

    • SharedStorageSetMethod() : শেয়ার করা সঞ্চয়স্থানে একটি কী-মানের জোড়া লেখে।
    • SharedStorageAppendMethod() : শেয়ার্ড স্টোরেজে বিদ্যমান একটি কী-তে একটি মান যুক্ত করে।
    • SharedStorageDeleteMethod() : শেয়ার্ড স্টোরেজ থেকে একটি কী-মানের জোড়া মুছে দেয়।
    • SharedStorageClearMethod() : শেয়ার্ড স্টোরেজের সমস্ত কী সাফ করে।
    sharedStorage.batchUpdate([
    new SharedStorageSetMethod('keyOne', 'valueOne'),
    new SharedStorageAppendMethod('keyTwo', 'valueTwo'),
    new SharedStorageDeleteMethod('keyThree'),
    new SharedStorageClearMethod()
    ]);
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    Shared-Storage-Write : batchUpdate;methods="set;key=keyOne;value=valueOne, append;key=keyTwo;value=valueTwo,delete;key=keyThree,clear"
    

শেয়ার্ড স্টোরেজ থেকে পড়া

আপনি শুধুমাত্র একটি ওয়ার্কলেট থেকে শেয়ার্ড স্টোরেজ থেকে পড়তে পারেন।

await sharedStorage.get('mykey');

ওয়ার্কলেট মডিউলটি যে ব্রাউজিং প্রেক্ষাপট থেকে লোড করা হয়েছিল তা নির্ধারণ করে কার শেয়ার করা স্টোরেজ পড়া হয়েছে।

শেয়ার্ড স্টোরেজ থেকে মুছে ফেলা হচ্ছে

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

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    ওয়ার্কলেটের বাইরে থেকে শেয়ার্ড স্টোরেজ থেকে মুছে ফেলতে:

    window.sharedStorage.delete('myKey');
    

    ওয়ার্কলেটের ভিতর থেকে শেয়ার্ড স্টোরেজ থেকে মুছে ফেলতে:

    sharedStorage.delete('myKey');
    

    ওয়ার্কলেটের বাইরে থেকে একবারে সমস্ত কী মুছে ফেলতে:

    window.sharedStorage.clear();
    

    ওয়ার্কলেটের ভিতর থেকে একবারে সমস্ত কী মুছে ফেলতে:

    sharedStorage.clear();
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    প্রতিক্রিয়া শিরোনাম ব্যবহার করে মান মুছে ফেলার জন্য, আপনি মোছার কী পাস করতে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করতে পারেন।

    delete;key="myKey"
    

    প্রতিক্রিয়া শিরোনাম ব্যবহার করে সমস্ত কী মুছে ফেলতে:

    clear;
    

শেয়ার্ড স্টোরেজ থেকে সুরক্ষিত শ্রোতাদের আগ্রহের গোষ্ঠী পড়া

আপনি একটি শেয়ার্ড স্টোরেজ ওয়ার্কলেট থেকে সুরক্ষিত দর্শকদের আগ্রহের গ্রুপগুলি পড়তে পারেন৷ interestGroups() পদ্ধতিটি AuctionInterestGroup এবং GenerateBidInterestGroup বৈশিষ্ট্য সহ StorageInterestGroup অবজেক্টের একটি অ্যারে প্রদান করে।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে ব্রাউজিং প্রসঙ্গ আগ্রহ গোষ্ঠীগুলি পড়তে হয় এবং কিছু সম্ভাব্য ক্রিয়াকলাপ যা পুনরুদ্ধার করা আগ্রহ গোষ্ঠীগুলিতে সঞ্চালিত হতে পারে৷ ব্যবহৃত দুটি সম্ভাব্য ক্রিয়াকলাপ হল আগ্রহের গোষ্ঠীর সংখ্যা খুঁজে বের করা এবং সর্বোচ্চ বিড গণনা সহ আগ্রহের গোষ্ঠী খুঁজে পাওয়া।

async function analyzeInterestGroups() {
  const interestGroups = await interestGroups();
  numIGs = interestGroups.length;
  maxBidCountIG = interestGroups.reduce((max, cur) => { return cur.bidCount > max.bidCount ? cur : max; }, interestGroups[0]);
  console.log("The IG that bid the most has name " + maxBidCountIG.name);
}

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

অপশন

সমস্ত শেয়ার্ড স্টোরেজ মডিফায়ার পদ্ধতি শেষ যুক্তি হিসাবে একটি ঐচ্ছিক বিকল্প বস্তুকে সমর্থন করে।

লক সহ

withLock বিকল্পটি ঐচ্ছিক। যদি নির্দিষ্ট করা থাকে, এই বিকল্পটি এগিয়ে যাওয়ার আগে Web Locks API ব্যবহার করে সংজ্ঞায়িত সংস্থানের জন্য একটি লক অর্জনের পদ্ধতি নির্দেশ করে। লক অনুরোধ করার সময় একটি লক নাম পাস করা হয়। নামটি এমন একটি সংস্থানকে প্রতিনিধিত্ব করে যার ব্যবহার মূলের মধ্যে একাধিক ট্যাব, কর্মী বা কোড জুড়ে সমন্বিত হয়।

withLock বিকল্পটি নিম্নলিখিত শেয়ার্ড স্টোরেজ মডিফায়ার পদ্ধতির সাথে ব্যবহার করা যেতে পারে:

  • সেট
  • সংযোজন
  • মুছে ফেলুন
  • পরিষ্কার
  • ব্যাচ আপডেট

আপনি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে লক সেট করতে পারেন:

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    sharedStorage.set('myKey', 'myValue', { withLock: 'myResource' });
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    Shared-Storage-Write : set;key="myKey";value="myValue";with_lock="myResource"
    

শেয়ার্ড স্টোরেজ লকগুলি ডেটা উত্স দ্বারা বিভাজিত হয়৷ লকগুলি লক ম্যানেজার রিকোয়েস্ট() পদ্ধতি ব্যবহার করে প্রাপ্ত যেকোন লক থেকে স্বাধীন, সেগুলি window বা worker প্রসঙ্গে যাই হোক না কেন। তবুও, তারা SharedStorageWorklet প্রসঙ্গে request() ব্যবহার করে প্রাপ্ত লকগুলির মতো একই সুযোগ ভাগ করে নেয়।

যদিও request() পদ্ধতি বিভিন্ন কনফিগারেশন বিকল্পের জন্য অনুমতি দেয়, শেয়ার্ড স্টোরেজের মধ্যে অর্জিত লকগুলি সর্বদা নিম্নলিখিত ডিফল্ট সেটিংস মেনে চলে:

  • mode: "exclusive" : একই নামের অন্য কোনো লক একসাথে রাখা যাবে না।
  • steal: false : একই নামের বিদ্যমান লকগুলি অন্যান্য অনুরোধগুলি মিটমাট করার জন্য প্রকাশ করা হয় না।
  • ifAvailable: false : লকটি উপলব্ধ না হওয়া পর্যন্ত অনুরোধগুলি অনির্দিষ্টকালের জন্য অপেক্ষা করে।
কখন ব্যবহার করবেন withLock

লকগুলি এমন পরিস্থিতিতে দরকারী যেখানে একই সাথে একাধিক ওয়ার্কলেট চলতে পারে (যেমন, একটি পৃষ্ঠায় একাধিক ওয়ার্কলেট, বা বিভিন্ন ট্যাবে একাধিক ওয়ার্কলেট) যার প্রত্যেকটি একই ডেটা দেখছে। সেই পরিস্থিতিতে, একটি সময়ে শুধুমাত্র একটি ওয়ার্কলেট রিপোর্ট প্রক্রিয়াকরণ করছে তা নিশ্চিত করতে প্রাসঙ্গিক ওয়ার্কলেট কোডটিকে একটি লক দিয়ে মোড়ানো একটি ভাল ধারণা৷

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

তালার ক্রম

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

উদাহরণ স্বরূপ:

// This line might pause until the lock is available.
sharedStorage.set('keyOne', 'valueOne', { withLock: 'resource-lock' });

// This line will run right away, even if the first one is still waiting.
sharedStorage.set('keyOne', 'valueTwo');
একাধিক কী উদাহরণ পরিবর্তন করুন

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

নিম্নলিখিত modify-multiple-keys.js উদাহরণটি modify-lock সহ keyOne এবং keyTwo জন্য নতুন মান সেট করে তারপর ওয়ার্কলেট থেকে modify-multiple-keys অপারেশন চালায়:

// modify-multiple-keys.js
sharedStorage.batchUpdate([
    new SharedStorageSetMethod('keyOne', calculateValueFor('keyOne')),
    new SharedStorageSetMethod('keyTwo', calculateValueFor('keyTwo'))
], { withLock: 'modify-lock' });

const modifyWorklet = await sharedStorage.createWorklet('modify-multiple-keys-worklet.js');
await modifyWorklet.run('modify-multiple-keys');

তারপরে, modify-multiple-keys-worklet.js মধ্যে আপনি navigator.locks.request() ব্যবহার করে প্রয়োজনীয় কীগুলি পড়তে এবং পরিবর্তন করার জন্য লকের অনুরোধ করতে পারেন

// modify-multiple-keys-worklet.js
class ModifyMultipleKeysOperation {
  async run(data) {
    await navigator.locks.request('modify-lock', async (lock) => {
      const value1 = await sharedStorage.get('keyOne');
      const value2 = await sharedStorage.get('keyTwo');

      // Do something with `value1` and `value2` here.

      await sharedStorage.delete('keyOne');
      await sharedStorage.delete('keyTwo');
    });
  }
}
register('modify-multiple-keys', ModifyMultipleKeysOperation);

প্রসঙ্গ স্যুইচিং

শেয়ার্ড স্টোরেজ ডেটা ব্রাউজিং প্রসঙ্গের মূলে (উদাহরণস্বরূপ, https://example.adtech.com) লেখা হয় যেখান থেকে কলটি এসেছে।

যখন আপনি একটি <script> ট্যাগ ব্যবহার করে তৃতীয় পক্ষের কোড লোড করেন, কোডটি এমবেডারের ব্রাউজিং প্রসঙ্গে কার্যকর করা হয়। অতএব, যখন তৃতীয় পক্ষের কোড sharedStorage.set() কল করে, তখন ডেটা এমবেডারের শেয়ার্ড স্টোরেজে লেখা হয়। আপনি যখন একটি আইফ্রেমের মধ্যে তৃতীয় পক্ষের কোডটি লোড করেন, কোডটি একটি নতুন ব্রাউজিং প্রসঙ্গ পায় এবং এর উত্সটি আইফ্রেমের উত্স। তাই, iframe থেকে করা sharedStorage.set() কল আইফ্রেম মূলের শেয়ার্ড স্টোরেজে ডেটা সঞ্চয় করে।

প্রথম পক্ষের প্রসঙ্গ

যদি কোনো প্রথম-পক্ষের পৃষ্ঠায় তৃতীয়-পক্ষের জাভাস্ক্রিপ্ট কোড এমবেড করা থাকে যা sharedStorage.set() বা sharedStorage.delete() কল করে, তাহলে মূল-মান জোড়া প্রথম-পক্ষের প্রসঙ্গে সংরক্ষণ করা হয়।

এম্বেড করা তৃতীয় পক্ষের জাভাস্ক্রিপ্ট সহ একটি প্রথম-পক্ষের পৃষ্ঠায় সংরক্ষিত ডেটা।

তৃতীয় পক্ষের প্রসঙ্গ

আইফ্রেমের মধ্যে থেকে জাভাস্ক্রিপ্ট কোডে একটি আইফ্রেম এবং কলিং set() বা delete() তৈরি করে কী-মানের জুটি বিজ্ঞাপন প্রযুক্তি বা তৃতীয়-পক্ষের প্রসঙ্গে সংরক্ষণ করা যেতে পারে।

অ্যাড-টেক বা থার্ড-পার্টি প্রসঙ্গে সংরক্ষিত ডেটা।

প্রাইভেট অ্যাগ্রিগেশন API

শেয়ার্ড স্টোরেজে সংরক্ষিত সমষ্টিগত ডেটা পরিমাপ করতে, আপনি ব্যক্তিগত একত্রীকরণ API ব্যবহার করতে পারেন।

একটি প্রতিবেদন তৈরি করতে, একটি বালতি এবং মান সহ একটি ওয়ার্কলেটের ভিতরে contributeToHistogram() কল করুন। বালতিটি একটি স্বাক্ষরবিহীন 128-বিট পূর্ণসংখ্যা দ্বারা উপস্থাপিত হয় যা একটি BigInt হিসাবে ফাংশনে পাস করতে হবে। মান একটি ধনাত্মক পূর্ণসংখ্যা।

গোপনীয়তা রক্ষা করার জন্য, রিপোর্টের পেলোড, যা বালতি এবং মান ধারণ করে, ট্রানজিটে এনক্রিপ্ট করা হয় এবং এটি শুধুমাত্র অ্যাগ্রিগেশন পরিষেবা ব্যবহার করে ডিক্রিপ্ট করা এবং একত্রিত করা যায়।

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

privateAggregation.contributeToHistogram({
  bucket: BigInt(myBucket),
  value: parseInt(myBucketValue)
});

শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন নির্বাহ করা

ডিফল্টরূপে, createWorklet() এর সাথে শেয়ার্ড স্টোরেজ ব্যবহার করার সময়, ডাটা পার্টিশনের উৎস হবে ইনভোকিং ব্রাউজিং কনটেক্সটের উৎস, ওয়ার্কলেট স্ক্রিপ্টের উৎপত্তি নয়।

ডিফল্ট আচরণ পরিবর্তন করতে, createWorklet কল করার সময় dataOrigin বৈশিষ্ট্য সেট করুন।

  • dataOrigin: "context-origin" : (ডিফল্ট) ব্রাউজিং কনটেক্সট এর উত্সের শেয়ার্ড স্টোরেজে ডেটা সংরক্ষণ করা হয়।
  • dataOrigin: "script-origin" : ওয়ার্কলেট স্ক্রিপ্টের উত্সের ভাগ করা স্টোরেজে ডেটা সংরক্ষণ করা হয়। এই মোড সক্ষম করতে একটি অপ্ট-ইন প্রয়োজন৷
  • dataOrigin: "https://custom-data-origin.example" : ডেটা একটি কাস্টম ডেটা উৎসের শেয়ার্ড স্টোরেজে সংরক্ষণ করা হয়। এই মোডটি সক্ষম করার জন্য একটি অপ্ট-ইন প্রয়োজন এবং কাস্টম ডেটা মূলের বিশদ বিবরণ অনুসারে কাস্টম ডেটা উত্সের মালিকের সম্মতি প্রয়োজন৷
sharedStorage.createWorklet(scriptUrl, {dataOrigin: "script-origin"});

অপ্ট-ইন করার জন্য, "script-origin" বা একটি কাস্টম অরিজিন ব্যবহার করার সময়, স্ক্রিপ্ট এন্ডপয়েন্টকে হেডার Shared-Storage-Cross-Origin-Worklet-Allowed । ক্রস-অরিজিন অনুরোধের জন্য, CORS ও সক্ষম করা উচিত।

Shared-Storage-Cross-Origin-Worklet-Allowed : ?1
Access-Control-Allow-Origin: *

আপনি একটি তৃতীয় পক্ষের আইফ্রেম ব্যবহার করে ক্রস-অরিজিন স্ক্রিপ্টগুলিও চালাতে পারেন, এই ক্ষেত্রে শেয়ার্ড স্টোরেজ অ্যাকশনগুলি তৃতীয় পক্ষের ব্রাউজিং প্রসঙ্গে হবে৷

ক্রস-অরিজিন আইফ্রেম ব্যবহার করা

শেয়ার্ড স্টোরেজ ওয়ার্কলেট চালু করার জন্য একটি iframe প্রয়োজন।

বিজ্ঞাপনের আইফ্রেমে, addModule() কল করে ওয়ার্কলেট মডিউলটি লোড করুন। sharedStorageWorklet.js ওয়ার্কলেট ফাইলে নিবন্ধিত পদ্ধতিটি চালানোর জন্য, একই বিজ্ঞাপন iframe JavaScript-এ, sharedStorage.run() কল করুন।

const sharedStorageWorklet = await window.sharedStorage.createWorklet(
  'https://any-origin.example/modules/sharedStorageWorklet.js'
);
await sharedStorageWorklet.run('shared-storage-report', {
  data: { campaignId: '1234' },
});

ওয়ার্কলেট স্ক্রিপ্টে, আপনাকে অ্যাসিঙ্ক run পদ্ধতি সহ একটি ক্লাস তৈরি করতে হবে এবং বিজ্ঞাপনের আইফ্রেমে চালানোর জন্য এটি registersharedStorageWorklet.js এর ভিতরে :

class SharedStorageReportOperation {
  async run(data) {
    // Other code goes here.
    bucket = getBucket(...);
    value = getValue(...);
    privateAggregation.contributeToHistogram({
      bucket,
      value
    });
  }
}
register('shared-storage-report', SharedStorageReportOperation);

ক্রস-অরিজিন অনুরোধ ব্যবহার করে

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

প্রথম পক্ষের পৃষ্ঠাটি ক্রস-অরিজিন জাভাস্ক্রিপ্ট এন্ডপয়েন্টে একটি createWorklet() কল আহ্বান করতে পারে। ওয়ার্কলেট তৈরি করার সময় আপনাকে স্ক্রিপ্ট-অরিজিন হিসাবে ওয়ার্কলেটের ডেটা পার্টিশনের উত্স সেট করতে হবে।

async function crossOriginCall() {
  const privateAggregationWorklet = await sharedStorage.createWorklet(
    'https://cross-origin.example/js/worklet.js',
    { dataOrigin: 'script-origin' }
  );
  await privateAggregationWorklet.run('pa-worklet');
}
crossOriginCall();

ক্রস-অরিজিন জাভাস্ক্রিপ্ট এন্ডপয়েন্টকে Shared-Storage-Cross-Origin-Worklet-Allowed শিরোনামগুলির সাথে প্রতিক্রিয়া জানাতে হবে এবং নোট করুন যে অনুরোধের জন্য CORS সক্ষম করা হয়েছে।

Shared-Storage-Cross-Origin-Worklet-Allowed : ?1

createWorklet() ব্যবহার করে তৈরি ওয়ার্কলেটগুলিতে selectURL এবং run() থাকবে। addModule() এর জন্য উপলব্ধ নয়।

class CrossOriginWorklet {
  async run(data){
    // Other code goes here.
    bucket = getBucket(...);
    value = getValue(...);
    privateAggregation.contributeToHistogram({
      bucket,
      value
    });
  }
}

কাস্টম ডেটা মূল

যখন dataOrigin একটি বৈধ অরিজিনে সেট করা থাকে, তখন dataOrigin এর মালিককে অবশ্যই path /.well-known/shared-storage/trusted-origins এ ওয়ার্কলেট স্ক্রিপ্টের উত্স তালিকাভুক্ত একটি JSON ফাইল হোস্ট করে সেই dataOrigin জন্য শেয়ার্ড স্টোরেজ প্রক্রিয়াকরণে সম্মতি দিতে হবে। ফাইলটি scriptOrigin এবং contextOrigin কী সহ বস্তুর একটি অ্যারে হওয়া উচিত। এই কীগুলির মানগুলি হয় একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে হতে পারে।

নিম্নলিখিত তথ্য ব্যবহার করে trusted-origins ফাইল তৈরি করুন:

  • কলার প্রসঙ্গ
  • ওয়ার্কলেট স্ক্রিপ্ট উত্স এবং URL
  • তথ্য উৎপত্তি এবং মালিক

নিম্নলিখিত সারণী দেখায় কিভাবে আপনি এই তথ্যের উপর ভিত্তি করে trusted-origins ফাইল তৈরি করতে পারেন:

কলার প্রসঙ্গ ওয়ার্কলেট স্ক্রিপ্ট URL ডেটা উৎপত্তি ডেটার মালিক ডেটা অরিজিন মালিকের বিশ্বস্ত-অরিজিন JSON ফাইল
https://publisher.example https://publisher.example/script.js প্রসঙ্গ-উৎপত্তি https://publisher.example JSON প্রয়োজন নেই
https://publisher.example https://ad.example/script.js স্ক্রিপ্ট-অরিজিন https://ad.example JSON প্রয়োজন নেই
https://publisher.example https://cdn-ad.example/script.js https://ad.example https://ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": "https://publisher.example"
}]
      
যে কোন কলার https://cdn-ad.example/script.js https://ad.example https://ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": "*"
}]
      
https://publisher-a.example, অথবা https://publisher-b.example https://cdn-ad.example/script.js https://ad.example https://ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": [
      "https://publisher-a.example",
      "https://publisher-b.example"
  ]
}]
      
https://publisher.example https://cdn-a-ad.example/script.js, বা https://cdn-b-ad.example/script.js https://ad.example https://ad.example
[{
  "scriptOrigin": [
    "https://cdn-a-ad.example",
    "https://cdn-b-ad.example"
  ],
  "contextOrigin": "https://publisher.example"
}]
      

উদাহরণস্বরূপ, নিম্নলিখিত JSON https://custom-data-origin.example/.well-known/shared-storage/trusted-origins এ হোস্ট করা যেতে পারে এবং https://custom-data-origin.example অরিজিনের জন্য শেয়ার করা স্টোরেজ ডেটার সমস্ত অনুমোদিত প্রসেসরকে একত্রিত করতে পারে।

[
  {
    "scriptOrigin": "https://script-origin.a.example",
    "contextOrigin": "https://context-origin.a.example"
  },
  {
    "scriptOrigin": "https://script-origin.b.example",
    "contextOrigin": [
      "https://context-origin.a.example",
      "https://context-origin.b.example"
    ]
}]

পরবর্তী পদক্ষেপ

নিম্নলিখিত পৃষ্ঠাগুলি শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন API-এর গুরুত্বপূর্ণ দিকগুলি ব্যাখ্যা করে৷

একবার আপনি এপিআইগুলির সাথে পরিচিত হয়ে গেলে, আপনি প্রতিবেদনগুলি সংগ্রহ করা শুরু করতে পারেন, যেগুলি অনুরোধের অংশে JSON হিসাবে নিম্নলিখিত শেষ পয়েন্টগুলিতে একটি POST অনুরোধ হিসাবে পাঠানো হয়৷

  • ডিবাগ রিপোর্ট - context-origin/.well-known/private-aggregation/debug/report-shared-storage
  • রিপোর্ট - context-origin/.well-known/private-aggregation/report-shared-storage

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

আপনার মতামত শেয়ার করুন

আপনি এপিআই এবং গিটহাবে ডকুমেন্টেশনে আপনার প্রতিক্রিয়া শেয়ার করতে পারেন।

,

শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন ব্যবহার করার জন্য এই ডকুমেন্টটি একটি কুইকস্টার্ট গাইড। আপনার উভয় API-এর বোঝার প্রয়োজন হবে কারণ শেয়ার্ড স্টোরেজ মান সঞ্চয় করে এবং ব্যক্তিগত একত্রীকরণ সমষ্টিগত প্রতিবেদন তৈরি করে।

লক্ষ্য শ্রোতা: বিজ্ঞাপন প্রযুক্তি এবং পরিমাপ প্রদানকারী।

শেয়ার্ড স্টোরেজ API

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

শেয়ার্ড স্টোরেজ প্রসঙ্গ মূলে সীমাবদ্ধ ( sharedStorage কলার)।

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

শেয়ার্ড স্টোরেজ আহ্বান করা হচ্ছে

বিজ্ঞাপন প্রযুক্তিগুলি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে শেয়ার্ড স্টোরেজে লিখতে পারে। শেয়ার্ড স্টোরেজ থেকে পড়া শুধুমাত্র একটি বিচ্ছিন্ন জাভাস্ক্রিপ্ট পরিবেশের মধ্যে ঘটে যাকে ওয়ার্কলেট বলা হয়।

  • জাভাস্ক্রিপ্ট অ্যাড টেক ব্যবহার করে নির্দিষ্ট শেয়ার্ড স্টোরেজ ফাংশন যেমন জাভাস্ক্রিপ্ট ওয়ার্কলেটের বাইরে মান সেট করা, যুক্ত করা এবং মুছে ফেলার মতো কাজ করতে পারে। যাইহোক, শেয়ার্ড স্টোরেজ পড়া এবং প্রাইভেট অ্যাগ্রিগেশন করার মতো কাজগুলি জাভাস্ক্রিপ্ট ওয়ার্কলেটের মাধ্যমে সম্পন্ন করতে হবে। একটি জাভাস্ক্রিপ্ট ওয়ার্কলেটের বাইরে ব্যবহার করা যেতে পারে এমন পদ্ধতিগুলি প্রস্তাবিত API সারফেস - ওয়ার্কলেটের বাইরে পাওয়া যাবে।

    একটি অপারেশন চলাকালীন ওয়ার্কলেটে ব্যবহৃত পদ্ধতিগুলি প্রস্তাবিত API সারফেস - ওয়ার্কলেটে পাওয়া যাবে।

  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    জাভাস্ক্রিপ্টের মতো, শুধুমাত্র নির্দিষ্ট ফাংশনগুলি যেমন শেয়ার করা স্টোরেজে মান নির্ধারণ, সংযুক্ত করা এবং মুছে ফেলা প্রতিক্রিয়া শিরোনাম ব্যবহার করে করা যেতে পারে। একটি প্রতিক্রিয়া শিরোনামে শেয়ার্ড স্টোরেজের সাথে কাজ করতে, Shared-Storage-Writable: ?1 অনুরোধ শিরোনামে অন্তর্ভুক্ত করতে হবে।

    ক্লায়েন্ট থেকে একটি অনুরোধ শুরু করতে, আপনার নির্বাচিত পদ্ধতির উপর নির্ভর করে নিম্নলিখিত কোডটি চালান:

    • fetch() ব্যবহার করে

      fetch("https://a.example/path/for/updates", {sharedStorageWritable: true});
      
    • একটি iframe বা img ট্যাগ ব্যবহার করা

      <iframe src="https://a.example/path/for/updates" sharedstoragewritable></iframe>
      
    • একটি iframe বা img ট্যাগের সাথে একটি IDL বৈশিষ্ট্য ব্যবহার করা

      let iframe = document.getElementById("my-iframe");
      iframe.sharedStorageWritable = true;
      iframe.src = "https://a.example/path/for/updates";
      

শেয়ার্ড স্টোরেজ: রেসপন্স হেডারে আরও তথ্য পাওয়া যাবে।

শেয়ার্ড স্টোরেজে লেখা

শেয়ার্ড স্টোরেজে লিখতে, জাভাস্ক্রিপ্ট ওয়ার্কলেটের ভিতর বা বাইরে থেকে sharedStorage.set() কল করুন। যদি ওয়ার্কলেটের বাইরে থেকে কল করা হয়, তবে ডেটাটি ব্রাউজিং প্রসঙ্গের মূলে লেখা হয় যেখান থেকে কলটি করা হয়েছিল। ওয়ার্কলেটের ভিতর থেকে কল করা হলে, ডাটাটি ব্রাউজিং প্রসঙ্গটির মূলে লেখা হয় যা ওয়ার্কলেট লোড করেছে। সেট করা কীগুলির শেষ আপডেট থেকে 30 দিনের মেয়াদ শেষ হওয়ার তারিখ রয়েছে।

ignoreIfPresent ক্ষেত্রটি ঐচ্ছিক। উপস্থিত থাকলে এবং true সেট করা হলে, কীটি ইতিমধ্যেই বিদ্যমান থাকলে আপডেট করা হয় না। কী আপডেট না হলেও set() কল থেকে কী মেয়াদ 30 দিনে পুনর্নবীকরণ করা হয়।

শেয়ার্ড স্টোরেজ একই কী দিয়ে একই পৃষ্ঠা লোডে একাধিকবার অ্যাক্সেস করা হলে, কীটির মান ওভাররাইট করা হয়। যদি পূর্ববর্তী মান বজায় রাখার প্রয়োজন হয় তাহলে sharedStorage.append() ব্যবহার করা ভালো।

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    ওয়ার্কলেটের বাইরে:

    window.sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: true });
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: false });
    // Shared Storage: {'myKey': 'myValue2'}
    

    একইভাবে, ওয়ার্কলেটের ভিতরে:

    sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    আপনি প্রতিক্রিয়া শিরোনাম ব্যবহার করে শেয়ার্ড স্টোরেজেও লিখতে পারেন। এটি করার জন্য, নিম্নলিখিত কমান্ডগুলির সাথে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করুন:

    Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present
    
    Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present=?0
    

    একাধিক আইটেম কমা দ্বারা পৃথক করা যেতে পারে এবং set , append , delete এবং clear একত্রিত করতে পারে।

    Shared-Storage-Write :
    set;key="hello";value="world";ignore_if_present, set;key="good";value="bye"
    

একটি মান যুক্ত করা হচ্ছে

আপনি append পদ্ধতি ব্যবহার করে বিদ্যমান কী-তে একটি মান যোগ করতে পারেন। যদি কী বিদ্যমান না থাকে, কলিং append() কী তৈরি করে এবং মান সেট করে। এটি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে সম্পন্ন করা যেতে পারে।

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    বিদ্যমান কীগুলির মান আপডেট করতে, ওয়ার্কলেটের ভিতরে বা বাইরে থেকে sharedStorage.append() ব্যবহার করুন।

    window.sharedStorage.append('myKey', 'myValue1');
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.append('myKey', 'myValue2');
    // Shared Storage: {'myKey': 'myValue1myValue2'}
    window.sharedStorage.append('anotherKey', 'hello');
    // Shared Storage: {'myKey': 'myValue1myValue2', 'anotherKey': 'hello'}
    

    ওয়ার্কলেটের ভিতরে যুক্ত করতে:

    sharedStorage.append('myKey', 'myValue1');
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    ভাগ করা সঞ্চয়স্থানে একটি মান সেট করার অনুরূপ, আপনি কী-মান জুড়িতে পাস করতে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করতে পারেন।

    Shared-Storage-Write : append;key="myKey";value="myValue2"
    

মানগুলির ব্যাচ আপডেট করা

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

আপনি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে লক সেট করতে পারেন:

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    উপলব্ধ জাভাস্ক্রিপ্ট পদ্ধতি যা batchUpdate() এর সাথে ব্যবহার করা যেতে পারে:

    • SharedStorageSetMethod() : শেয়ার করা সঞ্চয়স্থানে একটি কী-মানের জোড়া লেখে।
    • SharedStorageAppendMethod() : শেয়ার্ড স্টোরেজে বিদ্যমান একটি কী-তে একটি মান যুক্ত করে।
    • SharedStorageDeleteMethod() : শেয়ার্ড স্টোরেজ থেকে একটি কী-মানের জোড়া মুছে দেয়।
    • SharedStorageClearMethod() : শেয়ার্ড স্টোরেজের সমস্ত কী সাফ করে।
    sharedStorage.batchUpdate([
    new SharedStorageSetMethod('keyOne', 'valueOne'),
    new SharedStorageAppendMethod('keyTwo', 'valueTwo'),
    new SharedStorageDeleteMethod('keyThree'),
    new SharedStorageClearMethod()
    ]);
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    Shared-Storage-Write : batchUpdate;methods="set;key=keyOne;value=valueOne, append;key=keyTwo;value=valueTwo,delete;key=keyThree,clear"
    

শেয়ার্ড স্টোরেজ থেকে পড়া

আপনি শুধুমাত্র একটি ওয়ার্কলেট থেকে শেয়ার্ড স্টোরেজ থেকে পড়তে পারেন।

await sharedStorage.get('mykey');

ওয়ার্কলেট মডিউলটি যে ব্রাউজিং প্রেক্ষাপট থেকে লোড করা হয়েছিল তা নির্ধারণ করে কার শেয়ার করা স্টোরেজ পড়া হয়েছে।

শেয়ার্ড স্টোরেজ থেকে মুছে ফেলা হচ্ছে

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

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    ওয়ার্কলেটের বাইরে থেকে শেয়ার্ড স্টোরেজ থেকে মুছে ফেলতে:

    window.sharedStorage.delete('myKey');
    

    ওয়ার্কলেটের ভিতর থেকে শেয়ার্ড স্টোরেজ থেকে মুছে ফেলতে:

    sharedStorage.delete('myKey');
    

    ওয়ার্কলেটের বাইরে থেকে একবারে সমস্ত কী মুছে ফেলতে:

    window.sharedStorage.clear();
    

    ওয়ার্কলেটের ভিতর থেকে একবারে সমস্ত কী মুছে ফেলতে:

    sharedStorage.clear();
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    প্রতিক্রিয়া শিরোনাম ব্যবহার করে মান মুছে ফেলার জন্য, আপনি মোছার কী পাস করতে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করতে পারেন।

    delete;key="myKey"
    

    প্রতিক্রিয়া শিরোনাম ব্যবহার করে সমস্ত কী মুছে ফেলতে:

    clear;
    

শেয়ার্ড স্টোরেজ থেকে সুরক্ষিত শ্রোতাদের আগ্রহের গোষ্ঠী পড়া

আপনি একটি শেয়ার্ড স্টোরেজ ওয়ার্কলেট থেকে সুরক্ষিত দর্শকদের আগ্রহের গ্রুপগুলি পড়তে পারেন৷ interestGroups() পদ্ধতিটি AuctionInterestGroup এবং GenerateBidInterestGroup বৈশিষ্ট্য সহ StorageInterestGroup অবজেক্টের একটি অ্যারে প্রদান করে।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে ব্রাউজিং প্রসঙ্গ আগ্রহ গোষ্ঠীগুলি পড়তে হয় এবং কিছু সম্ভাব্য ক্রিয়াকলাপ যা পুনরুদ্ধার করা আগ্রহ গোষ্ঠীগুলিতে সঞ্চালিত হতে পারে৷ ব্যবহৃত দুটি সম্ভাব্য ক্রিয়াকলাপ হল আগ্রহের গোষ্ঠীর সংখ্যা খুঁজে বের করা এবং সর্বোচ্চ বিড গণনা সহ আগ্রহের গোষ্ঠী খুঁজে পাওয়া।

async function analyzeInterestGroups() {
  const interestGroups = await interestGroups();
  numIGs = interestGroups.length;
  maxBidCountIG = interestGroups.reduce((max, cur) => { return cur.bidCount > max.bidCount ? cur : max; }, interestGroups[0]);
  console.log("The IG that bid the most has name " + maxBidCountIG.name);
}

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

অপশন

সমস্ত শেয়ার্ড স্টোরেজ মডিফায়ার পদ্ধতি শেষ যুক্তি হিসাবে একটি ঐচ্ছিক বিকল্প বস্তুকে সমর্থন করে।

লক সহ

withLock বিকল্পটি ঐচ্ছিক। যদি নির্দিষ্ট করা থাকে, এই বিকল্পটি এগিয়ে যাওয়ার আগে Web Locks API ব্যবহার করে সংজ্ঞায়িত সংস্থানের জন্য একটি লক অর্জনের পদ্ধতি নির্দেশ করে। লক অনুরোধ করার সময় একটি লক নাম পাস করা হয়। নামটি এমন একটি সংস্থানকে প্রতিনিধিত্ব করে যার ব্যবহার মূলের মধ্যে একাধিক ট্যাব, কর্মী বা কোড জুড়ে সমন্বিত হয়।

withLock বিকল্পটি নিম্নলিখিত শেয়ার্ড স্টোরেজ মডিফায়ার পদ্ধতির সাথে ব্যবহার করা যেতে পারে:

  • সেট
  • সংযোজন
  • মুছে ফেলুন
  • পরিষ্কার
  • ব্যাচ আপডেট

আপনি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে লক সেট করতে পারেন:

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    sharedStorage.set('myKey', 'myValue', { withLock: 'myResource' });
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    Shared-Storage-Write : set;key="myKey";value="myValue";with_lock="myResource"
    

শেয়ার্ড স্টোরেজ লকগুলি ডেটা উত্স দ্বারা বিভাজিত হয়৷ লকগুলি লক ম্যানেজার রিকোয়েস্ট() পদ্ধতি ব্যবহার করে প্রাপ্ত যেকোন লক থেকে স্বাধীন, সেগুলি window বা worker প্রসঙ্গে যাই হোক না কেন। তবুও, তারা SharedStorageWorklet প্রসঙ্গে request() ব্যবহার করে প্রাপ্ত লকগুলির মতো একই সুযোগ ভাগ করে নেয়।

যদিও request() পদ্ধতি বিভিন্ন কনফিগারেশন বিকল্পের জন্য অনুমতি দেয়, শেয়ার্ড স্টোরেজের মধ্যে অর্জিত লকগুলি সর্বদা নিম্নলিখিত ডিফল্ট সেটিংস মেনে চলে:

  • mode: "exclusive" : একই নামের অন্য কোনো লক একসাথে রাখা যাবে না।
  • steal: false : একই নামের বিদ্যমান লকগুলি অন্যান্য অনুরোধগুলি মিটমাট করার জন্য প্রকাশ করা হয় না।
  • ifAvailable: false : লকটি উপলব্ধ না হওয়া পর্যন্ত অনুরোধগুলি অনির্দিষ্টকালের জন্য অপেক্ষা করে।
কখন ব্যবহার করবেন withLock

লকগুলি এমন পরিস্থিতিতে দরকারী যেখানে একই সাথে একাধিক ওয়ার্কলেট চলতে পারে (যেমন, একটি পৃষ্ঠায় একাধিক ওয়ার্কলেট, বা বিভিন্ন ট্যাবে একাধিক ওয়ার্কলেট) যার প্রত্যেকটি একই ডেটা দেখছে। সেই পরিস্থিতিতে, একটি সময়ে শুধুমাত্র একটি ওয়ার্কলেট রিপোর্ট প্রক্রিয়াকরণ করছে তা নিশ্চিত করতে প্রাসঙ্গিক ওয়ার্কলেট কোডটিকে একটি লক দিয়ে মোড়ানো একটি ভাল ধারণা৷

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

তালার ক্রম

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

উদাহরণ স্বরূপ:

// This line might pause until the lock is available.
sharedStorage.set('keyOne', 'valueOne', { withLock: 'resource-lock' });

// This line will run right away, even if the first one is still waiting.
sharedStorage.set('keyOne', 'valueTwo');
একাধিক কী উদাহরণ পরিবর্তন করুন

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

নিম্নলিখিত modify-multiple-keys.js উদাহরণটি modify-lock সহ keyOne এবং keyTwo জন্য নতুন মান সেট করে তারপর ওয়ার্কলেট থেকে modify-multiple-keys অপারেশন চালায়:

// modify-multiple-keys.js
sharedStorage.batchUpdate([
    new SharedStorageSetMethod('keyOne', calculateValueFor('keyOne')),
    new SharedStorageSetMethod('keyTwo', calculateValueFor('keyTwo'))
], { withLock: 'modify-lock' });

const modifyWorklet = await sharedStorage.createWorklet('modify-multiple-keys-worklet.js');
await modifyWorklet.run('modify-multiple-keys');

তারপরে, modify-multiple-keys-worklet.js মধ্যে আপনি navigator.locks.request() ব্যবহার করে প্রয়োজনীয় কীগুলি পড়তে এবং পরিবর্তন করার জন্য লকের অনুরোধ করতে পারেন

// modify-multiple-keys-worklet.js
class ModifyMultipleKeysOperation {
  async run(data) {
    await navigator.locks.request('modify-lock', async (lock) => {
      const value1 = await sharedStorage.get('keyOne');
      const value2 = await sharedStorage.get('keyTwo');

      // Do something with `value1` and `value2` here.

      await sharedStorage.delete('keyOne');
      await sharedStorage.delete('keyTwo');
    });
  }
}
register('modify-multiple-keys', ModifyMultipleKeysOperation);

প্রসঙ্গ স্যুইচিং

শেয়ার্ড স্টোরেজ ডেটা ব্রাউজিং প্রসঙ্গের মূলে (উদাহরণস্বরূপ, https://example.adtech.com) লেখা হয় যেখান থেকে কলটি এসেছে।

যখন আপনি একটি <script> ট্যাগ ব্যবহার করে তৃতীয় পক্ষের কোড লোড করেন, কোডটি এমবেডারের ব্রাউজিং প্রসঙ্গে কার্যকর করা হয়। অতএব, যখন তৃতীয় পক্ষের কোড sharedStorage.set() কল করে, তখন ডেটা এমবেডারের শেয়ার্ড স্টোরেজে লেখা হয়। আপনি যখন একটি আইফ্রেমের মধ্যে তৃতীয় পক্ষের কোডটি লোড করেন, কোডটি একটি নতুন ব্রাউজিং প্রসঙ্গ পায় এবং এর উত্সটি আইফ্রেমের উত্স। তাই, iframe থেকে করা sharedStorage.set() কল আইফ্রেম মূলের শেয়ার্ড স্টোরেজে ডেটা সঞ্চয় করে।

প্রথম পক্ষের প্রসঙ্গ

যদি কোনো প্রথম-পক্ষের পৃষ্ঠায় তৃতীয়-পক্ষের জাভাস্ক্রিপ্ট কোড এমবেড করা থাকে যা sharedStorage.set() বা sharedStorage.delete() কল করে, তাহলে মূল-মান জোড়া প্রথম-পক্ষের প্রসঙ্গে সংরক্ষণ করা হয়।

এম্বেড করা তৃতীয় পক্ষের জাভাস্ক্রিপ্ট সহ একটি প্রথম-পক্ষের পৃষ্ঠায় সংরক্ষিত ডেটা।

তৃতীয় পক্ষের প্রসঙ্গ

আইফ্রেমের মধ্যে থেকে জাভাস্ক্রিপ্ট কোডে একটি আইফ্রেম এবং কলিং set() বা delete() তৈরি করে কী-মানের জুটি বিজ্ঞাপন প্রযুক্তি বা তৃতীয়-পক্ষের প্রসঙ্গে সংরক্ষণ করা যেতে পারে।

অ্যাড-টেক বা থার্ড-পার্টি প্রসঙ্গে সংরক্ষিত ডেটা।

প্রাইভেট অ্যাগ্রিগেশন API

শেয়ার্ড স্টোরেজে সংরক্ষিত সমষ্টিগত ডেটা পরিমাপ করতে, আপনি ব্যক্তিগত একত্রীকরণ API ব্যবহার করতে পারেন।

একটি প্রতিবেদন তৈরি করতে, একটি বালতি এবং মান সহ একটি ওয়ার্কলেটের ভিতরে contributeToHistogram() কল করুন। বালতিটি একটি স্বাক্ষরবিহীন 128-বিট পূর্ণসংখ্যা দ্বারা উপস্থাপিত হয় যা একটি BigInt হিসাবে ফাংশনে পাস করতে হবে। মান একটি ধনাত্মক পূর্ণসংখ্যা।

গোপনীয়তা রক্ষা করার জন্য, রিপোর্টের পেলোড, যা বালতি এবং মান ধারণ করে, ট্রানজিটে এনক্রিপ্ট করা হয় এবং এটি শুধুমাত্র অ্যাগ্রিগেশন পরিষেবা ব্যবহার করে ডিক্রিপ্ট করা এবং একত্রিত করা যায়।

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

privateAggregation.contributeToHistogram({
  bucket: BigInt(myBucket),
  value: parseInt(myBucketValue)
});

শেয়ার্ড স্টোরেজ এবং প্রাইভেট অ্যাগ্রিগেশন নির্বাহ করা

ডিফল্টরূপে, createWorklet() এর সাথে শেয়ার্ড স্টোরেজ ব্যবহার করার সময়, ডাটা পার্টিশনের উৎস হবে ইনভোকিং ব্রাউজিং কনটেক্সটের উৎস, ওয়ার্কলেট স্ক্রিপ্টের উৎপত্তি নয়।

ডিফল্ট আচরণ পরিবর্তন করতে, createWorklet কল করার সময় dataOrigin বৈশিষ্ট্য সেট করুন।

  • dataOrigin: "context-origin" : (ডিফল্ট) ব্রাউজিং কনটেক্সট এর উত্সের শেয়ার্ড স্টোরেজে ডেটা সংরক্ষণ করা হয়।
  • dataOrigin: "script-origin" : ওয়ার্কলেট স্ক্রিপ্টের উত্সের ভাগ করা স্টোরেজে ডেটা সংরক্ষণ করা হয়। এই মোড সক্ষম করতে একটি অপ্ট-ইন প্রয়োজন৷
  • dataOrigin: "https://custom-data-origin.example" : ডেটা একটি কাস্টম ডেটা উৎসের শেয়ার্ড স্টোরেজে সংরক্ষণ করা হয়। এই মোডটি সক্ষম করার জন্য একটি অপ্ট-ইন প্রয়োজন এবং কাস্টম ডেটা মূলের বিশদ বিবরণ অনুসারে কাস্টম ডেটা উত্সের মালিকের সম্মতি প্রয়োজন৷
sharedStorage.createWorklet(scriptUrl, {dataOrigin: "script-origin"});

অপ্ট-ইন করার জন্য, "script-origin" বা একটি কাস্টম অরিজিন ব্যবহার করার সময়, স্ক্রিপ্ট এন্ডপয়েন্টকে হেডার Shared-Storage-Cross-Origin-Worklet-Allowed । ক্রস-অরিজিন অনুরোধের জন্য, CORS ও সক্ষম করা উচিত।

Shared-Storage-Cross-Origin-Worklet-Allowed : ?1
Access-Control-Allow-Origin: *

আপনি একটি তৃতীয় পক্ষের আইফ্রেম ব্যবহার করে ক্রস-অরিজিন স্ক্রিপ্টগুলিও চালাতে পারেন, এই ক্ষেত্রে শেয়ার্ড স্টোরেজ অ্যাকশনগুলি তৃতীয় পক্ষের ব্রাউজিং প্রসঙ্গে হবে৷

ক্রস-অরিজিন আইফ্রেম ব্যবহার করা

শেয়ার্ড স্টোরেজ ওয়ার্কলেট চালু করার জন্য একটি iframe প্রয়োজন।

বিজ্ঞাপনের আইফ্রেমে, addModule() কল করে ওয়ার্কলেট মডিউলটি লোড করুন। sharedStorageWorklet.js ওয়ার্কলেট ফাইলে নিবন্ধিত পদ্ধতিটি চালানোর জন্য, একই বিজ্ঞাপন iframe JavaScript-এ, sharedStorage.run() কল করুন।

const sharedStorageWorklet = await window.sharedStorage.createWorklet(
  'https://any-origin.example/modules/sharedStorageWorklet.js'
);
await sharedStorageWorklet.run('shared-storage-report', {
  data: { campaignId: '1234' },
});

ওয়ার্কলেট স্ক্রিপ্টে, আপনাকে অ্যাসিঙ্ক run পদ্ধতি সহ একটি ক্লাস তৈরি করতে হবে এবং বিজ্ঞাপনের আইফ্রেমে চালানোর জন্য এটি registersharedStorageWorklet.js এর ভিতরে :

class SharedStorageReportOperation {
  async run(data) {
    // Other code goes here.
    bucket = getBucket(...);
    value = getValue(...);
    privateAggregation.contributeToHistogram({
      bucket,
      value
    });
  }
}
register('shared-storage-report', SharedStorageReportOperation);

ক্রস-অরিজিন অনুরোধ ব্যবহার করে

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

প্রথম পক্ষের পৃষ্ঠাটি ক্রস-অরিজিন জাভাস্ক্রিপ্ট এন্ডপয়েন্টে একটি createWorklet() কল আহ্বান করতে পারে। ওয়ার্কলেট তৈরি করার সময় আপনাকে স্ক্রিপ্ট-অরিজিন হিসাবে ওয়ার্কলেটের ডেটা পার্টিশনের উত্স সেট করতে হবে।

async function crossOriginCall() {
  const privateAggregationWorklet = await sharedStorage.createWorklet(
    'https://cross-origin.example/js/worklet.js',
    { dataOrigin: 'script-origin' }
  );
  await privateAggregationWorklet.run('pa-worklet');
}
crossOriginCall();

ক্রস-অরিজিন জাভাস্ক্রিপ্ট এন্ডপয়েন্টকে Shared-Storage-Cross-Origin-Worklet-Allowed শিরোনামগুলির সাথে প্রতিক্রিয়া জানাতে হবে এবং নোট করুন যে অনুরোধের জন্য CORS সক্ষম করা হয়েছে।

Shared-Storage-Cross-Origin-Worklet-Allowed : ?1

createWorklet() ব্যবহার করে তৈরি ওয়ার্কলেটগুলিতে selectURL এবং run() থাকবে। addModule() এর জন্য উপলব্ধ নয়।

class CrossOriginWorklet {
  async run(data){
    // Other code goes here.
    bucket = getBucket(...);
    value = getValue(...);
    privateAggregation.contributeToHistogram({
      bucket,
      value
    });
  }
}

কাস্টম ডেটা মূল

যখন dataOrigin একটি বৈধ অরিজিনে সেট করা থাকে, তখন dataOrigin এর মালিককে অবশ্যই path /.well-known/shared-storage/trusted-origins এ ওয়ার্কলেট স্ক্রিপ্টের উত্স তালিকাভুক্ত একটি JSON ফাইল হোস্ট করে সেই dataOrigin জন্য শেয়ার্ড স্টোরেজ প্রক্রিয়াকরণে সম্মতি দিতে হবে। ফাইলটি scriptOrigin এবং contextOrigin কী সহ বস্তুর একটি অ্যারে হওয়া উচিত। এই কীগুলির মানগুলি হয় একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে হতে পারে।

নিম্নলিখিত তথ্য ব্যবহার করে trusted-origins ফাইল তৈরি করুন:

  • কলার প্রসঙ্গ
  • ওয়ার্কলেট স্ক্রিপ্ট উত্স এবং URL
  • তথ্য উৎপত্তি এবং মালিক

নিম্নলিখিত টেবিলটি দেখায় যে কীভাবে আপনি এই তথ্যের উপর ভিত্তি করে trusted-origins ফাইলটি তৈরি করতে পারেন:

কলার প্রসঙ্গ ওয়ার্কলেট স্ক্রিপ্ট ইউআরএল ডেটা উত্স ডেটার মালিক ডেটা অরিজিন মালিকের বিশ্বস্ত-উত্স জসন ফাইল
https: //publisher.example https: //publisher.example/script.js প্রসঙ্গ-উত্স https: //publisher.example JSON দরকার নেই
https: //publisher.example https: //ad.example/script.js স্ক্রিপ্ট-অরিজিন https: //ad.example JSON দরকার নেই
https: //publisher.example https: //cdn-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": "https://publisher.example"
}]
      
কোন কলার https: //cdn-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": "*"
}]
      
https: //publisher-a.example, বা https: //publisher-b.example https: //cdn-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": [
      "https://publisher-a.example",
      "https://publisher-b.example"
  ]
}]
      
https: //publisher.example https: //cdn-a-ad.example/script.js, বা https: //cdn-b-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": [
    "https://cdn-a-ad.example",
    "https://cdn-b-ad.example"
  ],
  "contextOrigin": "https://publisher.example"
}]
      

উদাহরণস্বরূপ, নিম্নলিখিত জেএসএনকে https://custom-data-origin.example/.well-known/shared-storage/trusted-origins shared-storage/trusted-origins এ হোস্ট করা যেতে পারে এবং https://custom-data-origin.example উত্সের জন্য ভাগ করা স্টোরেজ ডেটার সমস্ত অনুমোদিত প্রসেসরগুলিকে একত্রিত করা যায়।

[
  {
    "scriptOrigin": "https://script-origin.a.example",
    "contextOrigin": "https://context-origin.a.example"
  },
  {
    "scriptOrigin": "https://script-origin.b.example",
    "contextOrigin": [
      "https://context-origin.a.example",
      "https://context-origin.b.example"
    ]
}]

পরবর্তী পদক্ষেপ

নিম্নলিখিত পৃষ্ঠাগুলি ভাগ করা স্টোরেজ এবং ব্যক্তিগত সমষ্টি এপিআইগুলির গুরুত্বপূর্ণ দিকগুলি ব্যাখ্যা করে।

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

  • ডিবাগ প্রতিবেদনগুলি- context-origin/.well-known/private-aggregation/debug/report-shared-storage
  • প্রতিবেদনগুলি- context-origin/.well-known/private-aggregation/report-shared-storage

একবার প্রতিবেদন সংগ্রহ করা হয়ে গেলে, আপনি স্থানীয় পরীক্ষার সরঞ্জামটি ব্যবহার করে পরীক্ষা করতে পারেন বা একত্রিত প্রতিবেদনগুলি পেতে সমষ্টি পরিষেবাটির জন্য বিশ্বস্ত এক্সিকিউশন পরিবেশ সেট আপ করতে পারেন।

আপনার মতামত শেয়ার করুন

আপনি গিটহাবের এপিআই এবং ডকুমেন্টেশনে আপনার প্রতিক্রিয়া ভাগ করতে পারেন।

,

এই দস্তাবেজটি ভাগ করা স্টোরেজ এবং ব্যক্তিগত সমষ্টি ব্যবহারের জন্য একটি কুইকস্টার্ট গাইড। আপনার উভয় এপিআইয়ের একটি বোঝার প্রয়োজন কারণ ভাগ করা স্টোরেজ স্টোরগুলি মানগুলি এবং ব্যক্তিগত সমষ্টিগুলি সমষ্টিগত প্রতিবেদনগুলি তৈরি করে।

লক্ষ্য শ্রোতা: বিজ্ঞাপন প্রযুক্তি এবং পরিমাপ সরবরাহকারী।

শেয়ার্ড স্টোরেজ API

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

ভাগ করা স্টোরেজ প্রসঙ্গের উত্স ( sharedStorage কলার) এর মধ্যে সীমাবদ্ধ।

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

শেয়ার্ড স্টোরেজ অনুরোধ

বিজ্ঞাপন প্রযুক্তিগুলি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে ভাগ করে নেওয়া স্টোরেজে লিখতে পারে। ভাগ করা স্টোরেজ থেকে পড়া কেবল একটি বিচ্ছিন্ন জাভাস্ক্রিপ্ট পরিবেশের মধ্যে ঘটে যা একটি ওয়ার্কলেট বলে।

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

    অপারেশন চলাকালীন ওয়ার্কলেটে ব্যবহৃত পদ্ধতিগুলি প্রস্তাবিত এপিআই পৃষ্ঠে - ওয়ার্কলেটে পাওয়া যাবে।

  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    জাভাস্ক্রিপ্টের অনুরূপ, কেবলমাত্র নির্দিষ্ট ফাংশন যেমন সেটিং, সংযোজন এবং ভাগ করা স্টোরেজে মানগুলি মুছে ফেলা প্রতিক্রিয়া শিরোনাম ব্যবহার করে করা যেতে পারে। প্রতিক্রিয়া শিরোনামে ভাগ করে নেওয়া স্টোরেজের সাথে কাজ করার জন্য, Shared-Storage-Writable: ?1 অনুরোধ শিরোনামে অন্তর্ভুক্ত করতে হবে।

    ক্লায়েন্টের কাছ থেকে একটি অনুরোধ শুরু করতে, আপনার নির্বাচিত পদ্ধতির উপর নির্ভর করে নিম্নলিখিত কোডটি চালান:

    • fetch()

      fetch("https://a.example/path/for/updates", {sharedStorageWritable: true});
      
    • একটি iframe বা img ট্যাগ ব্যবহার করে

      <iframe src="https://a.example/path/for/updates" sharedstoragewritable></iframe>
      
    • একটি iframe বা img ট্যাগ সহ একটি আইডিএল বৈশিষ্ট্য ব্যবহার করে

      let iframe = document.getElementById("my-iframe");
      iframe.sharedStorageWritable = true;
      iframe.src = "https://a.example/path/for/updates";
      

আরও তথ্য ভাগ করা স্টোরেজ: প্রতিক্রিয়া শিরোনামে পাওয়া যাবে।

ভাগ করে নেওয়া স্টোরেজ লিখুন

ভাগ করে নেওয়া স্টোরেজ লিখতে, জাভাস্ক্রিপ্ট ওয়ার্কলেটের ভিতরে বা বাইরে থেকে sharedStorage.set() কল করুন। যদি ওয়ার্কলেটের বাইরে থেকে ডাকা হয় তবে কলটি থেকে তৈরি করা ব্রাউজিং প্রসঙ্গের উত্সটিতে ডেটা লেখা হয়। যদি ওয়ার্কলেটের ভিতরে থেকে ডাকা হয় তবে ডেটা ব্রাউজিং প্রসঙ্গের উত্সকে লিখিত হয় যা ওয়ার্কলেটটি লোড করে। সেট করা কীগুলি শেষ আপডেট থেকে 30 দিনের মেয়াদ শেষ হওয়ার তারিখ রয়েছে।

ignoreIfPresent ক্ষেত্রটি al চ্ছিক। যদি উপস্থিত এবং true সেট করা থাকে তবে কীটি ইতিমধ্যে বিদ্যমান থাকলে কী আপডেট করা হয় না। কীটি আপডেট না করা হলেও set() কল থেকে 30 দিনের মধ্যে কী মেয়াদ শেষ হয়।

যদি ভাগ করা স্টোরেজ একই কী সহ একই পৃষ্ঠার লোডে একাধিকবার অ্যাক্সেস করা হয় তবে কীটির মানটি ওভাররাইট করা হয়। sharedStorage.append() ব্যবহার করা ভাল ধারণা যদি কীটির পূর্ববর্তী মানটি বজায় রাখা প্রয়োজন।

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    ওয়ার্কলেটের বাইরে:

    window.sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: true });
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.set('myKey', 'myValue2', { ignoreIfPresent: false });
    // Shared Storage: {'myKey': 'myValue2'}
    

    একইভাবে, ওয়ার্কলেটের ভিতরে:

    sharedStorage.set('myKey', 'myValue1', { ignoreIfPresent: true });
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    আপনি প্রতিক্রিয়া শিরোনাম ব্যবহার করে ভাগ করে নেওয়া স্টোরেজে লিখতে পারেন। এটি করার জন্য, নিম্নলিখিত কমান্ডগুলির সাথে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করুন:

    Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present
    
    Shared-Storage-Write : set;key="myKey";value="myValue";ignore_if_present=?0
    

    একাধিক আইটেম কমা-বিচ্ছিন্ন হতে পারে এবং set , append , delete এবং clear করতে পারে।

    Shared-Storage-Write :
    set;key="hello";value="world";ignore_if_present, set;key="good";value="bye"
    

একটি মান সংযোজন

আপনি অ্যাপেন্ড পদ্ধতিটি ব্যবহার করে একটি বিদ্যমান কীতে একটি মান সংযোজন করতে পারেন। যদি কীটি বিদ্যমান না থাকে তবে কলিং append() কীটি তৈরি করে এবং মান সেট করে। এটি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে সম্পন্ন করা যেতে পারে।

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    বিদ্যমান কীগুলির মানগুলি আপডেট করতে, ওয়ার্কলেটের ভিতরে বা বাইরে থেকে sharedStorage.append() ব্যবহার করুন।

    window.sharedStorage.append('myKey', 'myValue1');
    // Shared Storage: {'myKey': 'myValue1'}
    window.sharedStorage.append('myKey', 'myValue2');
    // Shared Storage: {'myKey': 'myValue1myValue2'}
    window.sharedStorage.append('anotherKey', 'hello');
    // Shared Storage: {'myKey': 'myValue1myValue2', 'anotherKey': 'hello'}
    

    ওয়ার্কলেটের ভিতরে সংযোজন করতে:

    sharedStorage.append('myKey', 'myValue1');
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    ভাগ করে নেওয়া স্টোরেজে মান নির্ধারণের অনুরূপ, আপনি কী-মান জোড়ায় পাস করতে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করতে পারেন।

    Shared-Storage-Write : append;key="myKey";value="myValue2"
    

মানগুলির ব্যাচ আপডেট হচ্ছে

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

আপনি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে লকটি সেট করতে পারেন:

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    batchUpdate() এর সাথে ব্যবহার করা যেতে পারে এমন জাভাস্ক্রিপ্ট পদ্ধতিগুলির মধ্যে রয়েছে:

    • SharedStorageSetMethod() : ভাগ করা স্টোরেজে একটি কী-মূল্য জুটি লিখেছেন।
    • SharedStorageAppendMethod() : ভাগ করা স্টোরেজে একটি বিদ্যমান কীতে একটি মান যুক্ত করে।
    • SharedStorageDeleteMethod() : ভাগ করা স্টোরেজ থেকে একটি কী-মূল্য জুটি মুছে দেয়।
    • SharedStorageClearMethod() : ভাগ করা স্টোরেজে সমস্ত কীগুলি সাফ করে।
    sharedStorage.batchUpdate([
    new SharedStorageSetMethod('keyOne', 'valueOne'),
    new SharedStorageAppendMethod('keyTwo', 'valueTwo'),
    new SharedStorageDeleteMethod('keyThree'),
    new SharedStorageClearMethod()
    ]);
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    Shared-Storage-Write : batchUpdate;methods="set;key=keyOne;value=valueOne, append;key=keyTwo;value=valueTwo,delete;key=keyThree,clear"
    

ভাগ করা স্টোরেজ থেকে পড়া

আপনি কেবল একটি ওয়ার্কলেটের মধ্যে থেকে ভাগ করা স্টোরেজ থেকে পড়তে পারেন।

await sharedStorage.get('mykey');

ব্রাউজিং প্রসঙ্গের উত্স যা ওয়ার্লেট মডিউলটি লোড করা হয়েছিল তা নির্ধারণ করে যে কার ভাগ করা স্টোরেজটি পড়েছে।

ভাগ করা স্টোরেজ থেকে মুছে ফেলা হচ্ছে

আপনি জাভাস্ক্রিপ্ট ব্যবহার করে ওয়ার্কলেটের ভিতরে বা বাইরে থেকে বা delete() সহ প্রতিক্রিয়া শিরোনাম ব্যবহার করে শেয়ার্ড স্টোরেজ থেকে মুছে ফেলতে পারেন। একবারে সমস্ত কী মুছতে, উভয় থেকে clear() ব্যবহার করুন।

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    ওয়ার্কলেটের বাইরে থেকে ভাগ করে নেওয়া স্টোরেজ থেকে মুছতে:

    window.sharedStorage.delete('myKey');
    

    ওয়ার্কলেটের ভিতরে থেকে ভাগ করে নেওয়া স্টোরেজ থেকে মুছতে:

    sharedStorage.delete('myKey');
    

    ওয়ার্কলেটের বাইরে থেকে একবারে সমস্ত কীগুলি মুছতে:

    window.sharedStorage.clear();
    

    ওয়ার্কলেটের ভিতরে থেকে একবারে সমস্ত কীগুলি মুছতে:

    sharedStorage.clear();
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    প্রতিক্রিয়া শিরোনামগুলি ব্যবহার করে মানগুলি মুছতে, আপনি মুছে ফেলা কীটি পাস করতে প্রতিক্রিয়া শিরোনামে Shared-Storage-Write ব্যবহার করতে পারেন।

    delete;key="myKey"
    

    প্রতিক্রিয়া শিরোনাম ব্যবহার করে সমস্ত কী মুছতে:

    clear;
    

ভাগ করা স্টোরেজ থেকে সুরক্ষিত শ্রোতাদের আগ্রহের গোষ্ঠীগুলি পড়া

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

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

async function analyzeInterestGroups() {
  const interestGroups = await interestGroups();
  numIGs = interestGroups.length;
  maxBidCountIG = interestGroups.reduce((max, cur) => { return cur.bidCount > max.bidCount ? cur : max; }, interestGroups[0]);
  console.log("The IG that bid the most has name " + maxBidCountIG.name);
}

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

অপশন

সমস্ত ভাগ করা স্টোরেজ মডিফায়ার পদ্ধতিগুলি শেষ যুক্তি হিসাবে একটি al চ্ছিক বিকল্প অবজেক্টকে সমর্থন করে।

উইথলক

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

নীচের শেয়ার্ড স্টোরেজ মডিফায়ার পদ্ধতির সাথে withLock বিকল্পটি ব্যবহার করা যেতে পারে:

  • সেট
  • সংযোজন
  • মুছে ফেলুন
  • পরিষ্কার
  • ব্যাচ আপডেট

আপনি জাভাস্ক্রিপ্ট বা প্রতিক্রিয়া শিরোনাম ব্যবহার করে লকটি সেট করতে পারেন:

  • জাভাস্ক্রিপ্ট ব্যবহার করে

    sharedStorage.set('myKey', 'myValue', { withLock: 'myResource' });
    
  • প্রতিক্রিয়া শিরোনাম ব্যবহার করে

    Shared-Storage-Write : set;key="myKey";value="myValue";with_lock="myResource"
    

ভাগ করা স্টোরেজ লকগুলি ডেটা উত্স দ্বারা বিভাজন করা হয়। লকগুলি কোনও window বা worker প্রসঙ্গে থাকুক না কেন লকম্যানেজার অনুরোধ () পদ্ধতি ব্যবহার করে প্রাপ্ত কোনও লক থেকে পৃথক। তবুও, তারা শেয়ারডস্টোরেজ ওয়ার্কলেট প্রসঙ্গে request() ব্যবহার করে প্রাপ্ত লকগুলির মতো একই সুযোগ ভাগ করে দেয়।

request() পদ্ধতিটি বিভিন্ন কনফিগারেশন বিকল্পগুলির জন্য অনুমতি দেয়, ভাগ করা স্টোরেজের মধ্যে অর্জিত লকগুলি সর্বদা নিম্নলিখিত ডিফল্ট সেটিংস মেনে চলে:

  • mode: "exclusive" : একই নামের সাথে অন্য কোনও লক একই সাথে অনুষ্ঠিত হতে পারে না।
  • steal: false : একই নাম সহ বিদ্যমান লকগুলি অন্যান্য অনুরোধগুলি সামঞ্জস্য করার জন্য প্রকাশ করা হয় না।
  • ifAvailable: false : লকটি উপলভ্য না হওয়া পর্যন্ত অনুরোধগুলি অনির্দিষ্টকালের জন্য অপেক্ষা করে।
যখন withLock ব্যবহার করবেন

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

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

লক অর্ডার

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

উদাহরণ স্বরূপ:

// This line might pause until the lock is available.
sharedStorage.set('keyOne', 'valueOne', { withLock: 'resource-lock' });

// This line will run right away, even if the first one is still waiting.
sharedStorage.set('keyOne', 'valueTwo');
একাধিক কী উদাহরণ পরিবর্তন করুন

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

নিম্নলিখিত modify-multiple-keys.js উদাহরণটি keyOne জন্য নতুন মান সেট করে এবং modify-lock সহ keyTwo পরে ওয়ার্কলেট থেকে modify-multiple-keys অপারেশন সম্পাদন করে:

// modify-multiple-keys.js
sharedStorage.batchUpdate([
    new SharedStorageSetMethod('keyOne', calculateValueFor('keyOne')),
    new SharedStorageSetMethod('keyTwo', calculateValueFor('keyTwo'))
], { withLock: 'modify-lock' });

const modifyWorklet = await sharedStorage.createWorklet('modify-multiple-keys-worklet.js');
await modifyWorklet.run('modify-multiple-keys');

তারপরে, modify-multiple-keys-worklet.js মধ্যে আপনি প্রয়োজনীয় হিসাবে কীগুলি পড়তে এবং সংশোধন করতে navigator.locks.request() ব্যবহার করে লকটি অনুরোধ করতে পারেন

// modify-multiple-keys-worklet.js
class ModifyMultipleKeysOperation {
  async run(data) {
    await navigator.locks.request('modify-lock', async (lock) => {
      const value1 = await sharedStorage.get('keyOne');
      const value2 = await sharedStorage.get('keyTwo');

      // Do something with `value1` and `value2` here.

      await sharedStorage.delete('keyOne');
      await sharedStorage.delete('keyTwo');
    });
  }
}
register('modify-multiple-keys', ModifyMultipleKeysOperation);

প্রসঙ্গ স্যুইচিং

শেয়ার্ড স্টোরেজ ডেটা ব্রাউজিং প্রসঙ্গে যে কলটি থেকে উদ্ভূত হয়েছিল তার উত্সটিতে (উদাহরণস্বরূপ, https://example.adtech.com) লিখিত হয়।

আপনি যখন <script> ট্যাগ ব্যবহার করে তৃতীয় পক্ষের কোডটি লোড করেন, তখন কোডটি এম্বেডারের ব্রাউজিং প্রসঙ্গে কার্যকর করা হয়। অতএব, যখন তৃতীয় পক্ষের কোডটি sharedStorage.set() কল করে, তখন ডেটা এম্বেডারের ভাগ করা স্টোরেজে লেখা হয়। আপনি যখন কোনও আইফ্রেমের মধ্যে তৃতীয় পক্ষের কোডটি লোড করেন, কোডটি একটি নতুন ব্রাউজিং প্রসঙ্গ গ্রহণ করে এবং এর উত্স হ'ল আইফ্রেমের উত্স। অতএব, আইফ্রেম থেকে তৈরি sharedStorage.set() কলটি আইফ্রেমের উত্সের ভাগ করা স্টোরেজে ডেটা সঞ্চয় করে।

প্রথম পক্ষের প্রসঙ্গ

যদি প্রথম পক্ষের পৃষ্ঠাটি তৃতীয় পক্ষের জাভাস্ক্রিপ্ট কোড এম্বেড করে থাকে যা sharedStorage.set() বা sharedStorage.delete() কে কল করে, কী-মান জুটি প্রথম পক্ষের প্রসঙ্গে সংরক্ষণ করা হয়।

এম্বেড থাকা তৃতীয় পক্ষের জাভাস্ক্রিপ্ট সহ প্রথম পক্ষের পৃষ্ঠায় সঞ্চিত ডেটা।

তৃতীয় পক্ষের প্রসঙ্গ

আইফ্রেমের মধ্যে থেকে জাভাস্ক্রিপ্ট কোডে একটি আইফ্রেম তৈরি এবং কলিং set() বা delete() মাধ্যমে কী-মূল্য জুটি বিজ্ঞাপন প্রযুক্তি বা তৃতীয় পক্ষের প্রসঙ্গে সংরক্ষণ করা যেতে পারে।

বিজ্ঞাপন-প্রযুক্তি বা তৃতীয় পক্ষের প্রসঙ্গে সঞ্চিত ডেটা।

ব্যক্তিগত সমষ্টি এপিআই

ভাগ করা স্টোরেজে সঞ্চিত সমষ্টিগত ডেটা পরিমাপ করতে, আপনি ব্যক্তিগত সমষ্টি এপিআই ব্যবহার করতে পারেন।

একটি প্রতিবেদন তৈরি করতে, একটি বালতি এবং মান সহ একটি ওয়ার্কলেটের ভিতরে contributeToHistogram() কল করুন। বালতিটি একটি স্বাক্ষরযুক্ত 128-বিট পূর্ণসংখ্যা দ্বারা প্রতিনিধিত্ব করা হয় যা অবশ্যই একটি BigInt হিসাবে ফাংশনে যেতে হবে। মানটি একটি ইতিবাচক পূর্ণসংখ্যা।

গোপনীয়তা রক্ষার জন্য, প্রতিবেদনের পে -লোড, যা বালতি এবং মান ধারণ করে, ট্রানজিটে এনক্রিপ্ট করা হয় এবং এটি কেবল সংহতকরণ পরিষেবাটি ব্যবহার করে ডিক্রিপ্ট করা এবং একত্রিত করা যায়।

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

privateAggregation.contributeToHistogram({
  bucket: BigInt(myBucket),
  value: parseInt(myBucketValue)
});

ভাগ করে নেওয়া স্টোরেজ এবং ব্যক্তিগত সমষ্টি সম্পাদন করা

ডিফল্টরূপে, createWorklet() এর সাথে ভাগ করে নেওয়া স্টোরেজ ব্যবহার করার সময়, ডেটা পার্টিশন উত্সটি হ'ল ইনভোকিং ব্রাউজিং প্রসঙ্গের উত্স হবে, ওয়ার্লেট স্ক্রিপ্টের নিজেই উত্স নয়।

ডিফল্ট আচরণ পরিবর্তন করতে, createWorklet কল করার সময় dataOrigin সম্পত্তি সেট করুন।

  • dataOrigin: "context-origin" : (ডিফল্ট) ডেটা ইনভোকিং ব্রাউজিং প্রসঙ্গের উত্সের ভাগ করে নেওয়া স্টোরেজে সংরক্ষণ করা হয়।
  • dataOrigin: "script-origin" : ডেটা ওয়ার্কলেট স্ক্রিপ্টের উত্সের ভাগ করে নেওয়া স্টোরেজে সংরক্ষণ করা হয়। এই মোড সক্ষম করতে একটি অপ্ট-ইন প্রয়োজন।
  • dataOrigin: "https://custom-data-origin.example" : ডেটা কাস্টম ডেটা উত্সের ভাগ করে নেওয়া স্টোরেজে সঞ্চিত থাকে। এই মোড সক্ষম করার জন্য একটি অপ্ট-ইন প্রয়োজন এবং কাস্টম ডেটা উত্সের মালিকের কাছ থেকে সম্মতি প্রয়োজন, যেমন কাস্টম ডেটা উত্সে বিস্তারিত।
sharedStorage.createWorklet(scriptUrl, {dataOrigin: "script-origin"});

"script-origin" বা কাস্টম উত্স ব্যবহার করার সময় অপ্ট-ইন করার জন্য, স্ক্রিপ্ট এন্ডপয়েন্টটি শিরোনাম Shared-Storage-Cross-Origin-Worklet-Allowed সাথে প্রতিক্রিয়া জানাতে হবে। ক্রস-অরিজিন অনুরোধগুলির জন্য, সিওআরগুলিও সক্ষম করা উচিত।

Shared-Storage-Cross-Origin-Worklet-Allowed : ?1
Access-Control-Allow-Origin: *

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

ক্রস-অরিজিন আইফ্রেম ব্যবহার করে

ভাগ করা স্টোরেজ ওয়ার্কলেটটি অনুরোধ করার জন্য একটি আইফ্রেমের প্রয়োজন।

বিজ্ঞাপনের আইফ্রেমে, addModule() কল করে ওয়ার্কলেট মডিউলটি লোড করুন। sharedStorageWorklet.js ওয়ার্কলেট ফাইলটিতে নিবন্ধিত পদ্ধতিটি চালানোর জন্য, একই বিজ্ঞাপনে ইফ্রেম জাভাস্ক্রিপ্টে, sharedStorage.run() কল করুন।

const sharedStorageWorklet = await window.sharedStorage.createWorklet(
  'https://any-origin.example/modules/sharedStorageWorklet.js'
);
await sharedStorageWorklet.run('shared-storage-report', {
  data: { campaignId: '1234' },
});

ওয়ার্কলেট স্ক্রিপ্টে, আপনাকে একটি অ্যাসিঙ্ক run পদ্ধতি সহ একটি ক্লাস তৈরি করতে হবে এবং বিজ্ঞাপনের আইফ্রেমে চালানোর জন্য এটি registersharedStorageWorklet.js :

class SharedStorageReportOperation {
  async run(data) {
    // Other code goes here.
    bucket = getBucket(...);
    value = getValue(...);
    privateAggregation.contributeToHistogram({
      bucket,
      value
    });
  }
}
register('shared-storage-report', SharedStorageReportOperation);

ক্রস-অরিজিন অনুরোধ ব্যবহার করে

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

প্রথম পক্ষের পৃষ্ঠাটি ক্রস-উত্স জাভাস্ক্রিপ্ট এন্ডপয়েন্টে একটি createWorklet() কলও আহ্বান করতে পারে। ওয়ার্কলেটটি তৈরি করার সময় আপনাকে স্ক্রিপ্ট-উত্সের মতো ওয়ার্কলেটের ডেটা পার্টিশন উত্স সেট করতে হবে।

async function crossOriginCall() {
  const privateAggregationWorklet = await sharedStorage.createWorklet(
    'https://cross-origin.example/js/worklet.js',
    { dataOrigin: 'script-origin' }
  );
  await privateAggregationWorklet.run('pa-worklet');
}
crossOriginCall();

ক্রস-অরিজিন জাভাস্ক্রিপ্ট এন্ডপয়েন্টটি হেডারদের Shared-Storage-Cross-Origin-Worklet-Allowed সাথে প্রতিক্রিয়া জানাতে হবে এবং নোট করুন যে অনুরোধটির জন্য কর্স সক্ষম করা হয়েছে।

Shared-Storage-Cross-Origin-Worklet-Allowed : ?1

createWorklet() ব্যবহার করে তৈরি ওয়ার্কলেটগুলিতে selectURL এবং run() থাকবে। addModule() এর জন্য উপলভ্য নয়।

class CrossOriginWorklet {
  async run(data){
    // Other code goes here.
    bucket = getBucket(...);
    value = getValue(...);
    privateAggregation.contributeToHistogram({
      bucket,
      value
    });
  }
}

কাস্টম ডেটা উত্স

যখন dataOrigin কোনও বৈধ উত্সে সেট করা থাকে, তখন dataOrigin মালিককে অবশ্যই সেই dataOrigin জন্য ভাগ করে নেওয়া স্টোরেজ প্রসেসিংয়ের সাথে সম্মতি জানাতে হবে একটি জেএসএন ফাইল হোস্ট করে PATA /.well-known/shared-storage/trusted-origins পরিচিত/শেয়ারড-স্টোরেজ/ট্রাস্টেড-অরিজিনগুলিতে তালিকাভুক্ত ওয়ার্ল্ড স্ক্রিপ্ট উত্সকে তালিকাভুক্ত করে। ফাইলটি কীগুলি scriptOrigin এবং contextOrigin সহ অবজেক্টের একটি অ্যারে হওয়া উচিত। এই কীগুলির মানগুলি হয় স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে হতে পারে।

নিম্নলিখিত তথ্য ব্যবহার করে trusted-origins ফাইলটি তৈরি করুন:

  • কলার প্রসঙ্গ
  • ওয়ার্কলেট স্ক্রিপ্ট উত্স এবং ইউআরএল
  • ডেটা উত্স এবং মালিক

নিম্নলিখিত টেবিলটি দেখায় যে কীভাবে আপনি এই তথ্যের উপর ভিত্তি করে trusted-origins ফাইলটি তৈরি করতে পারেন:

কলার প্রসঙ্গ ওয়ার্কলেট স্ক্রিপ্ট ইউআরএল ডেটা উত্স ডেটার মালিক ডেটা অরিজিন মালিকের বিশ্বস্ত-উত্স জসন ফাইল
https: //publisher.example https: //publisher.example/script.js প্রসঙ্গ-উত্স https: //publisher.example JSON দরকার নেই
https: //publisher.example https: //ad.example/script.js স্ক্রিপ্ট-অরিজিন https: //ad.example JSON দরকার নেই
https: //publisher.example https: //cdn-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": "https://publisher.example"
}]
      
কোন কলার https: //cdn-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": "*"
}]
      
https: //publisher-a.example, বা https: //publisher-b.example https: //cdn-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": "https://cdn-ad.example",
  "contextOrigin": [
      "https://publisher-a.example",
      "https://publisher-b.example"
  ]
}]
      
https: //publisher.example https: //cdn-a-ad.example/script.js, বা https: //cdn-b-ad.example/script.js https: //ad.example https: //ad.example
[{
  "scriptOrigin": [
    "https://cdn-a-ad.example",
    "https://cdn-b-ad.example"
  ],
  "contextOrigin": "https://publisher.example"
}]
      

উদাহরণস্বরূপ, নিম্নলিখিত জেএসএনকে https://custom-data-origin.example/.well-known/shared-storage/trusted-origins shared-storage/trusted-origins এ হোস্ট করা যেতে পারে এবং https://custom-data-origin.example উত্সের জন্য ভাগ করা স্টোরেজ ডেটার সমস্ত অনুমোদিত প্রসেসরগুলিকে একত্রিত করা যায়।

[
  {
    "scriptOrigin": "https://script-origin.a.example",
    "contextOrigin": "https://context-origin.a.example"
  },
  {
    "scriptOrigin": "https://script-origin.b.example",
    "contextOrigin": [
      "https://context-origin.a.example",
      "https://context-origin.b.example"
    ]
}]

পরবর্তী পদক্ষেপ

নিম্নলিখিত পৃষ্ঠাগুলি ভাগ করা স্টোরেজ এবং ব্যক্তিগত সমষ্টি এপিআইগুলির গুরুত্বপূর্ণ দিকগুলি ব্যাখ্যা করে।

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

  • ডিবাগ প্রতিবেদনগুলি- context-origin/.well-known/private-aggregation/debug/report-shared-storage
  • প্রতিবেদনগুলি- context-origin/.well-known/private-aggregation/report-shared-storage

একবার প্রতিবেদন সংগ্রহ করা হয়ে গেলে, আপনি স্থানীয় পরীক্ষার সরঞ্জামটি ব্যবহার করে পরীক্ষা করতে পারেন বা একত্রিত প্রতিবেদনগুলি পেতে সমষ্টি পরিষেবাটির জন্য বিশ্বস্ত এক্সিকিউশন পরিবেশ সেট আপ করতে পারেন।

আপনার মতামত শেয়ার করুন

আপনি গিটহাবের এপিআই এবং ডকুমেন্টেশনে আপনার প্রতিক্রিয়া ভাগ করতে পারেন।