পৃষ্ঠার স্মৃতি ব্যবহারের জন্য jQuery বা জাভাস্ক্রিপ্ট


100

কোনও ওয়েব পৃষ্ঠা বা আমার jquery অ্যাপ্লিকেশন দ্বারা কত স্মৃতি ব্যবহৃত হচ্ছে তা খুঁজে পাওয়ার কোনও উপায় আছে?

এখানে আমার পরিস্থিতি:

আমি একটি জেকারি ফ্রন্টএন্ড এবং একটি বিশ্রামযুক্ত ব্যাকএন্ড ব্যবহার করে ডেটা ভারী ওয়েব অ্যাপ তৈরি করছি যা জেএসএনে ডেটা পরিবেশন করে। পৃষ্ঠাটি একবারে লোড হয় এবং তারপরে অ্যাজাক্সের মাধ্যমে সবকিছু ঘটে।

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

উত্তরের উপর ভিত্তি করে, আমি কিছু ক্লিয়ারিকেশন করতে চাই:

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

আপনার ওয়েব অ্যাপ্লিকেশন ব্যবহার করার সময় মেমরির সমস্যা আছে কি না তা নির্ধারণ করার জন্য আপনার ওয়েব অ্যাপের জন্য ব্যবহারকারীদের ধরণের তদন্ত করা উচিত। বা আপনার নিজের ওয়েব অ্যাপের সাথে মেমরি / পারফরম্যান্স সমস্যা রয়েছে?
প্রুটসুন্ডার

@ প্রুটস ওয়ান্ডার: না আমি কোনও সমস্যায় পড়ছি না, তবে আমি যদি কৌতূহলী ছিলাম যে যদি কোনও সরঞ্জাম উপস্থিত থাকে। কেবল ভেবেছিলেন যে ট্যাবগুলিতে কেবল একটি নির্দিষ্ট সীমা নির্ধারণের পরিবর্তে, একটি গতিশীল পদ্ধতিটি দুর্দান্ত হতে পারে।
তৌরেন

আমি কেবল একটি রানটাইম সমাধান খুঁজছি, বিল্ড-টাইম সমাধানের জন্য নয় এমনটি স্পষ্ট করতে সহায়তা করার জন্য আমি প্রশ্নের অতিরিক্ত কিছু বিবরণ যুক্ত করেছি।
টৌরেন

4
কেবল একটি প্রশ্ন, যদি কিছু ইতিমধ্যে ক্যাশে করা থাকে তবে তা কি এখনও গণনা করবে?
ajax333221

উত্তর:


67

2015 আপডেট

আপনি যদি ব্যবহারযোগ্য সমস্ত বড় ব্রাউজার সমর্থন করতে চান তবে ২০১২ সালে এটি সম্ভব ছিল না। দুর্ভাগ্যক্রমে, এই মুহূর্তে এটি এখনও কেবলমাত্র একটি ক্রোম বৈশিষ্ট্য (এর একটি মানহীন এক্সটেনশন window.performance)।

window.performance.memory

ব্রাউজার সমর্থন: ক্রোম 6+


2012 উত্তর

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

সহজ তবে সঠিক উত্তরটি হ'ল না । সমস্ত ব্রাউজার আপনার কাছে এই জাতীয় ডেটা প্রকাশ করে না। এবং আমি মনে করি আপনার কেবল ধারণাটি বাদ দেওয়া উচিত কারণ "হস্তনির্মিত" সমাধানের জটিলতা এবং অসতর্কতা সমাধানের চেয়ে আরও সমস্যার সমাধান করতে পারে।

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

আপনি যদি সত্যিই আপনার ধারণার সাথে লেগে থাকতে চান তবে আপনার স্থির এবং গতিশীল সামগ্রী আলাদা করা উচিত।

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

তবে তাদের সংক্ষিপ্ত করার সহজ উপায় নেই। আপনি এই ট্র্যাকিং সিস্টেমটি প্রয়োগ করতে পারেন যা এই সমস্ত তথ্য সংগ্রহ করে। সমস্ত ক্রিয়াকলাপকে যথাযথ ট্র্যাকিং পদ্ধতিগুলি কল করা উচিত। যেমন:

আপনার ডেটা বরাদ্দ সম্পর্কে ট্র্যাকিং সিস্টেমকে jQuery.dataঅবহিত করার জন্য মোড়ক বা ওভাররাইট পদ্ধতি ।

এইচটিএমএল ম্যানিপুলেশনগুলি মোড়ানো যাতে সামগ্রী যুক্ত করা বা অপসারণকেও ট্র্যাক করা হয় ( innerHTML.lengthএটি সর্বোত্তম অনুমান)।

আপনি যদি মেমরির বড় আকারে রাখেন তবে সেগুলিও পর্যবেক্ষণ করা উচিত।

ইভেন্ট বাইন্ডিং হিসাবে আপনার ইভেন্ট প্রতিনিধি ব্যবহার করা উচিত এবং তারপরে এটি কিছুটা স্থির কারণ হিসাবেও বিবেচিত হতে পারে।

