17 Oracle JETアプリケーションのパフォーマンスの最適化
パフォーマンスおよびOracle JETアプリケーションについて
一般的に、Oracle JETアプリケーションは、クライアント側のHTML5アプリケーションのパフォーマンスを最適化するのと同じ方法で最適化できます。
パフォーマンスの最適化に関するヒントを提供するオンライン・リソースは多数あります。たとえば、Google Developers Webサイトでは、アプリケーションのパフォーマンスを向上するツールについて説明されています。
Googleツールに基づいて作成されたほとんどの推奨事項を実施するかどうかはユーザーが決めることができます。ただし、Oracle JETには、ペイロード・サイズ、およびOracle JETアプリケーションのCSSを取得するためのデータ転送数を減らす機能が含まれています。通常は、できるだけ次のガイドラインに従ってください。
- サーバーからのリクエスト数を減らすために、常にアプリケーション・リソースを縮小してバンドルします。
- ネットワーク使用量を最小限に抑えるため、Oracle CDNからリソースをロードするようにアプリケーションを構成します。
- CDN上のOracle JETライブラリを使用するようにアプリケーションを構成します。こうすると、
bundles-config.js
スクリプトが、縮小されたバンドルとモジュールをデフォルトでロードします。 - gzipでアプリケーションを圧縮してサイズを減らします(また、Webサーバーで圧縮を有効にします)。
- WebサーバーでHTTPキャッシュを有効にします。一部のリクエストの処理がサーバーからではなくキャッシュからできるようになります。常にサーバーから処理する必要があるファイルにはETagを使用します。
- HTTP/2を利用して、HTTP/1.1を使用する場合よりも速くページ・リソースを処理します。
- シングル・ページ・アプリケーションを使用して、アプリケーション全体の分解と再構築をブラウザが強制されないようにします。
- 単一ページに配置するデータ中心コンポーネントの数が多くならないようにします。
- グラフィック・イメージの最適化: ベクトル形式を優先します。提供される最適な全体の圧縮率に基づいて、適切なイメージ形式を選択します。
これらの最適化のヒントやその他の情報の詳細は、「Oracle JETアプリケーションへのパフォーマンスの最適化の追加」を参照してください。
Oracle JETアプリケーションへのパフォーマンスの最適化の追加
Webアプリケーションのパフォーマンスを最適化するためのほとんどのヒントは、Oracle JETアプリケーションにも該当します。ただし、JavaScript、CSS、Oracle JETコンポーネント、RESTコールおよびイメージを最適化するために、Oracle JETアプリケーションに特に適用するステップがいくつかあります。
JavaScriptパフォーマンスのヒント
パフォーマンスのヒント | 詳細 |
---|---|
予期されるJavaScriptフォルダ構造を維持します |
Oracle JETツールによって生成されたフォルダ構成を使用し、アプリケーション・ルート・ディレクトリの |
アプリケーションで必要なJavaScriptコードのみを送信します。 |
Oracle JETには、RequireJSを使用してロードできるモジュールが含まれています。詳細は、「モジュラ開発に対するRequireJSの使用」を参照してください。1つの方法は、アプリケーションで使用するJavaScriptモジュールをプリロードすることです。次のサンプルは、アプリケーションの
main.js 内でrequire関数を変更する方法を示しています。
|
縮小/難読化されたJavaScriptを送信します。 |
Oracle JETには、Oracle JETライブラリの縮小バージョンおよびサード・パーティ・ライブラリ(使用可能な場合)が用意されています。デフォルトでは、アプリケーションのリリース・バージョンをビルドするときに、 "jquery": { "cdn": "3rdparty", "cwd": "node_modules/jquery/dist", "debug": { "src": "jquery.js", "path": "libs/jquery/jquery-#{version}.js", "cdnPath": "jquery/jquery-3.x.x" }, "release": { "src": "jquery.min.js", "path": "libs/jquery/jquery-#{version}.min.js", "cdnPath": "jquery/jquery-3.x.x.min" } }, Oracle JETアプリケーションでRequireJSブートストラップ・ファイルを使用する方法の詳細は、「Oracle JETアプリケーションでのRequireJSについて」を参照してください。 |
JavaScriptを取得するためのデータ転送数を最小化します。 |
Oracle JETではデータ転送数の最小化がサポートされていませんが、RequireJSにはモジュールの結合に使用できる最適化ツールがあります。詳細は、RequireJSオプティマイザのドキュメントを参照してください。別の方法として、TerserなどのJavaScriptコード・ミニファイアを使用し、JavaScriptソースをバンドルして最小化します。 |
最初のレンダリングで不要なJavaScriptには遅延ロードを使用します。 |
最初のレンダリングで不要なコンテンツを遅延ロードできます。たとえば、 |
ペイロードを圧縮またはzipします。 |
Oracle JETはサーバーに対する制御がないため、この推奨事項を実施するのはユーザー自身です。追加の詳細およびヒントについては、https://developers.google.com/speed/docs/best-practices/payload#GzipCompressionを参照してください。 |
キャッシュ・ヘッダーを設定します。 |
JETはサーバーに対する制御がないため、この推奨事項を実施するのはユーザー自身です。キャッシュ最適化の詳細は、https://developers.google.com/speed/docs/best-practices/cachingを参照してください。 |
CSSパフォーマンスのヒント
パフォーマンスのヒント | 詳細 |
---|---|
予期されるCSSフォルダ構造を維持します |
Oracle JETツールによって生成されたフォルダ構成を使用し、アプリケーション・ルート・ディレクトリの |
必要なすべてのCSSのページを1回レンダリングします |
HTMLページのHEADセクション内のスタイル・シートにリンクします。すでにロードされたページの再レンダリングを回避するため、ページ本文のCSSリンクは使用しません。 |
アプリケーションで必要なCSSのみを送信します。 |
アプリケーションに送信されるCSSコンテンツを制御するには、カスタム・テーマを作成し、アプリケーションに必要なCSSに含める内容を制限します。「カスタム・テーマでのCSSの最適化」を参照してください。 また、Oracle JETグリッド・システムを使用している場合は、CSSに含めるレスポンシブ・クラスも制御できます。詳細は、「CSSのサイズおよび生成の制御」を参照してください。 |
縮小/難読化されたCSSを送信します。 |
Oracle JETでは、デフォルトで、縮小されたCSSが含まれています。ただし、アプリケーションで必要なCSSのみを送信するようにCSSを変更する場合は、Sassを使用して出力を最小化できます。詳細は、http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_styleで |
Oracle JETアプリケーションおよびコンポーネントのパフォーマンスのヒント
パフォーマンスのヒント | 詳細 |
---|---|
Oracle CDNとOracle CDNがJETに提供しているバンドル構成サポートを使用してバンドルされたJETモジュールとライブラリをロードするように、アプリケーションを構成します。 | Oracleコンテンツ配信ネットワーク(CDN)とバンドル構成サポートを利用することにより、エンタープライズ・アプリケーションのアプリケーション起動パフォーマンスが最適化され、また、特定のOracle JETリリースに必要なモジュールとライブラリのバージョンを使用してアプリケーションがビルドされます。アプリケーション内でバンドルを直接参照することは、バンドルの構成を直接参照するリンクを追加したり変更することも含め、推奨されません。詳細は、「Oracle CDN最適化のためのアプリケーションの構成について」を参照してください。 |
プレーンHTMLコンポーネントを使用する可能性を検討します。 | スタンプ・コンポーネント(表またはListViewなど)または宣言的なコンポーネント(コンポジット・コンポーネントなど)に対し、読取り専用入力コンポーネントやボタンなどの単純なOracle JETコンポーネントを組み込む場合は、かわりにプレーンHTMLコンポーネントを使用することを検討してください。プレーンHTMLコンポーネントは軽量化(DOMをより少なくすること)が可能で、コンポーネントがスタンプされる場合は追加することができます。ただし、プレーンHTMLでは、コンバータやバリデータなど、Oracle JETコンポーネントが提供する、組込みアクセシビリティ・サポートは使用できません。 |
Oracle JETコンポーネントのベスト・プラクティスに準拠します。 |
Oracle JETコンポーネントについては、APIドキュメントを参照してください。『Oracle® JavaScript Extension Toolkit (Oracle JET) APIリファレンス』には、コンポーネントのパフォーマンスに関する項があります(該当する場合)。例については、 ojDataGridのパフォーマンスに関する項を参照してください。 |
ページごとのOracle JETコンポーネントの数を制限します。 |
ページのコンポーネント数がページのロード時間に影響します。ロード時間を短縮するには、ページに配置するデータ中心コンポーネントの数を減らします。 |
|
表示する非表示のコンテンツがコンポーネントに含まれている場合、 |
コレクション・コンポーネントのフェッチ・サイズを制限します |
コレクション・コンポーネントの |
RESTリクエストのパフォーマンスのヒント
パフォーマンスのヒント | 詳細 |
---|---|
クライアントとサーバー間のデータ転送数を減らします。 |
データ転送数を減らすために使用できる技術は多数あり、ここではいくつかの例を示します。
|
イメージの最適化
パフォーマンスのヒント | 詳細 |
---|---|
予期されるimagesフォルダ構造を維持します |
Oracle JETツールによって生成されたフォルダ構成を使用し、アプリケーション・ルートの |
イメージ・サイズを縮小します。 |
イメージのサイズを縮小すると、ダウンロードが高速になり、画面にコンテンツをレンダリングする所要時間が短縮されます。たとえば、Scalable Vector Graphics (SVG)イメージは、通常、Portable Network Graphics (PNG)イメージより小さく、高解像度デバイス上でスケール変更されます。 イメージのサイズを縮小するのに使用できるサード・パーティのツールも多数あります。選択するツールは、次のようにイメージ・タイプによって決まります。 |
クライアントとサーバー間のデータ転送数を減らします。 |
データ転送数を減らすために使用できる技術は多数あり、ここではいくつかの例を示します。
|
パフォーマンスのその他のヒントは、パフォーマンスを監査する方法など、Webページの品質向上に関するGoogle開発者用のドキュメントを参照してください。
Oracle CDN最適化のためのアプリケーションの構成について
Oracleコンテンツ配信ネットワーク(CDN)およびCDNでサポートされるOracle JETディストリビューションを使用することにより、アプリケーションの起動時のネットワーク負荷を最小限に抑えるようにOracle JETアプリケーションを構成できます。
Oracle JETの必須ライブラリとモジュールのローカル・ロードは、アプリケーション作成時にデフォルトで構成されますが、Oracle CDNは使用されず、ブラウザで実行されているアプリケーションごとにライブラリとモジュールをスタンドアロン形式でロードする必要があるため、本番アプリケーションでは推奨されません。このデフォルト構成を使用できるのは、アプリケーションをローカルでビルドおよび提供する場合であり、テスト環境でアプリケーションをステージングしてネットワーク・アクセスをシミュレートする必要が生じるまでの間です。
Oracle CDN最適化を有効にするには、アプリケーションのpath_mapping.json
ファイルを構成します。パス・マッピング・ファイルで構成されたオプションによって、アプリケーション全体のライブラリ設定とモジュール設定が決まります。path_mapping.json
ファイルを使用すれば、他のアプリケーション・ファイルで必須ライブラリとモジュールのパスURLを編集する必要はありません。CDN最適化のパス・マッピングを構成すると、ツールでmain.js
ファイルのrequire
ブロックを更新する方法と、アプリケーションでモジュールとライブラリをロードする方法が次のように決定されます:
-
バンドル構成にアクセスせずにCDNを使用するようパス・マッピングを構成し、モジュールとライブラリがCDNから個別にロードされるようにすると、ツールによってパス・マッピング・ファイルから
main.js
ファイルのrequire
ブロックにURLが挿入されます。 -
CDNのバンドル・ロード処理を使用するようにパス・マッピングを構成すると、ツールによって
index.html
ファイルが更新され、次のスクリプト参照からバンドル構成スクリプト・ファイル(bundles-config.js
)が実行されます。<body> <script type="text/javascript" src="https://static.oracle.com/cdn/jet/17.1.0/default/js/bundles-config.js"></script> .. </body>
ノート:
JETリリース9.0.0以降、先行文字"v
"を使用してリリース番号を識別する規則が変更されました。前述の例に示すように、リリース識別子は、17.1.0と指定されたsemver値(先行文字なし)になりました。
バンドル構成ファイルでは、CDNからバンドルされたモジュールとライブラリのセットとしてロードするためにアプリケーションが実行する独自のrequire
ブロックを指定します。このようにアプリケーションを構成すると、サード・パーティのライブラリで構成されるURLリストのみが表示されるようにmain.js
ファイルがツールによって更新されます。バンドル構成シナリオでは、main.js
ファイルに挿入されたrequire
ブロックは、リストに追加する必要のあるアプリケーション固有のライブラリに対応したプレースホルダになります。バンドル構成ファイルのrequire
ブロックとアプリケーションのmain.js
ファイルの間でURLの重複が生じる場合は、バンドル構成が優先され、CDNからのバンドル・ロード処理が優先的に実行されます。
ヒント:
Oracleでは各リリースの構成が保持されるため、Oracle CDNのバンドル構成スクリプト・ファイルを参照するようにアプリケーションを構成することをお薦めします。アプリケーションに現在のバンドル構成を参照させることにより、サポートされるライブラリとモジュールの最新バージョンを使用してアプリケーションを実行できます。
ライブラリおよびモジュールのバンドル・ロード処理の構成
Oracle CDN最適化では、CDNからバンドルされたライブラリおよびモジュールのセットをロードするバンドル構成スクリプトを使用できます。
バンドル構成スクリプトを使用してライブラリとモジュールのバンドル・ロード処理を構成するには、次のステップを実行します。
ライブラリおよびモジュールの個別ロード処理の構成
バンドル構成スクリプトにアクセスせずにCDNを使用するようパス・マッピングを構成すると、モジュールおよびライブラリがCDNから個別にロードされます。
main.js
ファイルのrequire
ブロックに基づいてライブラリとモジュールを個別にロードする処理を構成するには、次のステップを実行します。
main.js
ファイルは編集せず、かわりにpath_mapping.json
ファイルを編集して、バンドル・ロード処理の場合には、アプリケーションのindex.html
ファイルでbundles-config.js
のURLも編集します。変更を適用するには、アプリケーションを再ビルドする必要があります。path_mapping.json
ファイルおよびツールで実行される構成変更の詳細は、「パス・マッピング・スクリプト・ファイルと構成オプションの理解」を参照してください。
パス・マッピング・スクリプト・ファイルと構成オプションの理解
Oracle JETでは提供されないライブラリおよびモジュールを使用して、アプリケーションへの追加の機能の統合が必要になる場合があります。Oracle JETのコマンドライン・インタフェース(CLI)を使用してビルドされたアプリケーションには、このプロセスに役立つpath_mapping.json
ファイルというメカニズムがあります。
アプリケーションのビルドまたは提供時、Oracle JETツールによってappRootDir/src/js/path_mapping.json
構成ファイルが呼び出され、パス・マッピングuse
属性に構成された設定に基づいて、Oracle JETモジュールとライブラリのURIパスが決定されます。
use
属性は、デフォルトでlocal
に設定され、コアOracle JETライブラリ(ojs
、ojL10n
、ojtranslations
など)およびサード・パーティの依存性ライブラリ(knockout
、jquery
、hammerjs
など)を含む必須ライブラリの場所を指定します。
アプリケーションのビルド時に、Oracle JETでは、アプリケーションのmain.js
ファイルのrequirejs.config()
関数を使用して、path_mapping.json
ファイルに指定された各ライブラリのロード・パスを定義します。各ライブラリ・パスURIは、libs
マップにリストされているライブラリのpath
またはcdnPath
属性に基づいて決定されます。
たとえば、Knockoutライブラリのパス・マッピング・エントリの詳細は、次のようになります。
"libs": {
"knockout": {
"cdn": "3rdparty",
"cwd": "node_modules/knockout/build/output",
"debug": {
"src": "knockout-latest.debug.js",
"path": "libs/knockout/knockout-#{version}.debug.js",
"cdnPath": "knockout/knockout-3.x.x.debug"
},
"release": {
"src": "knockout-latest.js",
"path": "libs/knockout/knockout-#{version}.js",
"cdnPath": "knockout/knockout-3.x.x"
}
},
アプリケーションのビルドまたは提供後、main.js
ファイルのrequirejs.config()
パス・マップには、次のパス・マッピングが含まれます。
"knockout":"libs/knockout/knockout-x.x.x.debug"
path_mapping.json
構成ファイルとその使用方法の詳細は、「Oracle JETアプリケーションへのサード・パーティ・ツールまたはライブラリの追加」を参照してください。
コンテンツ配信ネットワークでのライブラリおよびモジュールの使用
次のリストには、CDNおよびOracle JETアプリケーションでホストされるライブラリおよびモジュールの使用で発生する一般的なシナリオが含まれています。
Oracle CDNに対応した構成の場合、main.js
ファイルのrequire
ブロックは、アプリケーションにローカルなパス・マッピング・ファイルに基づいてすべて決定されるか、バンドル・ロード処理の最適化の場合は、一部はパス・マッピング・ファイルから、一部はOracle CDN上のOracleで保持されているbundles-config.js
ファイルのrequire
ブロックから決定されます。main.js
ファイルのパス・インジェクタ・マーカーは、リリース固有のURLが表示される位置を示します。
-
CDNのシナリオ1: ライブラリとモジュールをバンドルとしてOracle CDNからロードする場合、デフォルトではサード・パーティ・ライブラリのパス・マッピングのみが
main.js
ファイルのrequire
ブロックのURLライブラリ・リストに表示されます。たとえば、Knockoutライブラリのパス・マッピング定義の詳細は、次のようになります。
config
属性で、バンドル構成スクリプト・ファイルの名前はbundles-config.js
と指定されています。"baseUrl": "js" <==ignored "use": "cdn" "cdns": { "jet": { "prefix": "https://static.oracle.com/cdn/jet/17.1.0/default/js", "css": "https://static.oracle.com/cdn/jet/17.1.0/default/css", "config": "bundles-config.js" }, "3rdparty": "https://static.oracle.com/cdn/jet/17.1.0/3rdparty" }, "libs": { ... "cdnPath": "knockout/knockout-3.x.x" }
アプリケーションのビルドまたは提供後、
main.js
ファイルのrequire
ブロックには、サード・パーティ・ライブラリのURLのリストがプレースホルダとして挿入されます。bundles-config.js
ファイルのrequire
ブロックに指定されているライブラリとモジュールは、main.js
ファイルのrequire
ブロックに重複したライブラリがある場合、その重複ライブラリに優先してロードされることに注意してください。ただし、必要に応じて、サード・パーティ・ライブラリのURLがmain.js
ファイルのrequire
ブロックに表示されないように、そのパス・マッピングを構成できます。これを行うには、各サード・パーティ・ライブラリのパス定義で、path_mapping.json
ファイルの"cdn": "3rdparty"
を"cdn": "jet"
に編集します。 -
CDNのシナリオ2: パス・マッピングURLを使用して場所を指定し、Oracle CDNからライブラリを個別にロードする場合、ライブラリURLのリストはすべて
main.js
ファイルのrequire
ブロックに表示されます。たとえば、
cdns
要素を編集してバンドル構成スクリプト参照を削除すると、Knockoutライブラリのパス・マッピング定義の詳細は、次のようになります。"baseUrl": "js" <==ignored "use": "cdn" "cdns": { "jet": "https://static.oracle.com/cdn/jet/17.1.0/default/js", "css": "https://static.oracle.com/cdn/jet/17.1.0/default/css", "3rdparty": "https://static.oracle.com/cdn/jet/17.1.0/3rdparty" } "libs": { ... "cdnPath": "knockout/knockout-3.x.x" }
ビルドまたは提供後、
main.js
ファイルのrequire
ブロックには、次のURLが(その他すべてのベース・ライブラリとモジュールのURLとともに)挿入されます。"knockout": "https://static.oracle.com/cdn/jet/17.1.0/3rdparty/knockout/knockout-3.x.x"
-
CDNのシナリオ3: アプリケーションでOracle以外のCDNにあるライブラリにアクセスする必要がある場合は、
path_mapping.json
ファイルを更新して、独自のCDNエンドポイントおよびライブラリ定義を指定します。バンドル構成スクリプトを使用するかどうかによって、次のように、CDN名とエンドポイントURIを
cdns
定義に追加します。バンドル構成スクリプトを使用してライブラリとモジュールをロードする場合:
"cdns": { "jet": { "prefix": "https://static.oracle.com/cdn/jet/17.1.0/default/js", "css": "https://static.oracle.com/cdn/jet/17.1.0/default/css", "config": "bundles-config.js" }, "3rdparty": "https://static.oracle.com/cdn/jet/17.1.0/3rdparty" "yourCDN": "endPoint to your own CDN" }, ...
または、(バンドル構成スクリプトを使用せずに)ライブラリとモジュールを個別にロードする場合:
"cdns": { "jet": "https://static.oracle.com/cdn/jet/17.1.0/default/js", "css": "https://static.oracle.com/cdn/jet/17.1.0/default/css", "3rdparty": "https://static.oracle.com/cdn/jet/17.1.0/3rdparty", "yourCDN": "endPoint to your own CDN" }, ...
その後で、ライブラリのリストにライブラリ・エントリを次のサンプルのように定義します。
"yourLib": { "cdn": "yourCDN", "cwd": "node_modules/yourLib", "debug": { "src": "yourLib.js", "path": "libs/yourLib/yourLib.js", "cdnPath": "yourLib/yourLib.js" }, "release": { "src": "yourLib.min.js", "path": "libs/yourLib/yourLib.min.js", "cdnPath": "yourLib/yourLib.min.js" } },