最新のむンタヌフェヌス開発の䞻な問題

こんにちは、Habr Dan Abramov の 投皿 「UI゚ンゞニアリングの芁玠」の翻蚳を、優れたむンタヌフェむスで解決する必芁のある珟代の問題ずタスクに぀いお玹介したす。 著者は、むンタヌフェヌスの開発における基本的な問題を怜蚎したす。既成のラむブラリずフレヌムワヌクを䜿甚せずに、フロント゚ンド開発の分野で垂堎の゜リュヌションを深く理解できる解釈ず解決策だけです。







翻蚳者のメモ
テキストは最初の人で曞かれ、翻蚳されたす。 オリゞナルの英語版の著者は、耇雑なナヌザヌむンタヌフェむスを構築するためのReactラむブラリの開発者であるDan Abramovです。


前回の出版物で、自分の知識のギャップを認識するこずがいかに重芁かに぀いお曞きたした。 平凡であるために蚀い蚳をしおいるように思えたかもしれたせん。 たったくない しかし実際には、私たちの知識は䌚話の広範なトピックです。



「すぐに」知識を始めるこずができ、特定の順序で技術Web開発の技術スタック-玄翻蚳者を勉匷する必芁はないず確信しおいたす。 しかし、私はたた、遞択した分野での経隓ず専門的スキルの蓄積が非垞に重芁だず考えおいたす。 個人的に、私は垞にナヌザヌむンタヌフェむスの䜜成に最も興味を持っおいたす。



そしお、私は䜕を理解し、 䜕が重芁であるず思いたすか もちろん、私はJavascriptやReactなどのテクノロゞヌに粟通しおいたす。 ただし、経隓に䌎う最も重芁なこずはずらえどころのないものであり、それらを正確に定匏化しようずするず、通垞は抜け萜ちたす。 私はそれらを蚀葉にしようずしたせんでした。 これは、それらのいく぀かを䜓系化しお説明する最初の詊みです。






今日、技術を孊ぶための倚くの異なる方法がありたす。 2019幎に賭けるラむブラリはどれですか そしお2020幎に VueたたはReactを孊ぶ必芁がありたすか たたは角床 ReduxたたはRxはどうですか アポロを孊ぶ必芁がありたすか RESTたたはGraphQL ここで迷子になるのは簡単です さらに、䜜者も間違っおいる可胜性がありたす。



認知における私の最倧の成果は、特定の技術ずは関係ありたせん。 特定のUIナヌザヌむンタヌフェむス-玄翻蚳者の問題を扱っおいたずき、私はもっず理解し始めたした。 同時に、問題を解決するのに圹立぀他の人のラむブラリずパタヌンを芋぀けるこずがありたした。 そしお時々、圌は圌自身の決定を曞いた善悪䞡方ずも。

問題の理解、 ツヌルの実隓、さたざたな゜リュヌションの適甚で構成されるこの組み合わせは、私にずっお最も䟡倀のある経隓ずスキルを䞎えおくれたした。 この投皿では、ナヌザヌむンタヌフェむスの開発で察凊した問題にのみ焊点を圓おおいたす。






ナヌザヌむンタヌフェむスを開発しおいる堎合、盎接たたはラむブラリを䜿甚しおいるずきに、これらの問題のいく぀かに遭遇する可胜性が高くなりたす。 どちらの堎合も、ラむブラリのない単玔なアプリケヌションで䜜業し、これらの問題を再珟しお解決するこずをお勧めしたす。 それらのいずれにも適切な゜リュヌションはありたせん。 経隓には、これらの問題を理解し、それぞれの長所ず短所を考えお可胜な解決策を怜蚎するこずが含たれたす。



䞀貫性



あなたはこの投皿が奜きで、碑文が珟れたした「あなたずあなたの3人の友人がそれを高く評䟡したした。」 「いいね」ボタンをもう䞀床クリックするず、碑文が消えたした。 簡単ですね しかし、そのような碑文が画面䞊のいく぀かの堎所に存圚する可胜性がありたす。 同様の远加の芖芚的衚瀺たずえば、ボタンの背景色もあり、これも倉曎する必芁がありたす。 たた、以前にサヌバヌから受信し、マりスをポむントしたずきに衚瀺される「いいね」のリストに名前が含たれるようになりたした。 たた、別のセクションに移動したり、[戻る]ボタンをクリックした堎合、投皿は自分の奜みを「忘れる」こずはありたせん。 ご芧のずおり、1人のナヌザヌのロヌカル敎合性でさえ、倚くの困難なタスクを䜜成したす。 同時に、他のナヌザヌもあなたに衚瀺されおいるデヌタを操䜜できたすたずえば、衚瀺䞭の投皿など。 画面のさたざたな郚分でデヌタの同期を維持するにはどうすればよいですか サヌバヌでロヌカルデヌタをい぀どのように確認し、倉曎を送受信する必芁がありたすか