আপনার মেমোরি প্রয়োজনীয়তার সঠিকভাবে অনুমান করা শক্ত করে তোলে এমন আরেকটি দিক হ'ল বিভিন্ন ব্রাউজারগুলি মেমরিকে আলাদাভাবে বরাদ্দ করতে পারে (জাভাস্ক্রিপ্ট অবজেক্ট এবং ডোম উপাদানগুলির জন্য)।


প্রক্রিয়াটি করতে innerHTML.lengthমেমরি বা র‌্যাম বা সিপিইউ (বা অন্য কিছু, আমার কোনও ধারণা নেই) নেয় না?
mrRiiha

এই বৈশিষ্ট্যটির জন্য ব্রাউজার সমর্থন নয় IE9 + বা Chrome এর বাইরে কিছু নয়। উইন্ডো.পারফরমেশন.মেমরিটি কেবল ক্রোম। ডকস.ওয়েবপ্ল্যাটফর্ম.আর
এপিস /

আপনি ঠিক বলেছেন, আমি ভেবেছিলাম মেমরিটি নেভিগেশন সময় মান এবং window.performanceঅবজেক্টের অংশ ছিল । পুরানো "সমর্থিত" এন্ট্রিগুলি প্রমিতের জন্য প্রযোজ্য ছিল। ক্রোম window.performance.memoryএকটি মানহীন এক্সটেনশন হিসাবে বিবেচিত ।
gblazex

উইন্ডো.পারফরমেশন.মেমোরির মাধ্যমে রিয়েল টাইম মেমরি মনিটরিং সক্ষম করার জন্য, আপনাকে - সক্ষম-সুনির্দিষ্ট-মেমরি-তথ্য পতাকা দিয়ে ক্রোম শুরু করতে হবে।
kluverua

আপডেট: অপেরাও এটিকে সমর্থন করে। সূত্র: মজিলা। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

39

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

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

window.performance.memory জাভাস্ক্রিপ্ট মেমরি ব্যবহারের ডেটা অ্যাক্সেস দেয়।


প্রস্তাবিত পঠন


দুর্দান্ত পরামর্শ। ধন্যবাদ.
ম্যাক্সিমর্লোভস্কি

22

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

મેમરી-stats.js: https://github.com/paulirish/memory-stats.js/tree/master

এই স্ক্রিপ্ট (যা আপনি যে কোনও সময়ে যে কোনও সময় চালাতে পারেন) পৃষ্ঠার বর্তমান মেমরির ব্যবহার প্রদর্শন করবে:

var script=document.createElement('script');
script.src='https://rawgit.com/paulirish/memory-stats.js/master/bookmarklet.js';
document.head.appendChild(script);


4
এটি জেএস মেমরির ব্যবহারের প্রতিবেদন করছে এবং পৃষ্ঠা মেমরির ব্যবহার নয়, ক্রোমের অন্তর্নির্মিত টাস্ক ম্যানেজার জানিয়েছে যে জিমেইল 250 এমবি ব্যবহার করছে যখন মেমরি-স্ট্যাটাস.জেস 33.3 এমবি প্রতিবেদন করেছে
ব্র্যান্ডিটো

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

8

আমি কোনও উপায়েই জানি না যে আপনি ব্রাউজার দ্বারা কতটা মেমরি ব্যবহৃত হচ্ছে তা আপনি আসলে জানতে পেরেছিলেন তবে আপনি পৃষ্ঠায় থাকা উপাদানগুলির সংখ্যার উপর ভিত্তি করে একটি হিউরিস্টিক ব্যবহার করতে সক্ষম হতে পারেন। Uinsg jQuery, আপনি করতে পারেন $('*').lengthএবং এটি আপনাকে DOM উপাদানগুলির সংখ্যা গণনা দেবে। সত্যিই, যদিও, কিছু সহজলভ্যতা পরীক্ষা করা এবং সমর্থন করার জন্য একটি নির্দিষ্ট সংখ্যক ট্যাব নিয়ে আসা সম্ভবত সহজ।


4
@ ট্যানফেসন: কোনও খারাপ ধারণা নয়, তবে এটি আমাকে ডড-নন মেমরি সম্পর্কিত, যেমন .ডাটা () এবং মেমরির ডেটা স্ট্রাকচারের বিষয়ে তথ্য দেয় না। তবে এটি সামগ্রিক ওজন যা আমি ব্যবহার করতে পারি তার একটি ভাল অনুমান দিতে পারে।
তৌরেন

4

Chrome হিপ স্ন্যাপশট সরঞ্জামটি ব্যবহার করুন

মেমোরিবাগ নামে একটি ফায়ারব্যাগ সরঞ্জাম রয়েছে তবে মনে হয় এটি এখনও খুব পরিপক্ক নয়।


@ পাবলো: ধন্যবাদ আমি অবশ্যই দেব সরঞ্জামগুলি ব্যবহার করব, তবে প্রতিটি ব্যবহারকারীর ব্রাউজারে মেমরির ব্যবহার সন্ধানের জন্য রানটাইমের সময় আমি যে কোনওটি ব্যবহার করতে পারি তা প্রত্যাশা করছিলাম।
তৌরেন

