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


372

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

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


আমি মনে করি আপনি এই আলাপটি খুব বেশি উল্লেখ করতে পারেন youtube.com/watch?v=-DX3vJiqxm4 যেখানে তিনি বিশেষত বেঞ্চমার্ক সম্পর্কে কথা বলেছেন।
inafalcao

উত্তর:


493

আমি ভার্চুয়াল-ডম মডিউলটির প্রাথমিক লেখক , তাই আমি আপনার প্রশ্নের উত্তর দিতে সক্ষম হতে পারি। এখানে আসলে 2 টি সমস্যা সমাধান করা দরকার

  1. আমি কখন পুনরায় রেন্ডার করব? উত্তর: যখন আমি পর্যবেক্ষণ করি যে ডেটা ময়লা।
  2. আমি কীভাবে দক্ষতার সাথে পুনরায় রেন্ডার করব? উত্তর: একটি আসল ডিওএম প্যাচ তৈরি করতে ভার্চুয়াল ডিওএম ব্যবহার করা

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

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

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

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


1
উপাদানগুলির প্রপসগুলিতে কি নোংরা চেক করা প্রতিক্রিয়া দেখায়? আমি জিজ্ঞাসা করলাম কারণ কোনও সেটপ্রপস () ফাংশন নেই।
বেনলিচ

2
একটি সেটপ্রপস রয়েছে: ফেসবুক.
মারিয়াস

1
এর উদাহরণ কী হবে unnecessary re-renders?
vsync

9
আপনি যখন "যখন ভার্চুয়াল DOM ডিফ / প্যাচ অ্যালগরিদম সম্ভবত অনুকূল সমাধান নয়" বলছেন, তখন আপনার মনে কি তাত্ত্বিকভাবে আরও অনুকূল সমাধান রয়েছে?
সিএমসিডিগ্রাগনকাই

3
এটি পুরোপুরি প্রশ্নের উত্তর বলে মনে হচ্ছে না। প্রতিক্রিয়াটির জন্য আপনাকে রাষ্ট্রের পরিবর্তন হয়েছে এমন সিগন্যাল দেওয়ার জন্য সেটস্টেট ব্যবহার করতে হবে। যদি আপনি এটি করতে সক্ষম হন this.state.cats = 99তবে মডেল পরিবর্তনগুলি পরীক্ষা করার জন্য আপনার এখনও নোংরা চেকিং দরকার হবে, ঠিক যেমন কৌণিক নোংরা $ স্কোপ ট্রিটি পরীক্ষা করে। এটি দুটি কৌশলগুলির গতির তুলনা নয়, এটি কেবল একটি বিবৃতি যে প্রতিক্রিয়া নোংরা চেকিং করে না কারণ এর পরিবর্তে ব্যাকবোন স্টাইলের সেটার রয়েছে।
সুপারলুমিনারি

133

আমি সম্প্রতি এখানে প্রতিক্রিয়ার ডিফ অ্যালগরিদম সম্পর্কে একটি নিবন্ধটি পড়েছি: http://clara.perfplanet.com/2013/diff/ । আমি যা বুঝতে পেরেছি তা থেকে যা প্রতিক্রিয়া দ্রুত ঘটায় তা হ'ল:

  • ব্যাচড ডোম রিড / রাইটিং অপারেশন।
  • কেবলমাত্র উপ-গাছের দক্ষ আপডেট।

নোংরা-চেকের তুলনায়, আইএমওর মূল পার্থক্যগুলি হ'ল:

  1. মডেল নোংরা চেকিং : প্রতিক্রিয়া উপাদানটি যখনই setStateডাকা হয় তখন স্পষ্টভাবে নোংরা হিসাবে সেট করা হয়, সুতরাং এখানে কোনও তথ্যের তুলনা (ডেটার) প্রয়োজন নেই। নোংরা-চেক করার জন্য, তুলনা (মডেলগুলির) সর্বদা প্রতিটি ডাইজেস্ট লুপ হয়।

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

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


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

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

1
কৌণিকের কথা বলছি, কারণ পর্যবেক্ষকরা হজমের সময়ও রাজ্যকে পরিবর্তন করতে পারে, $scope.$digestডাইজেস্ট চক্র প্রতি একাধিকবার মৃত্যুদন্ড কার্যকর করা হয়, সুতরাং এটি আংশিক ভার্চুয়াল ডিওএম গাছের তুলনার একক সময়ের বিপরীতে সম্পূর্ণ ডেটা তুলনার একাধিকবার।
টুংড

