生産的なモバむルAPIを蚭蚈するためのベストプラクティス





Webには、モバむルデバむスでの高いパフォヌマンスに関する䞀般的なAPI蚭蚈に関する倚くの有益な蚘事がありたす。 しかし、モバむルクラむアントでの䜿甚を目的ずしたバック゚ンドAPIのパフォヌマンスを最適化するために必芁なアヌキテクチャ゜リュヌションに぀いおは、ほずんど議論されおいたせん。



もちろん、モバむルアプリケヌション自䜓のパフォヌマンスを最適化する必芁がありたす。 しかし、むンフラストラクチャ゚ンゞニアは、モバむルクラむアントにデヌタリ゜ヌスず゜フトりェアリ゜ヌスを確実か぀迅速に提䟛するために倚くのこずを行うこずができたす。



モバむル゜フトりェアを蚭蚈する際に考慮すべき事項を次に瀺したす。





説明した困難を解決する方法は倚数ありたすが、この蚘事では䞻に、モバむルクラむアントのパフォヌマンスたたは認識を改善するためにAPIたたはバック゚ンドでできるこずに぀いお説明したす。 2぀の䞻芁な問題を怜蚎したす。



  1. ネットワヌク接続ずデヌタ転送の芁件を最小限に抑えたす 。 効果的なマルチメディア凊理、効率的なキャッシング、およびより少ない接続でのデヌタ凊理向けのより長い操䜜の䜿甚。
  2. 「正しい」デヌタのネットワヌクを介しお送信したす 。 必芁な/芁求されたデヌタのみを返すようなAPIの蚭蚈、およびさたざたなタむプのモバむルデバむスの最適化。


この蚘事ではモバむルセグメントに焊点を圓おおいたすが、他の分野のAPIクラむアントにも倚くの教蚓ずアむデアを適甚できたす。



ネットワヌク接続ずデヌタ転送を最小限に抑える



モバむルデバむスのパフォヌマンスを向䞊させるために解決する必芁がある最も重芁なタスクの1぀は、Webペヌゞのレンダリングに必芁なHTTP芁求の数を最小限にするこずです。 これはさたざたな方法で行われ、アプロヌチの遞択はデヌタによっお異なる堎合がありたす。



画像



ペヌゞ䞊の画像ごずに1぀のリク゚ストを行うず、速床を向䞊させ、個々の画像のキャッシュを掻甚できたす。 デスクトップブラりザヌはリク゚ストを迅速か぀䞊行しお凊理できるため、その数によっおパフォヌマンスが倧幅に䜎䞋するこずはありたせんキャッシュにより、「匷床」マヌゞンはさらに高くなりたす。 ただし、モバむルデバむスでは、倚数の芁求が臎呜的になる可胜性がありたす。



画像に察するリク゚ストを最小化するず、リク゚ストの総数を枛らすこずができ、堎合によっおは送信デヌタの量を枛らすこずができたすこれはパフォヌマンスに良い圱響を䞎えたす。 どのような戊略に埓うこずができたすか



スプラむト



スプラむト画像を䜿甚するず、サヌバヌからダりンロヌドする必芁がある個々の画像の数を枛らすこずができたす。 しかし、この゜リュヌションには欠点がありたすスプラむトはサポヌトに問題を匕き起こす可胜性があり、状況によっおは生成が簡単ではありたせんたずえば、補品カタログを怜玢する堎合、倚数のプレビュヌを衚瀺する必芁がありたす。



画像の代わりにCSSを䜿甚する



どこでも、可胜な限り、画像を避け、 シャドり 、 グラデヌション 、その他の効果にCSSレンダリングを䜿甚する堎合、転送およびダりンロヌドする必芁があるバむト数を枛らすこずができたす。



レスポンシブ画像のサポヌト



レスポンシブ画像は、適切なデバむスに正しい画像を配信する䞀般的な方法です。 Appleは、通垞の画像をロヌドし、JavaScriptを䜿甚しおそれらをより高解像床の画像に眮き換えるこずでこれを行いたす。 他の倚くのアプロヌチがありたすが、私たちはこの問題を解決するにはほど遠いです。



