オブジェクトのロードはいつ実行されるのか?
World WideのLANSA技術フォーラムに投稿されたトピックと、日本のお客様からのお問い合わせへの回答の中から、皆様にお役に立つLANSAの開発テクニックやトラブルシュートに関する情報をご紹介します。
質問
フォームやWebページにDefine_Comされたオブジェクトは、どのタイミングでローディングされますか?
回答
Define_Com Reference(*Static)が指定されているコンポーネントは、オーナーコンポーネントがロードされるタイミングでロードされます。
これは、フォームもWebアプリケーションも同じですが、Visual LANSA Webの場合、Define_Com Reference(*Static)のコンポーネントを、並列処理によりロードします。
※ 並列処理は、シングルスレッドでは無いということです。同時という意味ではありません。
オーナーコンポーネントで確実に使用されるコンポーネントの場合、Reference(*Static)を指定することで、必要なオブジェクトを事前ロードするので、効率の良いロードが行われます。
Define_Com Reference(*Deferred)が指定されているコンポーネントは、Define_Comの行で*NULLに設定された後、そのコンポーネントがロジック内で使用されたタイミングで(Set_Refを明示的に書かなくても)ロードされます。
ロードはシングルスレッドで実行されるため、ロードが完了するまで、ブラウザーはフリーズ状態となり使用できません。
オーナーコンポーネント内で、必ずしも使用されるとは限らないコンポーネントに対して、Reference(*Deferred)を指定することで、オーナーコンポーネントの初期ロード時の負荷を軽減できます。
Define_Com Reference(*Dynamic)が指定されているコンポーネントは、Define_Comの行で*NULLに設定された後、Set_Refコマンドにより、コンポーネントへの参照が行われたタイミングでロードされます。
ロードはシングルスレッドで実行されるため、ロードが完了するまで、ブラウザーはフリーズ状態となり使用できません。
これは、Reference(*Deferred)と同じ動きになります。
有償の「LANSAテクニカル・ホットライン・サービス」をご契約いただければ、過去データベースの検索から今回ご紹介した以外の技術情報を探すことも出来ます。 「LANSAテクニカル・ホットライン・サービス」のご契約についてはお問い合わせフォーム(https://www.lansa.jp/inquiryform/)よりお問い合わせください。