Rich UI メモリー管理

メモリー・リークを防ぐために、2 つのメモリー管理関数を使用できます。 メモリー・リークはアプリケーションの速度を低下させ、ブラウザーの異常終了の原因となることもあります。

この問題は主に、ウィジェットまたは組み込みハンドラーを関数内で宣言した場合に発生します。 これらの関数内宣言は、メモリーを実行時に割り振ります。関数が終了した後も、ユーザーがブラウザーのタブを閉じるまで、ブラウザーはメモリーをオペレーティング・システムに返しません。

それぞれのメモリー管理関数は、ブラウザーにメモリーの制御を返すことを要求します。ブラウザーは一般に、遅延後で、かつアプリケーションがまだ実行している間に、この要求を実行します。

関数は以下のとおりです。

これらの関数は、いずれも値を返しません。

上述の問題により影響を受ける場合は、以下のコーディング規則について考慮してください。
  • メモリー管理関数は、不要になった割り振り済みメモリーを返すために使用します。
  • 関数では、名前付きコンテナー (anonymous 宣言を組み込む名前付きウィジェット) にアクセスする場合にのみ anonymous 宣言を使用します。
    例えば、ユーザーがページ上のある領域を移動する際に表示されるボックスである、ツールチップを考慮してみましょう。 ツールチップ・プロバイダー は、表示されるボックスを返す機能であり、この機能のコードは以下のようになります。
    Function myProvider (widget any in) returns(Box) 
       return (new Box {children = [new Button{text = "Memory leak"}]});
    end

    この例では、ツールチップ・プロバイダーは、その機能の外部からは参照できないボックスを作成し、ボックスそのものには無名ウィジェットが組み込まれます。 ボックスを参照できないということは、ボックスまたはその無名の子をメモリー管理機能に渡すことができないことを意味します。

    この例での問題を避けるために、ツールチップ・プロバイダーの外部で以下のようにボックスを宣言します。
    myBox Box{};
    Function myProvider (widget any in) returns(Box) 
       myBox.children = [ new Button{text = "Problem solved"} ];       
       return(myBox);
    end
    アプリケーションの他の場所で、myBox をメモリー管理機能に渡すことができるようになりました。これについては以下の例で示しています。
    UtilLib.destroyWidgetChildren(myBox);
  • removeChild または removeChildren 関数を使用してウィジェットを DOM ツリーから除去した後に、それらのウィジェットに対して割り振られたメモリーを除去します。 それらの関数について詳しくは、『ウィジェットのプロパティーと関数』を参照してください。