Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。Servlet"の1節(PDF・英語)をサンプルとしてお届けする。これほど人気があるのは主にそのパフォーマンスに理由があります。私たちは多くのAjaxアプリにおいてユーザへの一番の訴求手段となっている派手なエフェクトがその理由だと考えがちです。ユーザも自分たちがAjaxアプリを好むのはそのためだと思っているのでしょう。それは当然のことです。旧来のウェブアプリは見ていても変化がなく退屈なだけですから。派手なエフェクトが劇的にユーザエクスペリエンスを向上させるのであれば、アニメーションGIFはもっと広範囲で使われていたでしょう。幸いなことにアニメーションGIFがそこまで流行ることはありませんでした。AjaxがアニメーションGIFと同じ運命を辿らない理由は、外見の派手さだけがAjaxのもたらす価値ではないからです。Ajaxによってユーザエクスペリエンスを良くする本当の理由は、ユーザが意識しているしてないに拘わらず、そのパフォーマンスにあるのです。Ajaxが旧来のウェブアプリケーションより本質的に高いパフォーマンスを持つ理由をここで説明するつもりはありません。mapsを見ながら以前のウェブ地図アプリを思い出す、あるいはHotmailとGmailを比べてみればいいでしょう。Ajaxのアーキテクチャ上にアプリケーションを作ると劇的にパフォーマンスを上げユーザエクスペリエンスを向上させることができるのです。ここで述べるのは、このパフォーマンス向上を次のレベルへ推し進める方法です。これによって他のAjaxアプリとの差別化が実現されます。Toolkit(GWT)はAjax開発を強力に後押ししてくれます。この手の新しい技術の売り文句というのは強引なもので、同様の技術が他にもある場合は特にそうです。GWTがAjaxアプリにもたらすものは他の何よりも勝るものなのです。他のフレームワークに縛られてないのであればGWTを使わない手はありません。GWTによってあなたのAjaxアプリケーションは高いパフォーマンスをフリーに得ることができるのです。フリーにというのは、GWTについて考える必要がないということです。あなたはアプリケーションロジックを書くことに専念すればよく、GWTはそこにあるだけであなたのために物事を良くしようと働いてくれます。ご存知の通り、GWTはJavaコードをJavaScriptにコンパイルするコンパイラを備えています。あなたがコンパイル型言語(CやJavaなど)についてご存知であれば、その目的の一つが言語をプラットフォームに依存させないことであるのがお分かりでしょう。コンパイラはコンパイル対象のプラットフォームに応じてコードを最適化することができます。おかげでコードの可読性や構成に注力できるのです。GWTのコンパイラも同じことを行います。コンパイラはJavaコードを、高度に最適化されたJavaScriptが書かれたいくつかのファイルへとコンパイルします。それぞれのファイルはブラウザの種類ごとに生成されたものです。このコンパイルによりコンパクトかつブラウザの種類を意識しないコードが作られます。この最適化では実際のコンパイラの最適化手法が用いられていて、呼び出されないメソッドをコードから削除したり逆にコードを挿入したりします。そこではJavaScriptがウェブのアセンブリ言語として扱われています。して出来上がるのがコンパクトで速いコードなのです。ブラウザがそのJavaScriptを読み込む時、そのブラウザに必要なコードだけが読み込まれることになり、使用されないメソッドで膨れ上がったフレームワークの類は含まれません。GWTを使って作られたアプリケーションはJavaScriptで作られた他のアプリケーションよりもコンパクトで速く、控え目で多くを語らないGWTチームが「GWT1.5のコンパイラはどんな人が書いた手書きコードよりも速いJavaScriptを生成する」と自信を持って言うほどです。これだけでAjaxアプリケーションに対してGWTを使うのに十分な説明となると思いますが、それでも納得しない人には他にもGWTを使うべき多くの理由を挙げられます。それにはJava向けのツールが利用可能であることも含まれます(EclipseでAjaxアプリケーションのデバッグができるのは私にとって大きなプラスです)。お望みであれば話はまだ続きます。Ajaxアプリケーションは旧来のウェブアプリケーションよりパフォーマンスが良く、GWTアプリケーションは通常のAjaxアプリケーションよりパフォーマンスが良い、そのためGWTと数種類の技術を使えば真にパフォーマンスの良いアプリケーションの構築が可能で、アプリケーションの提供する機能に注力することができます。かかる時間も半分ですむようになるでしょう。GWTは魔法のごとく全てをかなえてくれるわけではありません。これから4つのテクニックをご紹介します。これらはAjaxアプリケーションのパフォーマンスをさらに上げるためにみなさん自身でできることです。アプリケーションをJavaScriptにコンパイルした時に生成されるファイルは、それぞれがブラウザの種類に対応し、ユニークな名前を持っています。このファイルにあるのがアプリケーションのコードで、単純にウェブサーバにコピーするだけで利用可能になります。ファイル名はコードのハッシュ値となっているので何もしなくてもバージョン管理が可能です。コード変更があれば、それをコンパイルすると新しいファイル名によって生成されるのです。これはつまりブラウザがこのファイルのコピーを既に読み込んでいるか、一度も読み込んでないかのどちらかになるということです。新しいバージョンが利用可能かどうかを確かめるのに更新時間を調べる必要ありません。If-Modified-Sinceヘッダのやり取りを解消できるのです。このやり取りは些細なものですが、ユーザの裾野が広がると膨れ上がります。ブラウザは同一ドメインに対して一度に2つのリクエストしかできないので、クライアントの動作を遅くする原因にもなります。Ajaxでの読み込み時間に対する最適化手法の多くにはサーバへのリクエスト数を減らすことが含まれているくらいです。HTTPヘッダを送信させる必要があります。このヘッダはウェブコンテンツが新しいものであるかをいつまで考慮しなくていいのかをブラウザに知らせます。ブラウザは期限日時が過ぎるまでは新しいバージョンのチェックをしないですみます。Apacheでこの設定をするのは簡単です。htaccessファイルに追加すればいいのです。year"</Files>これによりApacheは*.cache.*のパターンにマッチするファイルに対して1年の期限持たせるようなExpiresヘッダに付加します。GWTアプリケーションファイルがこのパターンにマッチすることになります。Tomcatを直接使っているのならサーブレットフィルタを通じてこのようなヘッダを加えることになります。そのためには新しくサーブレットフィルタを追加するのが分かりやすい方法でしょう。WEB_INF/web.xmlファイルに以下のようにフィルタを宣言してください。<url-pattern>/gwt/*</url-pattern></filter-mapping>これによりフィルタクラスを参照する場所とどのファイルをフィルタを通して送ればいいかをTomcatに知らせます。この場合/gwt/*のパターンによってgwtという名前のディレクトリにある全てのファイルが対象になります。()メソッドを実装しています。GWTにおいて現行バージョンを選択するためのロジックを含むnocacheファイルはキャッシュさせるべきではありません。そのためGWT用に*.nocache.*にマッチしないものだけにこのヘッダを付加させるため、以下のようにフィルタの実装をおこないます。コンパイラは使われないメソッドを削ったり変数名や関数名を短いものに変換したりすることでサイズを小さくしてくれますが、コンパイルされたコードはまだ圧縮されていません。デプロイ時にアプリケーションコードをgzipすることでよりサイズを減らすことができます。gzipを使った場合最大70%まで圧縮されるのでアプリケーションの読み込みが早くなります。これをサーバに設定するのも簡単にすみます。Apacheでファイルを圧縮するなら単に.htaccessファイルに以下の設定を加えるだけです。negotiationを接続してきたブラウザに対して実行し、ブラウザが圧縮に対応しているかしていないかに応じてコンテンツを圧縮して送ります。現在のブラウザ全てがgzip圧縮に対応しています。Tomcatを使っているのであればserver.xmlファイル内にあるConnector要素の圧縮属性を利用できます。やり方は単純に圧縮属性の値をonにするだけです。画像をバンドルするAjaxアプリケーションの通信ではブラウザおよびHTTPの通信の力を活用します。ブラウザやHTTPはAjaxアプリケーションの通信に対して最適化されているわけではありません。Ajaxアプリケーションはデプロイに関してよりデスクトップアプリケーションに近いといえます。旧来のウェブアプリケーションが用いている方法は共有リソース分散モデルに基づいており、ページのレンダリングに必要な全てのリソースを管理するためにはブラウザとウェブサーバとのやり取りをするようになっています。この管理方法はページ間でリソースの共有やキャッシュを保証するためで、新しいページがなるべく少ないダウンロードだけですむようにします。Ajaxアプリケーションのリソースは通常XML文書間で分散することはなく、別々に読み込む必要もありません。それでも旧来のウェブアプリケーションの管理モデルをそのままアプリケーションリソースの読み込むに使うのが簡単で、多くのアプリケーションがそのようにしています。なく一つのファイルに画像もバンドルさせると、アプリケーションの読み込みにかかるHTTPリクエスト数を減らすことが可能です。することでアプリケーションは1度に2回でなく1回のリクエストで全ての画像を読み込みます。以降ではImageBundleインターフェイスがサポートされています。これはアプリケーションで使うことになる画像それぞれに対するメソッドを持ったインターフェイスを定義するものです。アプリケーションがコンパイルされる時、このインターフェイスが読み込まれコンパイラが全ての画像を結合し一つの画像ファイル内に配置します。このファイルの名前には含んだ画像から生成されたハッシュ値が使われます(アプリケーションコードと同じようにこの画像ファイルを永続的にキャッシュさせることができます)。バンドルする画像の数はどれだけでもよく、アプリケーションで利用する時にはHTTPリクエスト1回分のオーバーヘッドしか掛かりません。私がこれまで開発に加わった2つのアプリケーションでは必要な画像に対して以下のようなイメージバンドルを用いました。AbstractImagePrototypeを返す点を見てください。メソッドを持ち、これはアプリケーションのインターフェイスが扱えるImageインスタンスを返します。以下のコードではこのイメージバンドルの利用法を示しています。);この方法はとてもシンプルですが起動時のパフォーマンスを大きく向上させます。StyleInjectorを使うアプリケーションリソースとしてのCSSファイルおよびCSSで指定される画像はどうでしょうか。旧来のウェブ分散モデルでは外部リソースとして扱われ、読み込みやキャッシュは別に行われます。Ajaxアプリケーションでこの方法を用いると、余分なHTTPリクエストが生じてアプリケーションの読み込みが遅くなります。今のところこの点に関してGWTが提供している手段はありませんが、GWT-incubatorプロジェクトでは将来のバージョンで取り入れられる可能性のあるいくつかのGWT用コードが書かれています。StyleInjector(スタイル注入器)です。クラスはImageBundleクラスとよく似ていますが、CSSやCSSで指定される画像も含んだどのようなリソースに対しても使うことができます。これが目指すのはアプリケーションを実行しているブラウザ上で可能なかぎり最適化された方法で扱われるように、画像以外のリソースも抽象化することです。以下のコードはCSSファイルといくつかのリソースを読み込むためにこのクラスを使った例です。TextResourceのどちらかになっています。DataResorceクラスではデータを参照するのにgetUrl()が使えます(例えばIMGタグやIFRAMEの中で)。どのようにデータが読み込まれどのように扱われるかはブラウザ毎に異なりますが、開発者がそれを気にする必要はありません。ほとんどの場合データはインラインURL参照で、そのインラインURLはURLプリフィックス(http://www.abc.com/def/など)と組み合わせて扱われます。このクラスのもつ可能性は非常に大きいものです。身近な使い方はCSSをアプリケーションファイルに直接バンドルすることです。このインターフェイスでCSSファイルといくつかの画像が参照されているのを見てください。この場合インターフェイスはCSSとそこで使われる画像をアプリケーションにバンドルするためのもので、これによりHTTP呼び出しの回数と起動時間を小さくすることができます。CSSテキストではアプリケーションのいくつかの要素での背景画像を指定しますが、実際の画像のURLを指定するのではなく画像の格納場所を指定します。これらの格納場所はバンドル内のほかの要素、この場合は画像、から参照されます。main.cssファイルがgwt-DialogBoxというスタイルのCSS規則を持っているとします。}このCSSファイルとそこで指定される画像を利用するにはGWT-incubatorプロジェクトで作られたStyleInjectorクラスを使う必要があります。StyleInjectorクラスはCSSデータを取り出して、そこにある格納場所とリソースバンドル内のリソースとをマッチングさせます。それからブラウザにCSSを注入してアプリケーションで利用できるようにします。書くととても複雑に見えますが、使い方は簡単でパフォーマンスも上がります。以下の例ではStyleInjectorによってリソースバンドル内のCSSをアプリケーションに注入しています。);ただし、このテクニックはincubatorプロジェクトに含まれるもので、将来変更されることが十分ありえることに注意してください。まとめAjaxアプリケーションは旧来のウェブアプリケーションより遥かに優れたユーザビリティを備え、GWTはより優れたAjaxのパフォーマンスをフリーでもたらすツールを提供します。GWTのメールアプリケーションのサンプル(source)と他のAjaxアプリケーションのサンプルを比べてみると分かるでしょう。旧来のウェブアプリケーションとAjaxアプリケーションとのデプロイに関する相違点についても考慮すればよりパフォーマンスを高めることもできます。私は次世代のAjaxアプリケーションを目にすることを楽しみにしています。Dewsbury氏は1998年以来C++とJavaでの開発、設計、コンサルティングに関わってきた。当初の数年は半導体製造システム向けのフレームワーク構築に携わり、最近は2,3のウェブスタートアップ企業とともに最先端のソフトウェアを通じて優れたユーザエクスペリエンスを生み出す仕事をおこなっている。Message(2004年に買収された)やGpokr(gpokr.com)、KDice(kdice.com)、GWTをベースにした2つのちょっとしたウェブゲームなどがある。注意:コードや本文ではセキュリティ問題やエラー処理について対処していません。Inc.、ISBN0321501969)から抜粋されたものです。この本の詳細についてはこちらを参照してください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。