レスポンシブむメヌゞを䜿甚するには、それらがサヌバヌでサポヌトされおいるこずず、APIが同じむメヌゞの異なるバヌゞョンをサポヌトしおいるこずを確認しおください。 特定の実装は、クラむアントの決定に䟝存したす。



デヌタURIを䜿甚しお画像をむンラむン化するこずにより、远加のク゚リを削枛したす



スプラむトの代替方法は、デヌタURIを䜿甚しおHTMLの画像をむンラむン化するこずです。 その結果、画像はペヌゞ党䜓の䞀郚になりたす。 たた、バむト単䜍のサむズは増加する可胜性がありたすが、このような画像はGzipを䜿甚しお圧瞮されるため、送信される情報量の増加を補いたす。



ヒント URIを䜿甚する堎合





ロヌカルストレヌゞずキャッシュの䜿甚



モバむルネットワヌクの動䜜は遅いため、HTML、CSS、および画像はロヌカルストレヌゞlocalStorageに保存できたす。 ロヌカルストレヌゞを䜿甚しおBingのパフォヌマンスを向䞊させる優れた研究は、HTMLドキュメントのサむズを玄200 Kbから玄30 Kbに削枛するのに圹立ちたした。



ナヌザヌによるパフォヌマンスの䞻芳的評䟡を改善する優れた方法は、モバむルデバむスで䜿甚されるデヌタを事前に遞択しお、远加の芁求なしに顧客に送信するこずです。 これには、ペヌゞ分割された怜玢結果、人気のある怜玢、ナヌザヌデヌタが含たれたす。 このアプロヌチを考えおアヌキテクチャで怜蚎するず、ナヌザヌが芁求する前にデヌタを準備およびキャッシュできるAPIを䜜成できたす。これにより、パフォヌマンスの䞻芳的な認識が向䞊したす。



ヒント アプリケヌションの曎新䞭に倉曎される可胜性が䜎いデヌタカテゎリやメむンナビゲヌションなどは、ネットワヌク経由で転送する時間ずリ゜ヌスを無駄にしないようにアプリケヌション内で配信する必芁がありたす。



理想的には、必芁に応じおデヌタを転送し、適切なずきに事前にロヌドする必芁がありたす。 ナヌザヌに画像やコンテンツが衚瀺されない堎合は、送信しないでください䞀郚の芁玠は単に「非衚瀺」になるため、応答性の高いサむトでは特に重芁です。 予備的な画像準備の優れたアプリケヌションは、怜玢結果のギャラリヌです。 むンタヌフェむスを高速化するには、次の画像ず前の画像をすぐにロヌドするこずをお勧めしたす。 ただし、倢䞭になったり、写真をアップロヌドしすぎたりしないでください。ナヌザヌが写真を芋るこずさえできないからです。



ロヌカルストレヌゞからデヌタを取埗するずパフォヌマンスが䜎䞋する可胜性がありたすが、この効果はネットワヌク経由でデヌタを転送するよりもはるかに匱いです。 さらに、䞀郚のアプリケヌションは、ロヌカルストレヌゞ以倖に、 appCacheなどの他のHTML5機胜を䜿甚しお、パフォヌマンスず起動速床を向䞊させたす。



ヒント CSSずJavaScriptを個別のリク゚ストに盎接埋め蟌み、これらのファむルぞのリンクを保存し、Cookieを介しおサヌバヌに転送する堎合、クラむアントはこれらのリ゜ヌスを再床ダりンロヌドする必芁はありたせん新しいファむルのみがネットワヌク経由で転送されたす。 これにより倚くの時間を節玄でき、ロヌカルキャッシュを䜿甚するための優れたツヌルです。 䞊蚘のファむルを盎接埋め蟌み、リンクする方法の詳现に぀いおは、 http  //calendar.perfplanet.com/2011/mobile-ui-performance-considerations/に蚘茉されおいたす 。



ノンブロッキングI / O



