আইফোন ইউআইটিএবলভি স্ক্রোলিং কর্মক্ষমতা উন্নত করার কৌশল?


89

আমার একটি ইউটিবেলভিউ রয়েছে যা প্রতিটি ঘরে ঘরে মোটামুটি বড় চিত্র লোড করে এবং কোষের উচ্চতা চিত্রের আকারের উপর নির্ভর করে পরিবর্তিত হয়। স্ক্রোলিং পারফরম্যান্স শালীন, তবে কখনও কখনও বিড়বিড় হতে পারে।

আমি ফাইরিরবোট ব্লগে এই টিপসগুলি পেয়েছি:

ইউটিউবভিউ সহ গ্লাসি-স্ক্রোলিং

আরও-গ্লাসি-স্ক্রোলিং-সহ ইউটিউবভিউ

ইউটিবেলভিউ স্ক্রোলিং কর্মক্ষমতা উন্নত করার জন্য কারও কাছে কোনও টিপস রয়েছে?


আপনার যদি সেল হাইটগুলি ক্যাশে করা দরকার (যা গণনা করা ব্যয়বহুল হতে পারে এবং প্রায়শই ব্যবহৃত হয়), আমি একটি উদাহরণ দিয়েছি। এটি আপনার অ্যাপ্লিকেশনে উপযুক্ত হলে এটি ব্যবহার করুন। stackoverflow.com/questions/1371223/…
পল ডি ল্যাঞ্জ

উত্তর:


156
  1. সারিগুলির উচ্চতা ক্যাশে (সারণী দর্শনটি প্রায়শই এটির জন্য অনুরোধ করতে পারে)
  2. সারণীতে ব্যবহৃত চিত্রগুলির জন্য স্বল্প-সম্প্রতি ব্যবহৃত ক্যাশে তৈরি করুন (এবং যখন আপনি কোনও স্মৃতি সতর্কতা পান তখন সমস্ত নিষ্ক্রিয় এন্ট্রিগুলিকে অবৈধ করুন)
  3. সবকিছু আঁকুন UITableViewCellএর drawRect:যদি সব খরচ এ সম্ভব এড়ানোর subviews (অথবা আপনি স্ট্যান্ডার্ড অভিগম্যতা কার্যকারিতা প্রয়োজন হলে, বিষয়বস্তুর দৃশ্য এর drawRect:)
  4. আপনার UITableViewCellস্তরটিকে অস্বচ্ছ করুন (সামগ্রী যদি আপনার কাছে থাকে তবে তা একই রকম হয়)
  5. UITableViewউদাহরণ / ডকুমেন্টেশন দ্বারা প্রস্তাবিত হিসাবে পুনরায় ব্যবহারযোগ্যCellIdentifier কার্যকারিতা ব্যবহার করুন
  6. গ্রেডিয়েন্টস / জটিল গ্রাফিকাল এফেক্টগুলি এড়িয়ে চলুন যা UIImageএস -তে প্রাক বেকড নয়

4
তদ্ব্যতীত, ডাউনলোড করা চিত্রগুলি ঘরে প্রদর্শিত হওয়ার আগে চিত্রভিউয়ের আকারে ছোট করা উচিত!
জোল্টন ম্যাটেক

4
আমি এই উত্তরে গত কয়েক বছর যাবত আমার অভিজ্ঞতাগুলির সাথে একটি যোগ করতে চাই - স্বচ্ছ কোষগুলি থাকা কখনও খারাপ স্ক্রোলিং পারফরম্যান্সের কারণ নয়। আমাদের কাছে অত্যন্ত জটিল কোষ (20+ সাবভিউ) সহ একটি অ্যাপ রয়েছে এবং এটি ব্যাকগ্রাউন্ডটি দেখানোর জন্য স্বচ্ছ transparent যথাযথ অপ্টিমাইজেশনের সাথে স্বচ্ছতা 3 জিএস এমনকি কোনও পার্থক্য করে না। টেবিলের দৃশ্য থেকে আলাদা করার জন্য পর্যাপ্ত কক্ষগুলি উপস্থিত হওয়ার আগে জিনিসটি যে জিনিসটিকে সবচেয়ে কমিয়েছিল তা হ'ল নিব লোডিং। সাবউভিউগুলি ব্যবহার করে, কেবল দক্ষ স্তরবিন্যাস রয়েছে তা নিশ্চিত করুন এবং আপনাকে ড্রআরেক্ট ব্যবহার করার দরকার নেই।
অ্যাক্যাটিকাইক

