में छवियों को ऑप्टिकल रूप से प्रीलोडिंग/प्रीफेचिंग करना मेरे पास एक बहुत ही सामान्य स्थिति है जिसे मैं हल करने में आसान होने की उम्मीद करता हूं - एक यूआईसीओलेक्शन व्यू वाला एक ऐप, जिसमें प्रत्येक सेल में एक एपीआई से प्राप्त छवि में एक छवि होती है http/https के माध्यम से एक वेब सर्वर पर।UICollectionView और UITableView
मैं आईओएस 10 के prefetching in UICollectionView को लागू करने का प्रयास कर रहा हूं, ताकि छवियों की आवश्यकता होने की संभावना है।
यह विभिन्न आवश्यकताओं कि इष्टतम प्रीफेचिंग के लिए पूरा किया जाना चाहिए देखते हैं कि मुझे लगता है:
- है कि वास्तव में तुरंत आवश्यक हैं हमेशा सट्टा प्रीफेचिंग ऊपर प्राथमिकता के आधार पर किया जाना चाहिए छवियों के ला रहा है, तब भी जब छवि पहले से ही है लाने के लिए एक कतार।
- जब आईओएस हमें बताता है कि एक विशेष छवि को अब प्रीफेच करने की आवश्यकता नहीं है, तो यह (और केवल इसे) prefetch कतार से हटा दिया जाना चाहिए।
- यदि कोई छवि अनुरोध किया जाता है तो इसे हमेशा तब तक वितरित किया जाना चाहिए जब तक कि इसके लिए सभी/अनुरोध रद्द नहीं किए जाते हैं (यदि एकाधिक छवियों या एकाधिक दृश्य नियंत्रकों में एक छवि का उपयोग किया जाता है तो गलत होने में आसान)।
- प्रीडिटाइज्ड फ़ेचिंग को निरस्त किया जाना चाहिए यदि एंड डिस्प्लेइंग कहा जाता है (लेकिन, अगर प्रीफेचिंग का अनुरोध किया गया था और रद्द नहीं किया गया था, तो छवि को कम प्राथमिकता पर कतार में छोड़ दिया जाना चाहिए)।
- विभिन्न सामान्य आवश्यकताएं जो छवि लोडिंग से संबंधित हैं - उदाहरण के लिए। प्रीफेच अनुरोधों के साथ अंतर्निहित प्रणाली को बाढ़ न करें जो तुरंत बैंडविड्थ और सर्वर स्लॉट को उन छवियों से दूर ले जाएगा जो तुरंत आवश्यक हैं।
मैं SDWebImage और Kingfisher जैसे विभिन्न मौजूदा पुस्तकालयों को देखा है, और आश्चर्य है कि वहाँ किसी भी तरह से या तो पुस्तकालय के साथ आसानी से ऊपर आवश्यकताओं को पूरा करने के लिए होने के लिए प्रकट नहीं होता था।
उदाहरण के लिए, SDWebImage दूसरा आवश्यकता को पूरा नहीं करता है - आप केवल cancel all prefetching कर सकते हैं, या आप छवि प्रति एक पूर्व फ़ेचर बनाना चाहिए (जो तब विभिन्न अन्य SDWebImage सुविधाओं का मतलब है, पूर्व के समवर्ती अनुरोधों की संख्या को सीमित करने की तरह प्राप्त छवियों - यानी आवश्यकता 5 - अब काम नहीं करते हैं।)
क्या यह वास्तव में एक कठिन समस्या है? क्या मुझे कुछ स्पष्ट समाधान याद आया? क्या मैं आवश्यकताओं पर विचार कर रहा हूं?