この短いシリーズでは、いくつかの簡単な(そしてそれほど簡単ではない)方法を取り上げたいと思います。 Mendix アプリはより効率的に作成できます。理想的な結果は、可能な限り最短時間で機能を実行し、可能な限り少ないリソースを消費するアプリです。
いつも?
いいえ。
時々、 トレード・オフ の間に オプションは 読みやすく、メンテナンスしやすい または、より高度に最適化されたバージョンは 独創的, よ 効率的な しかし理解するのは難しい これは、将来的にコードを保守する必要があるあなたや他の開発者にとって問題となります。

これは、開発が進行中のとき、またはパフォーマンスの問題が調査されているときにチームが行う判断であり、不明瞭なコードの理解を促進するために、質の高いコメントやドキュメントが役立つ場合があります。
だから、 何かが頻繁に実行されるほど、可能性が高い 恩恵 from 効率性の向上5 分ではなく 10 分で実行するように最適化できるが、月に XNUMX 回しか実行されないアクションは、効率性の向上を求める際にあまり重視すべきではないでしょう。一方、XNUMX 日に何千回も実行されるアクションで XNUMX 秒の効率性の向上を実現することは、間違いなく優先度が高くなります。
ゴールデンオールディーズ
デザインのパターン Mendix 以前にも取り上げましたが、新人開発者やベテラン開発者が見逃してしまうこともあるため、もう一度確認する価値があります。
ループ・デ・ループ

ループを使用してマイクロフロー内のオブジェクトを作成または変更する場合 集める 同じタイプの新しい/変更されたオブジェクト リスト の三脚と コミット そのリスト 外側 ループ.
の代わりに:

以下を使用できます。

これは、 単一のコミット 1 つは Order オブジェクト用、もう 1 つはプロセスの最後に新しいオブジェクトと変更されたオブジェクトに使用される OrderUpdateAudit オブジェクト用です。 コミットはコストがかかる可能性がある それぞれでアプリがデータベースへのラウンドトリップを実行する必要があり、各ラウンドトリップにはオーバーヘッドが伴うため、コミットをまとめてバッチ処理するとラウンドトリップの回数が減り、オーバーヘッドも減ります。
集合体を飛ばしましょう!
その Mendix ランタイムは、あなたが書いたコードが少ないためにデータベースクエリを最適化するのに時間がかかりすぎます。例えば、マイクロフローでは、 取得アクティビティの直後に集計アクティビティをリストする:

これにより、 ランタイム 〜へ 単一のステートメントを実行する データベースに対して、Order の OrderValue の平均値を計算します。Order レコードはアプリにまったく取得されず、OrderList は実際には生成されません。これにより、実行が高速化されます。
ただし、生成されたリストを後で再利用することで、この最適化を破ることができます。

集計が実行された後、OrderListが再び使用されるようになりました(IteratorOrderループのデータソースとして)。これは、 Mendix 標準の動作に戻り、Retrieve を実行してすべてのレコードを OrderList にロードし、そのリスト内のレコードをスキャンして平均を計算します。

このような状況では、 速いです を実行する 検索します アクティビティ 2回 — 一度だけ 使用する集計 そしてもう一度 レコードリストを取得するこれは、この図に特に当てはまります。2 番目の Retrieve (現在は IteratorOrder ループのソース) は、計算された平均が適切な場合にのみ実行されるため、平均が低い場合はリストはまったく取得されません。
マイクロフローの代わりにナノフローを使用する

マイクロフロー 強力なコードアクションは、 Mendix 、ユーザーの Mendix クライアント。 ナノフロー ナノフローはマイクロフローと多くの点で同じ動作をしますが、マイクロフローと動作が異なる場合があります。大きな違いは、ナノフローは Mendix クライアント (ユーザーのブラウザまたはネイティブ アプリ) これにより、Nanoflow は同様の機能を実行する Microflow よりも効率面で大きな優位性を得ることができます。

このマイクロフローはユーザーインターフェースのボタンから呼び出され、表示されているオブジェクトを更新するビジネスルールを実装します。ボタンをクリックすると、 Mendix クライアントはサーバー上のアプリに戻り、マイクロフローを実行して結果をクライアントに返すように要求します。

このナノフローは同じことを行います。機能的にはマイクロフローとほぼ同じですが、操作全体がユーザーの Mendix これにより、クライアントからサーバーへの呼び出し、サーバー上でのコード実行、およびクライアントへの結果の返送は行われなくなります。これにより、ネットワーク トラフィックが軽減され、ユーザーの変更を実行するためにサーバーが中断されることがなくなります。
Nanoflow の使用は必ずしも良いアイデアではありません。Nanoflow がその機能の一部として Microflow を呼び出す必要がある場合、ネットワーク インタラクションとサーバー割り込みが発生するため、何も節約できない可能性があります。Nanoflow が複数の Microflow を呼び出す必要がある場合、または機能を実行するためにデータベースからさらにデータを取得する必要がある場合、Microflow の代わりに Nanoflow を使用すると逆効果になる可能性があります。