@ একাটায়াইক, মনে হচ্ছে আমারও একই সমস্যা আছে। একটি ছোট ল্যাগ রয়েছে যখন যখন শনাক্ত করার মতো পর্যাপ্ত কোষ নেই, যখন 3-4 কোষগুলি শনাক্ত করা হয় তখন স্ক্রোলিংটি মসৃণ হয়। সেলগুলি প্রিললোড করার কোনও উপায় আছে যাতে স্ক্রল করার সময় এনআইবি ফাইল লোড না করার জন্য কোষগুলি রয়েছে?
টিউইস

@ টিওওস অবশ্যই আছে আপনার কোষগুলি ডিফিকয় করার পুরাতন পদ্ধতিটি ব্যবহার করতে হবে (ক্লাস / নিবগুলি নিবন্ধভুক্ত করবেন না, তবে যদি dequeueCellWithIdentifier: Nil ফেরত দেয় তবে সেগুলি তৈরি করুন)। এইভাবে আপনি আপনার টেবিল ভিউটি উপস্থিত থাকার আগেই ঘরগুলির একটি সেট তৈরি করতে পারেন, উদাহরণস্বরূপ এর আগে 20 টি তৈরি করা। তারপরে সেলফোর্ডআউটইন্ডেক্সপথে নতুন তৈরি করার পরিবর্তে: আপনি এটিকে প্রথমে নিজের ক্যাশে থেকে টানুন, যতক্ষণ না এটি খালি থাকে।
অ্যাক্যাটায়াইক

আমি ইউআইকোলিকেশনভিউ ব্যবহার করছি এবং একই সমস্যার মুখোমুখি হচ্ছি। আমার কাস্টম সেল নিব ফাইল এ। আমি উল্লম্ব ইউআইস্ট্যাকভিউয়ের অভ্যন্তরে ইউআইবিউবভিউ এবং ইউআইআইমেজভিউ সহ বেশ কয়েকটি সাবভিউ ব্যবহার করছি। যখন আমি আমার তালিকাটি স্ক্রোল করি তখন পুনরায় ব্যবহৃত ঘরগুলি তাদের আকার পুনর্বিন্যাস করতে উল্লেখযোগ্য সময় নেয় এবং স্ক্রোলিংটি খুব বিরক্তিকর দেখাচ্ছে।
মনসুউ ....

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

4
চিন্তা করবেন না ... এগুলি ট্রল ছিল। দুর্দান্ত উত্তর!
স্টিভ

79
ডাউন ভোটগুলি সম্ভবত কারণ "নিবস এড়ানো" পারফরম্যান্সের উন্নতির জন্য খারাপ পরামর্শ। আপনি যদি ঘরগুলি পুনরায় ব্যবহার করছেন, স্ক্রোল করার সময় কোষগুলি নিবস থেকে পুনর্গঠন করা হয় না।
স্টিভেন ফিশার

6
নিবস গতির সমতুল্য, বা প্রেমের গবেষণার সাথে কোকো ভিত্তিক কিছুটা দ্রুত। cocoawithlove.com/2010/03/…
ম্যাক্সগ্যাব্রিয়েল

টেবিল বরাদ্দকরণ এবং ডেলোকস সেলগুলি উদাহরণস্বরূপ - দ্রুত স্ক্রোলিংয়ের সময় নিব ব্যবহার করে @ স্টিভেন ফিশার ধীর হতে পারে।
সাউন্ড ব্লাস্টার

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

34

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

ইউটিউবভিউ সহ দ্রুত-স্ক্রোলিং-তে-টুইট