4
দুঃখজনক যে অনেক স্মার্ট বিকাশকারীরা "ধীর" ডিওএম এবং তার সাথে মোকাবিলা করার জন্য কৌশলগুলির "পর্বতমালা" আবিষ্কার করে, কেবল ব্রাউজারগুলি নিজেরাই ঠিক করার জন্য আমাদের সম্মিলিত মনোযোগ কেন্দ্রীভূত করার পরিবর্তে আমাদের একবার এবং সকলের জন্য ডোমকে স্লোনেস থেকে মুক্তি দেয়। এটি ক্যান্সার মোকাবেলা করার জন্য এবং রোগীর জীবন উন্নত করার উপায় হিসাবে গবেষণা করার জন্য মানবতার সমস্ত সম্পদকে ব্যবহার করার মতো, কেবল ক্যান্সার নিজেই ঠিক করার পরিবর্তে। Ridicules।
vsync

@vsync DOM- কে স্ক্রিনে স্টাফ প্রদর্শন করা দরকার। ভার্চুয়াল ডিওএম করে না। এমনকি কিছু আদর্শ পারফর্মিং ডিওএম সহ, ভার্চুয়াল ডিওএম তৈরি করা আরও দ্রুত হবে be
জাহান

75

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

- ওপি

প্রতিক্রিয়া কেবলমাত্র ডিওএম ম্যানিপুলেশন লাইব্রেরি নয়। আমি আপনাকে Auth0 থেকে এই নিবন্ধটি পড়ার মাধ্যমে বিকল্পগুলি বোঝার জন্য উত্সাহিত করছি যাতে বিশদ ব্যাখ্যা এবং মানদণ্ড রয়েছে। আপনি এখানে যেমন জিজ্ঞাসা করেছেন তেমন আমি তাদের পক্ষে মতামত তুলে ধরব:

React.js এর ভার্চুয়াল ডোম

এখানে চিত্র বর্ণনা লিখুন

অনুকূল

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

CONS

  • DOM এর সম্পূর্ণ মেমরি অনুলিপি (উচ্চতর স্মৃতি ব্যবহার)
  • স্থির এবং গতিশীল উপাদানগুলির মধ্যে কোনও পার্থক্য নেই

Ember.js 'গ্লিমার

এখানে চিত্র বর্ণনা লিখুন

অনুকূল

  • দ্রুত এবং দক্ষ পৃথকীকরণ অ্যালগরিদম
  • স্থির এবং গতিশীল উপাদানগুলির মধ্যে পার্থক্য
  • এম্বারের এপিআইয়ের সাথে 100% সামঞ্জস্যপূর্ণ (আপনি আপনার বিদ্যমান কোডে কোনও বড় আপডেট ছাড়াই সুবিধা পান)
  • ডিওএমের লাইটওয়েট ইন মেমরি উপস্থাপনা

CONS

  • অর্থ কেবলমাত্র অ্যাম্বারে ব্যবহৃত হবে
  • শুধুমাত্র একটি ফ্রন্টএন্ড উপলব্ধ

বর্ধিত ডিওএম

এখানে চিত্র বর্ণনা লিখুন

অনুকূল

  • কমে যাওয়া মেমরির ব্যবহার
  • সাধারণ এপিআই
  • অনেকগুলি সম্মুখভাগ এবং ফ্রেমওয়ার্কের সাথে সহজেই সংহত করা হয় (প্রথম থেকেই টেম্পলেট ইঞ্জিন ব্যাকএন্ড হিসাবে বোঝানো হয়)

CONS

  • অন্যান্য গ্রন্থাগারগুলির মতো দ্রুত নয় (এটি তর্কযোগ্য, নীচের মানদণ্ডগুলি দেখুন)
  • কম মনের ভাগাভাগি এবং সম্প্রদায় ব্যবহার

রিঅ্যাক্টজেএসের ডোম হেরফেরের উপস্থাপনা আমার কাছে সামান্যই মনে হচ্ছে। রিঅ্যাক্টজেএসের ভার্চুয়াল ডোমটি হ'ল যা পুরোপুরি পরিবর্তিত হয়, আসল ডোমটি সঠিক নয়? আমি নিবন্ধটি রেফারেন্স করা নিবন্ধটি মূল নিবন্ধটিতে দেখছি এবং এখানে আমি যা দেখছি তা হল - teropa.info/images/onchange_vdom_change.svgteropa.info/blog/2015/03/02/…
smile.al.d.way