クラむアントの最適化に関しおは、パフォヌマンスを倧幅に䜎䞋させる可胜性のあるJavaScriptのブロック実行を監芖するこずをお勧めしたす。 しかし、APIにずっおは、これはさらに重芁です。 たずえば、タむムアりトする可胜性があるサヌドパヌティのリ゜ヌスぞの呌び出しなど、長いAPI呌び出しがある堎合は、呌び出しを非ブロッキングずしお実装するたたは長時間埅機させるこずが重芁であり、ポヌリングモデルたたはトリガヌモデルを遞択する必芁がありたす。





通垞、モバむルクラむアントは信頌できないため、トリガヌAPIの実装はより困難です。 したがっお、ほずんどの堎合、ポヌリングモデルを䜿甚するこずをお勧めしたす。



たずえば、 モバむルアプリケヌションの決定では、補品ペヌゞにこれらの補品が利甚可胜な囜の珟地䟡栌が衚瀺されおいたした。 結果はサヌドパヌティのサヌビスによっお提䟛されたため、ポヌリングAPIの助けを借りお、アプリケヌションを停止せずに結果を受信し、結果を埅぀間、開いおいる接続をサポヌトできたせんでした。



モバむルクラむアントの接続数は限られおいるため、APIが迅速に応答し、実行保留䞭の結果をブロックしないこずを確認しおください。



ヒントおしゃべりなAPIは避けおください 。 ネットワヌクが遅い堎合、いく぀かのAPI呌び出しを避ける必芁がありたす。 目安ずしお、返されたペヌゞをレンダリングするために必芁なすべおのデヌタを1぀のAPI呌び出しに入れるこずをお勧めしたす。



サヌバヌ偎で、䞀郚のコンポヌネントが他のコンポヌネントよりもかなり遅い堎合、特性の応答時間に焊点を合わせお、APIを個別の呌び出しに分割するこずをお勧めしたす。 したがっお、クラむアントは最初のクむックコヌルの埌にペヌゞのレンダリングを開始し、遅いコヌルぞの応答を埅ちたす。 ぀たり、画面䞊のテキストの衚瀺に必芁な時間を削枛したす。



リダむレクトを避け、DNSク゚リを最小限に抑える



ク゚リに関しおは、特にDNSク゚リを必芁ずするドメむン間のリダむレクトである堎合、リダむレクトはパフォヌマンスを䜎䞋させる可胜性がありたす。



たずえば、倚くのサむトは、クラむアントリダむレクトを䜿甚しおモバむルバヌゞョンで動䜜したす。 ぀たり、モバむルクラむアントがメむンサむトたずえば、 katemats.com のURLにアクセスするず、モバむルサむトm.katemats.comにリダむレクトされたす これは、サむトがさたざたなテクノロゞヌスタック䞊に構築されおいる堎合によく芋られたす。 同様のスキヌムの䟋を次に瀺したす。



  1. ナヌザヌは「yahoo」をグヌグル怜玢し、怜玢結果の最初のリンクをクリックしたす。
  2. GoogleはトラッキングURLを䜿甚しおクリックをキャプチャし、 www.yahoo.comにリダむレクトしたす [リダむレクト]
  3. Googleリダむレクトぞの回答は、モバむルオペレヌタヌのベヌスステヌションを通過し、クラむアントの電話に到達したす。
  4. www.yahoo.comに察しおDNSク゚リが実行されおいたす 。
  5. 芋぀かったIPは、BSを介しお電話に送信されたす。
  6. 電話がwww.yahoo.comにアクセスするず、モバむルクラむアントずしお認識され、 m.yahoo.comにリダむレクトされたす [リダむレクト]
  7. 次に、電話は再びm.yahoo.comサブドメむンに察しおDNSク゚リを実行する必芁がありたす。
  8. 芋぀かったIPは、BSを介しお電話に送信されたす。
  9. 最埌に、最終的なHTMLず必芁なリ゜ヌスがBSを介しお電話に転送されたす。
  10. モバむルサむトのペヌゞの䞀郚の画像は、 l2.yimg.comなどの別のドメむンぞのリンクを介しおCDN経由で提䟛されたす。
  11. 電話は再びl2.yimg.comサブドメむンのDNSク゚リを䜜成したす。
  12. 芋぀かったIPは、BSを介しお電話に送信されたす。
  13. 写真が描かれ、ペヌゞの準備ができたした。


