কোনও ব্যবহারকারী কোনও ট্যাব রেখে বা স্ক্রিনটি বন্ধ করে দেওয়ার পরে ব্রাউজার যখন টাইমার এবং ওয়েবসকেট সংযোগ বিচ্ছিন্ন করে তা কীভাবে সনাক্ত করতে হয়? (জাভাস্ক্রিপ্ট)


12

প্রসঙ্গ

একটি গেম প্রগতিশীল ওয়েব অ্যাপ হিসাবে পাঠানো হয়েছে যা রিয়েল-টাইম যোগাযোগ পেতে টাইমার ( setTimeout, setInterval) এবং ওয়েবসকেট সংযোগ রয়েছে।

কি হচ্ছে

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

  • ওয়েবসকেটগুলি "বিরতি" বা "বন্ধ" হয়ে যেতে পারে বা নাও পারে
  • টাইমারগুলি দেখে মনে হচ্ছে তারা থ্রোটলড বা ডিবাউনড হচ্ছে।

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

যখন ব্যবহারকারী ফিরে আসবে, অ্যাপটি অজানা অবস্থায় রয়েছে এবং আমি রাজ্যটি সঠিকভাবে পুনরুদ্ধারে সংগ্রাম করছি।

ওয়েবসকেট সম্পর্কিত আমার সকেট.ইও এবং পুনরায় সংযোগ- ওয়েবসকেটের সাথে স্বয়ংক্রিয় পুনঃসংযোগ রয়েছে তবে এটি সবকিছু সমাধান করার পক্ষে যথেষ্ট নয়।

উত্তর খুঁজছেন

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

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

সম্পর্কিত লিংক


1
এটি কেবল একটি খসড়া উইগ . github.io/page-lifecycle
নরবার্পি

উত্তর:


7

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

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

ক্রোম থেকে দস্তাবেজগুলি এখানে ।

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


এটি একটি আকর্ষণীয় ধারণা। আপনি কি কিছু ভাগ করে নেওয়ার জন্য কিছু করেছেন?
কেভ

দুঃখিত, আমার কাছে এখনই একটি উদাহরণ কোড নেই, তবে আপনি যদি পরিষেবা কর্মীদের সন্ধান করেন তবে কীভাবে সেট আপ করবেন সে সম্পর্কে অনেকগুলি টিউটোরিয়াল রয়েছে। আপনাকে কেবলমাত্র একটি ছোট কোড রাখতে হবে যেখানে আপনি আপনার ডাব্লুএস-সার্ভারের সাথে সংযুক্ত হন এবং console.log()যখন আপনি ডাব্লুএস-সার্ভার থেকে বার্তা পান from ক্রোমে আপনি আপনার পরিষেবা কর্মীর কনসোলটি খুলতে পারেন এবং ট্যাবটি রেখে যাওয়ার পরে বার্তাগুলি পুনরুদ্ধার করা হয় কিনা তা পরীক্ষা করতে পারেন।
মন্টি

0

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

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

এটি এমন একটি ধারণা যা আপনি পরিষেবাগুলির আর্কিটেকচারে সন্ধান করতে পারেন তবে একই প্যাটার্নটি কোনও ওয়েব-অ্যাপ্লিকেশনে প্রযোজ্য। আপনি Design-for-Failধারণাগুলি সন্ধান করতে পারেন :

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

https://www.oreilly.com/library/view/designing-delivery/9781491903742/ch04.html


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