35

এখানে রিয়েট দলের সদস্য সেবাস্তিয়ান মার্কবাজের একটি মন্তব্য যা এতে কিছুটা আলোকপাত করে:

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

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

নোংরা চেকিং এবং অবজেক্ট.ওবিজার ক্লোজার স্কোপ স্থিতিতে কাজ করে না।

এই দুটি জিনিস স্পষ্টত ক্রিয়ামূলক নিদর্শনগুলিতে সীমাবদ্ধ।

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

https://news.ycombinator.com/item?id=6937668


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

2
ক্যাশেড সংগ্রহগুলি পৃষ্ঠাভুক্ত করা হচ্ছে।
কেন্টর

-2

ভার্চুয়াল ডোম প্রতিক্রিয়া দ্বারা উদ্ভাবিত হয় না। এটি এইচটিএমএল ডোমের অংশ। এটি লাইটওয়েট এবং ব্রাউজার-নির্দিষ্ট প্রয়োগের বিশদ থেকে পৃথক।

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

ভার্চুয়াল ডোমটি কেন ব্যবহৃত হয় তার নীচে নীচে ( রিঅ্যাক্টজেএসে উত্স ভার্চুয়াল ডোম ):

যখন তুমি কর:

document.getElementById('elementId').innerHTML = "New Value" Following thing happens:
  1. ব্রাউজারটির এইচটিএমএল বিশ্লেষণ করা দরকার
  2. এটি উপাদান আইডির শিশু উপাদানটিকে সরিয়ে দেয়
  3. নতুন মান সহ ডোম মান আপডেট করে
  4. পিতামাতা এবং সন্তানের জন্য সিএসএস পুনরায় গণনা করুন
  5. লেআউটটি আপডেট করুন অর্থাত্ প্রতিটি উপাদান স্ক্রিনে যথাযথ সমন্বয় করে
  6. গাছটি রেন্ডার করুন এবং ব্রাউজারের ডিসপ্লেতে এঁকে দিন

সিএসএস এবং পরিবর্তিত বিন্যাসগুলি পুনরায় গণনা করা জটিল অ্যালগরিদম ব্যবহার করে এবং তারা কার্য সম্পাদনকে প্রভাবিত করে।

পাশাপাশি ডিওএম বৈশিষ্ট্যগুলি আপডেট করে। মান। এটি একটি অ্যালগরিদম অনুসরণ করে।

এখন, ধরুন আপনি যদি ডমকে সরাসরি 10 বার আপডেট করেন তবে উপরের সমস্ত পদক্ষেপ একের পর এক চলবে এবং ডিওএম অ্যালগরিদমগুলি আপডেট করার ক্ষেত্রে ডিওএম মানগুলি আপডেট করতে সময় লাগবে।

এই কারণেই রিয়েল ডিওএম ভার্চুয়াল ডিওএমের চেয়ে ধীর।


3
উদাহরণস্বরূপ, আপনি যদি ডমকে সরাসরি বা ভার্চুয়াল ডোমের মাধ্যমে পরিবর্তন করে চলেছেন তবে শেষ পর্যন্ত উভয় ক্ষেত্রেই আপনি ডোম পরিবর্তন করছেন।
Magallanes

হ্যাঁ উভয় ক্ষেত্রেই আমরা ডোম আপডেট করছি তবে ভার্চুয়াল ডোমের ক্ষেত্রে এটি নির্দিষ্ট করে যে কীটি (অনন্যভাবে অ্যালগরিদমকে প্রতিক্রিয়া দ্বারা পৃথক করে) ক্ষেত্র বা উপাদান ট্যাগটি আপডেট করে। যেখানে ডোম আপডেটগুলি আপডেট করা বা পুরো ডোমকে পুরোপুরি রিফ্রেশ করে।
হেমন্ত নগরকোটি

11
আমি এই নিবন্ধটি হ্যাকারুনুন / ভার্চুয়াল-টোম-ইন-reactjs-43a3fdb1d130 থেকে দেখেছি । আপনি যদি লেখক না হন তবে উত্সটি উল্লেখ করা ভাল।
Jinggang

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