ご芧のずおり、サヌバヌ偎でリダむレクトを䜿甚する぀たり、サヌバヌを経由しおルヌティングし、クラむアントでDNSク゚リずリダむレクトの数を最小限に抑えるか、たたは適応技術を䜿甚するこずで回避できるオヌバヌヘッドコストがたくさんありたす。



ヒント DNSク゚リを回避できない堎合は、時間を節玄するために、既知のドメむンに察しお予備のDNSク゚リを䜿甚しおみおください。



HTTPおよびSPDYパむプラむン



別の䟿利なテクニックはHTTPパむプラむンです。 耇数のク゚リを1぀に結合できたす。 私はSPDYを遞択したすが、これはHTTPリク゚ストを最適化し、それらがより効率的になるようにしたす。 このプロトコルは、Amazon Kindle、Twitter、およびGoogleでサポヌトされおいたす。



「正しい」デヌタを送信する



クラむアントごずに、CSSずJavaScriptの異なるファむルを送信する必芁がありたす。 結果の数でさえ異なる堎合がありたす。 結果ずファむルのさたざたな組み合わせずバヌゞョンをサポヌトするAPIを蚭蚈するず、優れたコラボレヌション゚クスペリ゚ンスを最倧限に柔軟に䜜成できたす。



制限ずオフセットを䜿甚しお結果を取埗したす。



通垞のAPIず同様に、 limit



ずoffset



を䜿甚しお結果を抜出limit



ず、クラむアントは特定の䜿甚に必芁なさたざたなデヌタを芁求できたすモバむルクラむアントの結果は少なくなりたす。 私はlimit



ずoffset



衚蚘を奜みたす。これは start



やnext



よりもより䞀般的であり、倚くのデヌタベヌスでよく理解されおおり、したがっお䜿いやすいからです。



/products?limit=25&offset=75







最倧たたは最小公倍数共通分母に察応するデフォルト倀を遞択したす。これにより、ビゞネスで最も重芁な顧客を遞択できたす察象ナヌザヌのコアがモバむルクラむアントである堎合、䞻に蚪問しおいる堎合はそれ以䞊デスクトップコンピュヌタ、これは通垞B2Bサむトおよびサヌビスに圓おはたりたす。



郚分応答ず郚分曎新をサポヌト



顧客が必芁な情報のみを芁求できるようにAPIを蚭蚈したす。 これは、APIがフィヌルドのセットをサポヌトする必芁があり、毎回リ゜ヌスの完党なビュヌを返さないこずを意味したす。 クラむアントが䞍芁なデヌタを収集および解析する必芁がない堎合、芁求が簡玠化され、生産性が向䞊したす。



郚分的な曎新により、顧客はAPIに曞き蟌むデヌタで同じこずができたすそしお、リ゜ヌスの分類内ですべおの芁玠を定矩する必芁はありたせん。

Googleは、カンマ区切りリストの圢匏で远加のオプションフィヌルドを䜿甚した郚分応答をサポヌトしおいたす。



http://www.gogle.com/calendar/feeds/[emil prtected ]/private/full? fields=entry(title,gd:when)







呌び出しにentry



が指定されおいる堎合、これは、呌び出し元がフィヌルドの郚分セットのみを芁求するこずを意味したす。



Cookieの䜿甚を回避たたは最小化したす。



クラむアントがドメむンにリク゚ストを送信するたびに、このドメむンから受信したすべおのCookie重耇した倀や無関係な倀も含むが含たれたす。 したがっお、転送されるデヌタの量を枛らしおパフォヌマンスを向䞊させる別の方法は、小さいサむズのCookieを維持するこずです䞍芁な堎合は芁求したせん。 Cookieを䞍必芁に䜿甚たたは芁求しないでください。 Cookieのないドメむンたずえば、静的ドメむンたたはCDNからの画像からのアクセス蚱可を必芁ずしない静的コンテンツを提䟛したす。 https://developers.google.com/speed/docs/best-practices/requestCookieを操䜜するいく぀かの方法に぀いお説明したす 。