応答性



人々は、非垞に限られた時間だけ、自分の行動に察する芖芚的なフィヌドバックの欠劂を蚱可しおいたす。 スクロヌルなどの継続的なナヌザヌアクションの堎合、アプリケヌションの反応の欠劂は最短期間のみ可胜です。 16ミリ秒の1フレヌムをスキップしおも、すでにバグが倚く、未完成に芋えたす。 䞀郚の調査によるず、クリックなどの個別の 1回限りのアクションの堎合、ナヌザヌは通垞100ミリ秒未満の応答の遅延を認識したす。 アクションに時間がかかる堎合は、芖芚的なむンゞケヌタを衚瀺する必芁がありたす。 ただし、いく぀かの盎感に反するタスクがありたす。 ペヌゞテンプレヌトのシフトを匕き起こすむンゞケヌタ、たたはいく぀かの亀互の段階を経るむンゞケヌタは、アクションが実際よりも「感じるように」長く続く可胜性がありたす。 同様に、アニメヌションの1フレヌムをスキップするこずによる20ミリ秒以内のアプリケヌションの応答は、30ミリ秒以内の完党なアニメヌションよりも「遅く感じる」こずがありたす。 私たちの意識はベンチマヌクのように機胜したせん。 アプリの応答性を維持するにはどうすればよいですか



応答時間遅延



ネットワヌクを介したコンピュヌタヌの蚈算ずデヌタの送信には時間がかかりたす。 ナヌザヌのデバむスの応答性に圱響しない堎合は、蚈算時間を無芖できる堎合がありたすただし、叀いデバむスず予算のあるデバむスでコヌドをテストしたこずを確認しおください。 ただし、ネットワヌクを介したデヌタ送信時間の凊理は避けられたせん-数秒で蚈算できたす デヌタたたはコヌドのロヌドを埅機しおいる間、アプリケヌションを単に「ハング」させるこずはできたせん。 ぀たり、新しいデヌタ、コヌド、たたはアセットを必芁ずするアクションは朜圚的に非同期であり、そのロヌドの状態を凊理する必芁がありたす。 これは、ほずんどの画面ず芁玠に圓おはたりたす。 回転するスピナヌや空の「穎」のカスケヌドをむンタヌフェむスに衚瀺せずに、デヌタ送信の遅延を適切に凊理する方法は ペヌゞレむアりトのシフトを避ける方法 そしお、コヌドを絶えず曞き換えるこずなく非同期の䟝存関係を倉曎する方法は



ナビゲヌション



むンタラクションは、むンタラクション時に「安定」しおいるこずを期埅しおいたす。 芁玠が突然消えおはいけたせん。 アプリケヌションの内郚リンクなどず倖郚ブラりザヌの[戻る]ボタンなどの䞡方のナビゲヌションも、この原則に埓う必芁がありたす。 たずえば、ナヌザヌセクションで/profile/likes



ず/profile/follows



followingタブを切り替えおも、このセクション倖の怜玢フィヌルドの内容は無効になりたせん。 別の画面に切り替えおも、別の郚屋に歩いおいるように芋えるはずです。 人々は、戻っおきたずき、圌らが残したすべおのものを芋぀けるこずを期埅しおいたすそしお、おそらく、新しいものに満足するでしょう。 テヌプの真ん䞭にいお、プロファむルタブをクリックしおからテヌプに戻った堎合は、テヌプを最初から再スクロヌルしたり、テヌプの過去の状態がロヌドされるたで埅機したりしないでください。 重芁なコンテキストを倱うこずなく、任意のナヌザヌナビゲヌションを凊理するアプリケヌションを蚭蚈する方法は



叀さ



ロヌカルキャッシュをアプリケヌションに远加するこずにより、[戻る]ボタンの実装を瞬時に行うこずができたす。 これを行うには、必芁なデヌタをキャッシュに保存したす以前の状態からのデヌタ-箄Translator。 理論的にキャッシュを曎新しお、デヌタを最新の状態に保぀こずもできたす。 ただし、キャッシュの実装には新たな課題が䌎いたす。 キャッシュが叀くなっおいる可胜性がありたす。 アバタヌを倉曎した堎合は、キャッシュに含めお曎新する必芁がありたす。 新しい投皿を公開するず、すぐにキャッシュに衚瀺されたす。そうしないず、キャッシュが無効になりたす。 そのようなコヌドは、最終的に耇雑になり、保守が困難になる堎合がありたす。 公開プロセスが倱敗した堎合はどうなりたすか メモリ内のキャッシュの長さはどれくらいですか デヌタセットを再取埗するずき、新しいデヌタを以前にキャッシュされたデヌタず結合したすか、それずも叀いキャッシュを取り陀き、セット党䜓を再床キャッシュしたすか キャッシュでペヌゞネヌションず゜ヌトをどのように衚瀺する必芁がありたすか



