同形のWebアプリがあなたが探している銀の弾丸ではない6つの理由-ブログ。

この2年間、私はIsomorphic Web Appsという言葉を肯定的な方法で頻繁に聞いたことがあります。 また、この時間の間に、私は技術について自分自身を考えていくつかを行ってきました。 私の結論は、同形のWeb Appsは、私や私が働いている典型的な組織にとって価値を追加しないものであるということです。 いくつかのことが私をこの結論に導いてきました。しかし、理由を列挙する前に、同型のjavascriptライブラリ(つまりlodash。loadashはloadashのようなものです。loadashのようなものは、loadashのようなものです。loadashのようなものは、loadashのようなloadashのlodashのようなものです。js)はすごいですね。 また、孤立した同形成分は、例えばライブ更新された株式市場指標のように貴重なものになると思います。

私が同形のWebアプリが私や私が働いている組織にとって貴重であると信じていない理由は次のとおりです:

  • webサーバーはjavascriptでしか書くことができないようになりました
  • 同形のWebアプリは、非自明なアプリの進歩的な強化になることはできません
  • ブロッキング対非ブロッキングデータフロー
  • インタラクションまでの時間と不思議な谷
  • javascriptの解析中にモバイルデバイスがフリーズする
  • あなたの最高の開発者は、値を生成しないように忙しくなりました
  • 私は同型のwebアプリの定義から始めたいと思います。 同形のWebアプリは、アプリケーションコードがどこで実行されているのかを知らないwebアプリです。 代わりに、この知識はインフラストラクチャコードに保持され、アプリケーション全体をクライアント側とサーバー側の両方で実行できます。

    webサーバーはjavascriptでのみ記述できるようになりました

    クライアントコードとサーバーコードが同じであれば(クライアントはjavascriptのみを解釈できます)、サーバー上でjavascript 私はノードが好きです。jsは非常に多いですが、私の視点では、将来的には代替案に開放される方が良いと思います。

    Isomorphic Web Apps can never be Progressive Enhancement for non-trivial apps

    クライアント側のjavascriptは、非常に低いレイテンシ(サブミリ秒)で、きめ細かなレベルの対話を可能にするメモリ内の状態マシンア リンクのクリックとフォームの送信によって駆動されるHTTPステートマシンについては、同じではありません。

    私にとって、進歩的な強化は、古いものから現在のもの、将来のものまで、すべての可能なデバイス/ブラウザでアクセス可能なベースラインから始めるこ 実際には、これはサーバー側のレンダリングのベースラインを意味します。 強化ステップは、価値を高めるためにサイト/アプリを強化する場所に関するビジネス上の決定です。 つまり、pjaxやturbolinksのような最適化技術を除いて、拡張はアプリケーションコード(特定)で行われ、インフラストラクチャコード(一般)では行われません。

    Isomorphic Web Appsが進歩的な拡張を得る方法は、このきめの細かいインメモリ状態マシンを使用し、リンクとフォームのみを使用するように”翻訳”することです。 これが可能な場所を見ることができる唯一のケースは、最初に完全なクライアント側のレンダリングを必要とせず、代わりに上記の最適化技術とク

    このソリューションの変種は、サーバー側の状態マシン内のすべてのクライアント側の状態/遷移をサポートしないことです。 この場合、これはアプリケーションコードに反映される必要があるビジネス上の決定であり、アプリケーションコード環境を敏感にする必要があります。

    Isomorphic Web Appsが進歩的な拡張を得る方法は、このきめの細かいインメモリ状態マシンを使用し、リンクとフォームのみを使用するように”翻訳”することです。

    ブロックと非ブロックのデータフロー

    サーバー側のwebとクライアント側のwebのレンダリングシーケンスは異なります。

    ビューをレンダリングするために、いくつかのサービスに対して二つの要求を行う必要があると想像してください。 私たちはこれらの要求を並行して行うことができます。

    サーバー側では、2番目の要求が最初に返された場合、応答のその部分をレンダリングできますが、最初の要求がレンダリングされ、応答のその部分がブラウ

    クライアント側では、この制約は存在しません。

    また、私は上記の例の最も単純なものを表していると思います。 ルートコンポーネントがスマートであるコンポーネントのツリーがあるとします(スマート/ダムコンポーネントの説明については、PresentationalおよびContainer Componentsを参照してくださ

    Smart and dump components

    インフラストラクチャは、スマートリーフのコンテキストが失われないようにする方法を必要とするため、サーバー/クライアントモードに応じて、ブロッキング/ノンブロッキングの実行を制御できなくなります。 この問題を解決する1つの方法は、プログラム全体を自由なモナドで実行し、実行を後で解釈するデータとして表すことです。 別の解決策は、何らかの形の訪問者パターンを使用し、コンポーネントに必要なデータを宣言させることです(Tutorial:同型のReduxアプリケーションを(愛を持って)手 後者はおそらく最も簡単です。 私のポイントは、異なるブロッキングモードの問題は、おそらく最初に想像するよりはるかに複雑であるということです。

    別の設計では、HASKELLでIOモナドを使用し、葉を純粋に保ち、最上位レベルで副作用のみを持つ方法と同様に、”ルートコンポーネントのみがスマートコンポーネ クライアント側のコンポーネントは、ソーシャルメディア関連のコンポーネントなど、少なくともいくつかのシナリオで独自のデータをロードできるはず これらのシナリオを決して許可しないルールを持つことは非常に非生産的です。

    Time-to-interaction and The Uncanny Valley

    Isomorphic Web Appsアプローチでは、ユーザーが画面上でインタラクティブであるように見えるがそうではないグラフィカル要素を見る時間があります。 これは”不思議な谷”または”ポチョムキン村”と呼ばれています。

    これが私がプログレッシブレンダリング+ブートストラップを好む理由です。 私はより多くのフレームワークがこのアプローチをサポートしているのを見たい

    詳細については、このツイートと回答を参照してください。

    javascriptの解析中にモバイルデバイスがフリーズする

    「典型的な」携帯電話では、1KBのjavascriptごとに1ms UIスレッドが停止します。 Malte UblはAMPプロジェクトの技術リーダーなので、彼は彼が何を話しているのか知っていると思います。

    @トムデール@HENRIKJORETEG UIスレッドストールの1msにほぼ等しいJSの電話1KBに. サイズの問題。

    あなたの最高の開発者は今、価値を生み出していない忙しい

    Isomorphic Web Appsは、高いレベルの開発スキルを必要とするアプローチです。 多くの分野(少なくとも西洋の世界)では、高度に熟練した開発者を見つけて募集することは困難です。 同形のWebアプリを開発することを選択すると、これらの開発者は、私が疑問に思うことをするように割り当てられ、ビジネス価値はまったく生ま 自分の時間を利用するためのより良い方法があります。

    概要

    Isomorphic Web Appsは、webサーバーの言語/プラットフォームの選択をjavascriptのみに制限します。 それは進歩的な強化を可能にする野心を持っていますが、それは実現できません。 これは、ブロッキング/非ブロッキングデータフローの違いによる技術的な複雑さの高いレベルを導入しています。 それは物事がインタラクティブであるように見えるが、(不思議な谷)ではない時間ウィンドウを紹介します。 大量のjavascriptもモバイルブラウザをフリーズさせ、1KBのjavascriptは1msのUIスレッドが停止していることを意味するというルールがあります。 そして、それは複雑なソフトウェア設計を必要とするので、それはあなたの最高の開発者から貴重な時間と労力がかかります–自分の時間を利用す

    最後に、私はあなたの経験が私の経験とは異なるかもしれないことを強調したいと思います。 同形のWebアプリが良いシナリオがあるかもしれません。 しかし、これらは、サーバー側のweb利点とクライアント側のweb利点の間のすべてのギャップを埋めるための銀の弾丸ではありませんが、両方のアプローチの欠点は何も得られません。

    あなたはどう思いますか? あなたは「同型になる」と考えましたか? あなたは課題とコストについての考えを持っていますか? どのようにそれらに対処するのですか?

    謝辞

    このトピックに関する貴重な議論をしてくれたOskar WickströmとPer Ökvistに感謝します。 Oskarもこの投稿を見直しました–Oskarに感謝します。

コメントを残す

メールアドレスが公開されることはありません。