3

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


@ জাচারি: ধন্যবাদ আমি অবশ্যই দেব সরঞ্জামগুলি ব্যবহার করব, তবে একটি রানটাইম বিশ্লেষণ সমাধানের আশা করছিলাম।
টরেন

4
যদি আপনি কোনও সন্ধান করেন তবে আমাকে জানান, আমি একটি হাত পেতে পছন্দ করি
জ্যাচারি কে

3

আমি অন্যান্য উত্তরগুলির থেকে সম্পূর্ণ ভিন্ন সমাধানের পরামর্শ দিতে চাই, যথা আপনার অ্যাপ্লিকেশনটির গতি পর্যবেক্ষণ করতে এবং এটি একবার নির্ধারিত স্তরের নীচে নেমে গেলে ব্যবহারকারীকে ট্যাবগুলি বন্ধ করতে টিপস প্রদর্শন করে, বা নতুন ট্যাবগুলি খোলার থেকে অক্ষম করে। একটি সাধারণ শ্রেণি যা এই ধরণের তথ্য সরবরাহ করে তা হ'ল https://github.com/mrdoob/stats.js । তদ্ব্যতীত, এই ধরনের নিবিড় অ্যাপ্লিকেশনটির জন্য সমস্ত ট্যাবকে মেমরির মধ্যে প্রথম স্থানে রাখা বুদ্ধিমানের কাজ নয়। উদাহরণস্বরূপ শুধুমাত্র ব্যবহারকারীর স্থিতি (স্ক্রোল) রাখা এবং সর্বশেষে সমস্ত দুটি ডেটা লোড করা শেষ দুটি ট্যাব ছাড়াও এটি নিরাপদ বিকল্প হতে পারে।

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


1

অনুরূপ প্রকল্পে আমার সাথে নিখুঁত প্রশ্নের সময় শুরু!

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

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

প্রতিলিপি: আপনি যদি একই পাতা আইই, এফএফ, সাফারি ... এবং ক্রোমে খোলেন; এবং Chrome এ মেমরির সম্পর্কে নেভিগেট করার চেয়ে , এটি অন্য সমস্ত ব্রাউজারে মেমরির ব্যবহারের প্রতিবেদন করবে । ঝরঝরে!


0

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


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

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

0

আপনি ডকুমেন্ট.ডোকমেন্টএলমেন্ট.ইনার এইচটিএমএল পেতে এবং এর দৈর্ঘ্য পরীক্ষা করতে পারেন। এটি আপনাকে আপনার ওয়েব পৃষ্ঠায় ব্যবহার করা বাইট সংখ্যা দেবে।

এটি সমস্ত ব্রাউজারে কাজ নাও করতে পারে। সুতরাং আপনি আপনার সমস্ত শরীরের উপাদানগুলি দৈত্য ডিভের সাথে সংযুক্ত করতে পারেন এবং সেই ডিভের অভ্যন্তরীণে HTML কল করতে পারেন। কিছুটা এইরকম<body><div id="giantDiv">...</div></body>


4
ব্রাউজারটি যে এইচটিএমএলটিকে রেন্ডার করতে ব্রাউজারটি ব্যবহার করে (যেমন, তার অভ্যন্তরীণ বস্তু মডেলটিতে) মেমরি দিয়ে উত্পন্ন innerHTMLস্ট্রিংয়ের দৈর্ঘ্যটি কার্যকরভাবে সংযুক্ত হওয়ার সম্ভাবনা নেই ।
টিজে ক্রাউডার ২ '

এবং এটা কেন? আমার যুক্তিটি হ'ল ব্রাউজারে কিছু পাঠ্য লোড করা থাকলে তা স্মৃতিতে সঞ্চয় করতে হবে। সুতরাং এটি পৃষ্ঠাটি রেন্ডার করতে ব্রাউজার দ্বারা ব্যবহৃত মেমরিটির কিছু পরিমাপ দেয়।
মিডহাট

4
এই ভাবে চিন্তা করুন। আপনি যদি বলেন "আমি আপনাকে 10 মিলিয়ন ডলার দিতে চাই", এটি 8 টি শব্দ। অন্যদিকে, আপনি যদি বলেন "আমি আপনার ন্যাপকিনে হাঁচি দিতে চাই", এটি 7.. প্রথমটি কি কেবলমাত্র ৮/ 8 এর চেয়ে দ্বিতীয়টির চেয়ে বেশি মূল্যবান?
intuited

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

4
স্কোপে জেএস ভেরিয়েবলগুলি থাকতে পারে যা ডিএমএইচড ডোম নোডগুলিকে নির্দেশ করে, এটি নথির উপাদানটির অংশ হবে না। এছাড়াও আপনি কেবল পৃষ্ঠার পাঠ্যকে প্রভাবিত না করে মেমরির গিগা বাইট ব্যবহার করে একটি ভেরিয়েবলের মধ্যে সত্যিকারের দীর্ঘ স্ট্রিং লোড করতে কোড লিখতে পারেন।
জোশ রিবাকফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.