゚ントロピヌ



熱力孊の第二法則は、おおよそ次のように読めたす「時間が経぀に぀れお、すべおが完党な混乱に倉わりたす」もちろん、逐語的ではありたせん。 これは、ナヌザヌむンタヌフェむスにも圓おはたりたす。 特定のナヌザヌのアクションずその順序を予枬するこずはできたせん。 い぀でも、アプリケヌションは膚倧な巚倧な数の異なる状態のいずれかになりたす。 私たちは、デザむンに埓っお結果を予枬可胜か぀制限できるように最善を尜くしたす。 バグのあるスクリヌンショットを芋お、「どうしおこうなったのか」ず考えたくありたせん。可胜な状態がNの堎合、それらの間にN×N – 1の可胜な遷移がありたす。 たずえば、ボタンに5぀の異なる状態通垞、アクティブ、ホバヌ、ハむラむト、無効が可胜な堎合、ボタンの倉曎を担圓するコヌドは5×4 = 20の可胜な遷移に察しお正しくなければなりたせん-たたはそれらのいく぀かを明瀺的に犁止したす。 可胜な状態の組み合わせの増加にどのように察凊し、予枬可胜な芖芚的出力を䜜成したすか



優先順䜍



いく぀かのものは他のものよりも重芁です。 察話むンタヌフェむスは、呌び出し元のボタンの厳密に「䞊」に衚瀺され、芪コンテナを超えおいる必芁がありたす。 たたは、スケゞュヌルされたばかりのタスク぀たり、クリックの結果は、既に開始されおいる長時間実行されるタスクよりも重芁な堎合がありたす。 アプリケヌションがズヌムむンするず、さたざたな人たたはチヌムによっお䜜成されたさたざたな郚分が、プロセッサの蚈算胜力、ネットワヌクトラフィック、画面スペヌス、バンドルサむズなどの限られたリ゜ヌスを奪い合いたす。 z-index



CSSルヌルのように、単䞀の「重芁床」スケヌルでアむテムを配垃できる堎合がありたす。 しかし、通垞は良いもので終わるわけではありたせん 。 すべおの開発者は、自分のコヌドを重芁ず考えおいたす。 しかし、すべおが等しく重芁である堎合、それは意味する-䜕も重芁ではありたせん。 限られたリ゜ヌスのために戊うのではなく、アプリケヌションの独立した郚分をどのように盞互䜜甚させるこずができたすか



アクセシビリティ



障害のある人に適応しおいないサむトは、高床に専門化された問題ではありたせん。 たずえば、むギリスでは5人に1人のナヌザヌがこの問題に盎面しおいたす芖芚的なむンフォグラフィックです。 自分で感じたした。 私はただ26歳ですが、薄いフォントず䞍透明な配色のサむトはほずんど䜿甚しおいたせん。 トラックパッドはあたり䜿甚しないようにしおいたすが、キヌボヌドに䞍適切なサむトを䜿甚しなければならない日が怖いです。 障害のある人にずっおアプリを悪倢に倉えおはいけたせん-良いニュヌスは、それほど難しくないずいうこずです。 ゜リュヌションずツヌルを調査するこずから始める必芁がありたす。 さらに、蚭蚈者ず開発者が正しい刀断を䞋せるようにする必芁がありたす。 アプリケヌションの可甚性がデフォルトで有効になり、最新のリビゞョンにならないようにするにはどうすればよいですか



囜際化



私たちのアプリケヌションは䞖界䞭で動䜜するはずです。 はい、人々はさたざたな蚀語を話したすが、これに加えお、右から巊ぞ、そしお開発者の最小限の劎力で、曞き蟌みのサポヌトが必芁です。 アプリケヌションの応答性ず応答時間を倱うこずなく、異なる蚀語ずスクリプトをどのようにサポヌトできたすか



配送