এছাড়াও, অ্যাপল তার টেবিলভিউসুয়েট টিউটোরিয়ালগুলিতে টেবিলভিউর জন্য নিজস্ব নিজস্ব নমুনা কোড আপডেট করেছে (সম্ভবত এর প্রতিক্রিয়ায়?)

টেবিলভিউসুইট


4
এটি একটি দুর্দান্ত সমাধান। আমি শুধু কৌতূহলী আমি কীভাবে সেলভিউতে একটি ইউআইবাটন যুক্ত করব? এটি কি অঙ্কন পদ্ধতিতে অঙ্কিত হচ্ছে?
সুকিথা উদুগামসুরিয়া

4
@ বেনো, আপনার লিঙ্কটি ভাঙা মনে হচ্ছে (প্রথমটি) আসল নিবন্ধে আমাদের হাত দেওয়ার কোনও সুযোগ?
Apouche

4
মূল নিবন্ধটি এখানে পড়তে পারেন: web.archive.org/web/20100922230053/http://blog.atebit.com/2008/…
জাভারদী

মূল সংস্করণটির অস্তিত্ব নেই বলে ওয়েব সংরক্ষণাগারে লিঙ্ক যুক্ত হয়েছে
রাল্ফ উইলগস

1

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

ভেবেছিল এটি গ্রহণ করতে হবে, কারণ গৃহীত কোনও উত্তরই ছায়া এবং স্তরগুলির উল্লেখ করে নি। : +)


6
যদি সমস্যাগুলি হয় তবে ছায়াগুলি এই দুটি লাইন কোড যুক্ত করে এবং সমস্তই নিখুঁতভাবে কাজ করে self self.layer.rasterizationScale = UIScreen.mainScreen.scale;
পেড্রো রোমিও

0

UITableViewঅন্যান্য উত্তরে ইতিমধ্যে বর্ণিত কৌশলগুলি ব্যবহার করে স্ক্রোলিং কর্মক্ষমতা নিয়ে যে কোনও সমস্যা সমাধান করা যেতে পারে। তবে অনেক সময় আস্তে আস্তে পারফরম্যান্স সহজাত ভ্রান্ত বা পুনরাবৃত্তির কারণে ঘটে।

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

  1. তথ্য উত্সে ডেটা লোড করুন - আরইএসটি / ডাটাবেস থেকে। এই পদক্ষেপটি ব্যাকগ্রাউন্ডে করা উচিত, অবশেষে জিসিডি সারির পাশাপাশি ডিসপ্যাচ_সেসিঙ্ক ব্যবহার করে।
  2. প্রাসঙ্গিক ডেটা মডেল অবজেক্টগুলি তৈরি করুন এবং প্রারম্ভিক করুন এবং এটিকে একটি অ্যারের ভিতরে রেখে দিন
  3. [tableView reloaddata]
  4. ভিতরে cellForRowAtIndexPath, কোড অন্তর্ভুক্ত করুন যা অ্যারের সঠিক ডেটা মডেল অবজেক্ট থেকে ডেটা (পাঠ্য) সেট করবে।
  5. এখন চিত্রগুলি সম্ভবত ইউআরএল আকারেও রয়েছে, তাই সারণী দর্শন দ্বারা ঘর পুনরায় ব্যবহারের কারণে এই পদক্ষেপটি কিছুটা অদ্ভুত হতে পারে। সত্যিকারের কেন্দ্রবিন্দুটি হ'ল ডিভাইস ক্যাশে / ইউএসএল থেকে অ্যাসিঙ্ক সারি ব্যবহার করে আবার চিত্রটি লোড করা, তারপরে এটিকে সেল.আইমেজ (আপনার সেল ইমেজের সম্পত্তি যা-ই হোক) সঠিক করতে সেট করুন।

সমস্যা এড়াতে, টেবিল ভিউয়ের মধ্যে চিত্রের অলস লোডিং সম্পর্কে এই টিউটোরিয়ালটি দেখুন।

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