スマホ関連の海外ニュースです。
今日、私達は開くに興奮して画像のパイプラインの Twitter の iOS の体制をソースまたは短いのヒントします。 2014 年に簡潔にするための通信プラットフォームに大きく向上した共有とそのアプリに表示するイメージを受け入れてが Twitter します。しかし、それと我々 はハイテク債務の大規模な帯状を計上していた、信頼性、苦労していくつかの主要な機能が不足していたし、私たちのイメージするさまざまな複雑なアプローチをしていた。私たちはを評価し、それらの問題点を解決する新たな枠組みを構築する前に行きたい場所を識別するいくつかの時間がかかった。我々 はこの新しい iOS フレームワークを採用し、一度その機能を活用し、2 年間のコースそれを反復することができました。今日我々 は、同じ利点を楽しむことができます、あなたとそれを共有する満足しています。 ヒントは、イメージの読み込みとキャッシュの周りの多くの問題を解決しようとするフレームワークです。それが提供するものの概要を与えるためには、いくつかのヒントの主な部分に掘り下げましょう。 画像をロードするための効率的なパイプラインの主要な部分はキャッシュです。非常に開始から我々 は、我々 は強力なキャッシュ システムを必要と知っていた。ヒント前、に Twitter そのイメージ キャッシュに深刻な問題があったし、する開始から解決するこれらの問題は姿を消すことができる我々 は先端に移行を完了したら、それらを必要があります。 まず、アカウントのログアウト中ユーザーの懸念に対処する必要があります。特異なキャッシュ システムがあるのですべてのキャッシュされた画像アプリにログインしているすべての Twitter のアカウント間で共有されました。Twitter iOS サポート複数のアカウント、これが提示するのでアカウントはログアウト時の問題。ログアウト アカウント用の画像をクリアできませんでした、我々 は提供していますすべてのパフォーマンスを失うキャッシュ全体を削除するのには望んでいません。これは、ストレージのキャッシュで不要な画像を残した無駄だった。これを根本的に解決するために、前もって各パイプラインを個別に削除することができます独自の個別のキャッシュを持っていることと、「パイプライン」によってヒントをサイロを選んだ。このユース ケースすべてのアプリに変換可能性がありますされません完全に任意ですが、チップを構築するための重要なスタート地点だった。 3 キャッシュが分かれて先端でパイプラインにつきキャッシュ: 最初の同期アクセス キャッシュは既に特定の解像度にレンダリングされるメモリ内イメージ、2 つ目の非同期キャッシュは必ずしもスケーリングまたはもまだ、デコードされていないメモリ内イメージ、最後の非同期キャッシュは長い永続ディスク キャッシュします。これは、画像をキャッシュするどれのトレードオフのバランスを取りながらイメージの読み込みで素晴らしいパフォーマンスを提供しています。これらのキャッシュを構築する場合、スレッドの安全性とデータの整合性に着目。Twitter は、同様に私たちの以前のキャッシュ システムと長年の根本的な欠陥を持っていた。レース条件であったトリガーされると、二度、ネットワークから読み込まれる同じイメージが発生し、負荷の両方がキャッシュに破損したイメージが表示される、同じファイルへの書き込みましょう。遅いネットワークおよびより大きいイメージ悪化の破損が発生する可能性です。ヒントは、この問題を共有していないと問題が排除されています。 私たちの以前のキャッシュの特に問題となる部分は、境界はなかったでした。前のデザインはキャッシュ サイズを制限する概念を構築していないし、画像をパージする Ttl (存続時間値) のみに頼っていた。これは私たちのイメージ キャッシュを 2 GB に達するにつながったまたはユーザー頼みの綱は、さらに大きい。ヒントは、ただし、使用する LRU (最も最近-使用) メカニズムをパージ キャッシュが得ることができるし、(パイプラインにつきまたはグローバル) クリアする能力を持っているどのくらいの大きさに構成可能な制限です。ヒントは、もはや Twitter への完全移行後、2 GB の痛みをキャッシュし、ディスク上のストレージの 128 MB の制限とエンドユーザー体験の向上を実現を感じています。ヒント フレームワークでは、キャッシュをクリアするアプリのデータ使用設定を追加することもできます。 最後の必要性我々 が構築し、チップを採用することだった新しい先端に従来のキャッシュから移行する方法をキャッシュします。我々 は、ネットワークを試みる前に従来のキャッシュからイメージを読み込むことがヒントは、イメージを持っていなかった、各画像のパイプラインに追加キャッシュを接続するためのサポートを構築に選出されました。余分な影響を与えずに先端に徐々 に移行する我々 のキャッシュを許可このネットワーク ユーザーから。 画像のパイプラインのコアは、要求されたイメージのフェッチです。既存のユース ケースが満たされ、達成するために賭け金を表に必要な建物の先端、もらいましたが、本当に画像の読み込みを堅牢なシステムを構築したい場合特にネットワーク リソースとリソースへの影響を最小限に抑えながら、ユーザー エクスペリエンス我々 最大限にできること。 早い段階での画像、別名のバリエーション、Twitter アプリで使用するさまざまなサイズがあることが認められた.我々 は、多くの異なる亜種を読み込むアプリのさまざまな部分を持っている無駄なされていた。それは無駄にキャッシュ容量、コスト、データとネットワーク上の新しい亜種をロードする時間がかかった。改善は、場合でも、彼らは正しいバリアントにキャッシュされた既存のイメージを読み込むための使いやすいサポートを提供ヒントを持っていた。フェッチされる 1 つより大きい変形は、ネットワークを回避する適切なサイズに単にスケールできます。フェッチされる 1 つより小さいの亜種は、ユーザーが完全なイメージが読み込まれている表示するより高い品質のバリアントを待つ間、彼らは何かを見ることができるのですぐにユーザーにコンテンツの表示中に表示するためのプレビューとして提供できます。 私たちは本当に気に、ネットワーク使用率と完全に透明性と堅牢なそれはネットワークを介して画像を読み込む方法のヒントを募集します。ヒントは自動的にネットワークに保存、同じイメージ バリアントは、任意の 2 つ (またはそれ以上) のフェッチを結合します。ヒントもサポート イメージ ダウンロードを再開します。どのような進展を捨てて失敗した、またはキャンセルされた画像読み込みではなくヒントは次回のイメージ データをフェッチ、中断した場所から再開することができます保持されます。 建物の先端を始めましたとして採用した原則は、できるだけユーザーにコンテンツを取得するでした。念頭に、先端がイメージがロードし、再現性を得るために継続しながら、できるだけユーザーに、コンテンツを取得する画像のプログレッシブ ロードのサポートを持っていたことを確認に着手しました。機能として非常に成功した証明し、すべてのツイート画像を PJPEG から移行しました。JPEG より違いが表示されます高速インターネット ユーザーが、低速の接続を介してインターネットにアクセスの世界の大多数は画面のはるかに高速に画像を見ることができます。 イメージ コーデックの多様なセットをサポートは、我々 は学んだヒントを使用するいたと我々 が必要なものだった。異なるイメージのコーデックより多く実験し、本当に役立つ、ヒント 3 イテレーションを作ることになった。まず、我々 はアニメーション画像 (Gif) を具体的にサポートを追加しました。第二に、我々 は恐れがサポートするすべてのコーデックのサポートを追加しました。最後に、我々 はどのようにヒントをエンコードし、デコード コーデックがプラグを抽象化し、既存コーデックを補完したり、それらのいずれかを交換するか、先端に任意のカスタム コーデックを簡単に追加することができます。この多様なコーデック サポート Twitter は、PNG、JPEG、PJPEG、GIF、JPEG 2000、WebP もカスタム コーデックを含む多くの画像形式で簡単に実験することができました。 ヒント Twitter の画像ニーズをフェッチの堅牢なされている最後の重要なコンポーネントは、実行に使用するネットワークです。Twitter が独自のネットワークを介してすべてのネットワー キング行くを介して堅牢なネットワーク性能測定などの必要がある抽象化層し、ネットワーク操作を制御します。ヒント サポートしていますが、わかりやすくするために接続するため、ネットワーク層として基づく NSURLSession オプションを使用してデフォルト ネットワークを抽象化することで。 を超えて画像を取得、ヒントはキャッシュにイメージを格納する機能をサポートし、ユーザー体験で私たちに多くの柔軟性を与える機能です。私たち簡単につぶやかれているツイートをユーザーのタイムラインに表示も、イメージが既にあるとネットワーク経由でロードする必要はありませんようにキャッシュにそれを置くイメージを取ってサポート今すぐできます。キャッシュ制御の締めくくりにも特定の画像を削除できます。 機能を提供するフレームワークではなくヒントは何が起こって、どのように物事を実行しているの詳細な洞察を提供しています。先端の消費者はパイプラインの動作を観察することができます、作物を詳細なログ出力を参照してください、堅牢なエラー処理の問題の通知。開発者の追加ユーティリティとして我々 は実行時に使用するためのツールで構築。先端の UIImageView のサブクラス、画像表示のオーバーレイでフェッチされたイメージのデバッグ詳細を表示することは簡単です。どのような画像がキャッシュされる、各画像の詳細と、完全および不完全の負荷を含むキャッシュを検査する機能はさらに便利です。Twitter は普通私達の隠し場所を調べ、デバッグ単純なデバッグ UI 開発者にとってのこの機能を使用します。 それが今日に先端の進化後十分な支出に見合う最大限の制御と単一のフレームワークでそのイメージとパフォーマンスを本当に望んでいるアプリ開発者や開発チームへ資産であることをヒントと考えています。 すばらしい質問!Twitter の画像の読み込みだけでなく、Android のイテレーションの数を試してみましたが、現在 Facebook のフレスコ画ライブラリを採用しています。それは、豊富な機能、信頼性の高い徹底的に文書化され、よく維持されます。我々 は Android 用画像のパイプラインとして、オープン ソース プロジェクトを使用して、幸せになることができませんでした。 Twitter のすべてのオープン ソース プロジェクトと同様 iOS プロジェクトの Twitter 画像パイプライン フレームワークは、Twitter の github ページで、具体的には https://github.com/twitter/ios-twitter-image-pipeline が。我々 はそれのようなあなたを願っています! 必ず ios (TLS) https://github.com/twitter/ios-twitter-logging-service で見つけることができるログ サービスの Twitter のフレームワークなど、他のオープン ソース プロジェクトをチェック アウトしてください。
続きを読む…
Introducing Twitter Image Pipeline iOS framework for open source | Twitter Blogs
Today, we’re excited to open source our Twitter Image Pipeline iOS framework, or TIP for short. In 2014, Twitter embraced sharing and displaying images in its apps, which was a great enhancement to the communication platform built on brevity. But with that we had accrued a large swath of tech debt, were missing some key features, struggled with reliability, and had many different complex approaches to our images. We took some time to assess where we were at and identify where we wanted to go before building a new framework to solve those pain points.
Read more…