アプリケヌションコヌドを゚ンドナヌザヌのコンピュヌタヌに配信する必芁がありたす。 どのような送信方法ずフォヌマットを䜿甚したすか この質問では、それぞれの答えはそれ自身の長所ず短所のセットずの劥協になりたす。 たずえば、ネむティブアプリケヌションは、サむズが倧きいため、すべおのコヌドを事前にダりンロヌドする必芁がありたす。 通垞、Webアプリケヌションの起動時間ははるかに短くなりたすが、䜿甚䞭に倚くの遅延ずダりンロヌドを凊理する必芁がありたす。 これらの2぀のオプションからどのタむプの遅延を遞択するかをどのように決定したすか ナヌザヌ䜿甚統蚈に基づいおどのように応答時間を最適化したすか 最良の決定を䞋すために必芁なデヌタは䜕ですか



柔軟性匟力性



自分のプログラムでバグに遭遇するこずを奜む人はいたせん。 ただし、䞀郚のバグは必然的に本番環境に移行したす。 そしお、䜕が起こるかは非垞に重芁です。 䞀郚のバグは、正しくないが、厳密に定矩され、事前定矩された動䜜を匕き起こしたす。 たずえば、コヌドは特定の条件に察しお䞍適切な状態を瀺したす。 しかし、バグの結果、アプリケヌションがレンダリングを完党に停止した堎合はどうでしょうか この堎合、芖芚的な出力が決定されないため、プログラムの意味のある実行を継続するこずはできたせん。 フィヌドから1぀の投皿をレンダリングする際の゚ラヌは、フィヌド党䜓のレンダリングを「䞭断」したり、アプリケヌションを䞍安定な状態にしたりするこずはありたせん。これにより、さらに゚ラヌが発生したす。 パヌツの1぀でデヌタをレンダリングたたは受信するずきの゚ラヌを分離し、残りのアプリケヌションの正しい操䜜を継続するコヌドを䜜成するにはどうすればよいですか ナヌザヌむンタヌフェむスを䜜成するずき、フォヌルトトレランスずはどういう意味ですか



抜象化



小さなアプリケヌションでは、額の䞊蚘の問題をすべおハヌドコヌディングしお解決できたす。 しかし、アプリケヌションは成長する傟向がありたす。 アプリケヌションのさたざたな郚分を再利甚、分岐、統合し、他の人ず䞀緒にできるようにしたいず考えおいたす。 私たちは、䜜業の過皋でしばしば倉化し進化するため、異なる人々によっお受け入れられる1぀の党䜓の郚分間の理解可胜な境界を定矩するず同時に、過床に厳栌なロゞックを避けたいず考えおいたす。 UI実装の詳现を隠す抜象化をどのように䜜成したすか アプリケヌションの成長に䌎うこれらの問題の再発をどのように回避できたすか






もちろん、私が蚀及しおいない倚くの問題がありたす。 このリストは決しお完党たたは網矅的ではありたせん。 たずえば、蚭蚈ず開発の間のコラボレヌションのトピック、デバッグたたはテストのトピックには觊れたせんでした。 おそらく私たちはこの別の時間に戻るでしょう。



゜リュヌションずしお、デヌタを衚瀺するための特定のフレヌムワヌク、たたはデヌタを受信するためのラむブラリを念頭に眮いお、これらの問題に぀いお読みたいず思いたす。 しかし、これらの解決策が存圚しないこずを想像しお、もう䞀床読んでみるこずをお勧めしたす。 これらの問題をどのように解決しようずしたすか シンプルなアプリケヌションでアむデアを実珟しおください。 Githubで実隓の結果を芋るこずができおうれしいです。  Twitterで Dan Abramovにタグを付け、リポゞトリぞのリンクを添付するだけです-玄翻蚳者。



これらの問題で特に興味深いのは、それらのほずんどがあらゆる芏暡で珟れるこずです。 ツヌルチップなどの小さなりィゞェットで䜜業しおいるずきや、TwitterやFacebookなどの巚倧なアプリケヌションで䜜業しおいるずきに遭遇するこずがありたす。



䜿甚するアプリケヌションの重芁なナヌザヌむンタヌフェむス芁玠に぀いお考え、䞊蚘の問題のリストをもう䞀床実行したす。 開発者が行ったトレヌドオフに぀いお説明できたすか 同様の動䜜をれロから再珟しおみおください



優れたナヌザヌむンタヌフェむスを開発し、サヌドパヌティのラむブラリずフレヌムワヌクを䜿甚せずに小さなアプリケヌションでこれらの問題を実隓するこずに぀いお倚くのこずに気付きたした。 耇雑なむンタヌフェヌスを開発する際に、゜リュヌションずトレヌドオフを深く理解したい人にはこれをお勧めしたす。



All Articles