ColdFusionカフェテリア
SAMURAIZ

 

番外編1

作成日: 2010年3月8日
作成者:ハイミン・エンタープライズ(株) 千葉 博胤
佐藤 弘一
最終更新日: 2010年3月8日

番外編1

ColdFusionでの開発を行うにあたって、知らなくても目的のプログラムを書くことができますが、知っていることによって、パフォーマンスが向上したり、開発効率が向上したりするようなことがいくつかあります。今回はそういったものをいくつか紹介します。これらを知っているのと、知らないのでは小さなようで結構大きな差です。是非活用してみてください。
 

■CFSCRIPTは早い!

同じ処理を記述するのであれば、CFMLで記述するよりもCFSCRIPTで記述する方がパフォーマンスが優れています。
例えば、以下のような簡単なサンプルで実験してみるとわかりやすいです。
 
CFMLで記述した場合

<cfloop index="i" from="1" to="5000000">
    <cfset "a#i#" = i>
</cfloop>

処理時間:14.4秒(5回平均)
 
CFSCRITで記述した場合

<cfscript>
for(i=1; i LTE 5000000;i=i+1){
    "a#i#" = i;
}

</cfscript>

処理時間:10.9秒(5回平均)
 
※処理時間は、筆者ローカルPCでの実測値です。
あまり効果の出ないケースもありますが、変数の設定などはとりわけ効果が大きいようです。

 

■ArrayResizeの使い方

非常に大きな配列を使用する場合は、ArrayResize関数にて配列のサイズを指定すると、パフォーマンスの向上につながります。これを指定する目安は、要素数が500を超える場合です。それ以下の場合はあまり効果がないようです。

 

■クエリ結果をApplication変数へ保持すると

都道府県や元号などほとんど変わらないデータは、毎回データベースから取得することは非常に無駄です。そういったものは、Application変数に保持しておけば、ColsFusion Administratorで指定した期間、サーバーのメモリ空間から取得することが可能となり、パフォーマンス的に優れています。

<CFQUERY NAME="Application.QueryName" DataSource="DatasouceName">
    select cloumnName1,cloumnName2 from TableName
</CFQUERY>

あまり大きなデータを保持するとメモリを食うので注意しましょう。

 

■リストより配列や構造体の方が早い

リストは簡単で非常に使いやすいですが、あまり沢山のリストを使用する場合は、配列や構造体を使用する方がパフォーマンス的には優れています。

 

■クエリ結果は構造体と同じ扱いができる

知っている人は知っていることですが、意外に知らない人が多い記述方法です。クエリ結果を以下のような記述法で取得することができます。
クエリ名.カラム名[レコード番号]
これによって、クエリ結果の指定した行を取得することができます。

 

■コンポーネントの継承もできる

ColdFusionコンポーネントは継承をサポートしています。
<cfcomponent>タグのextends属性にて継承するコンポーネントを指定します。また、Superキーワードにて継承しているコンポーネントのメソッドを参照することができます。

 

■コンポーネントのセキュリティに気を使おう

<cffunction>タグには、access属性というものがあります。これを指定することによって、メソッドへのアクセスレベルを指定することができます。
Private:当該CFC内もしくは、それを継承しているCFC内でのみ使用できます
package:当該CFC内もしくは、それを継承しているCFC、パッケージ内の他のコンポーネントから使用できます
Public:全てのColdFusionページから使用できます
Remote:ローカルまたは、リモートから使用することができます
適切なアクセス属性を指定して、セキュリティを向上させましょう。

 

■接頭辞を活用しよう

変数の表記に関して、接頭辞を使うようにしましょう。
 
・コードの視認性が向上します
一目でどのような種類の変数かわかるので、コードを見た時に非常にわかりやすくなります。
 
・パフォーマンスが向上します
ColdFusionが変数を検索する場合、接頭辞がない場合は以下の順序で検索します。
1.関数ローカル (UDF および CFC の場合のみ)
2.スレッドローカル (スレッド内の場合のみ)
3.Arguments
4.Variables (ローカルスコープ)
5.Thread
6.CGI
7.Cffile
8.URL
9.Form
10.Cookie
11.Client
体感できるほど早くなるわけではありませんが、ちりも積もれば。。。ということで、接頭辞の指定はするようにしましょう。

 

■cfelseifよりcfswitch/cfcase

条件分岐にて、多数の<CFIF><CFELSE>タグを使用するよりも、<CFSWITCH><CFCASE>タグを使用する方がパフォーマンスが優れています。

 

■マッピングも有効的に

ColdFusionのマッピングを活用しましょう。
マッピングを活用することで様々なメリットがあります。例えば、ヘッダーなどの共通モジュールをインクルードするとき、以下のような記述を行います。

<CFINCLUDE TEMPLATE="common/header.cfm">

あるフォルダに対してcommonという論理パスを指定しておきます。そうすることによって、このヘッダーを埋め込む

タグの記述は、どの階層のプログラムに対しても同じ記述で済みます。
 また、マッピングの設定を変更するだけでheader.cfmの場所をどこにでも移動できるので、将来的にフォルダ構成が変わっても心配いりません。

■さいごに

今回紹介したものは、ほとんどがマニュアルに載っている内容です。マニュアルを隅々まで読み込むのはなかなか大変ですが、知っていると便利な内容が結構あります。中堅やベテランのCF技術者の方も、一度読み直してみると新たな発見があるかもしれません。

 

ColdFusionの各種情報の配信


最新情報
■2022/12/14 〜
ColdFusion 基礎プログラミング
記事一覧(随時更新)

■2022/6/28
Adobe ColdFusion 2021
インストール セットアップ情報
CFサーバーのインストール

■2019/11/27
『ColdFusion 実験室』
実験7

■2019/11/27
Adobe ColdFusion 2018
インストール セットアップ情報
CFサーバーのインストール

■2017/6/26
『ColdFusion 実験室』
実験6

■2017/3/27
ColdFusion 2016 対応
インストール セットアップ情報
CFサーバーのインストール
CFビルダーのインストール

■2016/9/20
『ColdFusion 2016 リリース
Enterprise Edition 活用資料』
記事一覧

■2016/3/30
『ColdFusion 実験室』
実験4、実験5

■2015/8/10 〜
『ColdFusion クリニック』
記事一覧(随時更新中)

教材プログラム単体販売


ColdFusionユーザーグループ
ColdFusionユーザーグループ
Copyright 2012 Samuraiz Corporation. All Rights Reserved.