APIのデバむスプロファむルを䜜成する



デスクトップ、タブレット、スマヌトフォンのさたざたな画面サむズず解像床を考えるず、サポヌトするプロファむルを䜜成するず䟿利です。 プロファむルごずに、特定のデバむスに適した異なる画像、デヌタ、ファむルを提䟛できたす。 これは、クラむアントぞのメディアク゚リを䜿甚しお行われたす 。



プロファむルが倚いほど、特定のデバむスの操䜜性が向䞊したす。 ただし、サポヌトされおいるすべおの皮類の機胜ずスクリプトを維持するこずはさらに困難になりたすデバむスは絶えず倉化および開発しおいるため。 したがっお、絶察に必芁な数のプロファむルのみを維持するこずをお勧めしたす。 良いむンタラクション䜓隓を生み出すための劥協ず機䌚に぀いおは、この蚘事を読むこずをお勧めしたす https : //mobiforge.com/design-development/effective-design-multiple-screen-sizes



ほずんどのアプリケヌションでは、3぀のプロファむルで十分です。



  1. 携垯電話より小さな画像、利甚可胜なタッチコントロヌル、䜎ネットワヌク垯域幅。
  2. タブレット画像は倧きくなりたすが、䜎垯域幅のネットワヌクに適合し、タッチ制埡が利甚でき、リク゚ストでより倚くのデヌタが送信されたす。
  3. デスクトップコンピュヌタヌタブレット甚の画像ず、Wi-Fiおよびデスクトップブラりザヌ甚の高解像床画像。


目的のプロファむルをクラむアントで遞択できたす。 サヌバヌ偎APIは、これらのプロファむルを取埗し、芁求を送信したデバむスに応じお異なる情報を送信するように蚭蚈する必芁がありたす。 たずえば、小さな画像が送信されたり、結果のサむズが瞮小されたり、CSSずJavaScriptがむンラむンになりたす。



APIの1぀が怜玢結果を返す堎合、プロファむルは次のようになりたす。



/products?limit=25&offset=0







デフォルトのプロファむルデスクトップが䜿甚され、暙準のペヌゞが指定されたす。このペヌゞは各画像を個別に芁求するため、埌続のビュヌをキャッシュからロヌドできたす。



/products?profile= mobile &limit=10&offset=0







10個の結果が返され、䜎解像床の画像は単䞀のHTTPリク゚ストでURIずしお送信されたす。



/products?profile= tablet &limit=25&offset=0







20の結果が返されたす。䜎解像床の画像はサむズは倧きくなりたすが、1぀のHTTP芁求でURIずしお送信されたす。



フィヌチャヌフォンなどのガゞェット甚のプロファむルを䜜成するこずもできたす。 スマヌトフォンずは異なり、ペヌゞごずにのみファむルをキャッシュできたす。 そのため、このようなクラむアントでは、各リク゚ストでCSSずJavaScriptを送信するよりもプロファむルを䜿甚する方が適切です。



サヌバヌの応答がプロファむルによっお倧きく異なる堎合は、郚分応答の代わりにプロファむルを䜿甚するこずをお勧めしたす。 たずえば、ある堎合には応答にむンラむンURIむメヌゞずコンパクトレむアりトが含たれ、別の堎合にはそれは存圚したせん。 もちろん、プロファむルは「郚分的な回答」を䜿甚しお蚭定するこずもできたすが、通垞は、別のデヌタセットや圢匏などではなく、暙準スキヌムたずえば、より倧きな分類のサブセットの䞀郚たたは䞀郚を決定するために䜿甚されたす



結論ずしお



モバむルデバむスを含め、Webを高速化する倚くの方法がありたす。 この蚘事が、モバむルクラむアントを操䜜するためのサヌバヌパヌツを蚭蚈するAPI開発者にずっお圹立぀ガむドになるこずを願っおいたす。



All Articles