トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     for文は重たい?
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
長谷川
Åê¹ÆNo.14420
投稿日時: 2005-1-23 19:50
常連
居住地: 岐阜県
投稿: 84
使用環境:
OS[Windows XP]
ブラウザ[IE]
[Flash MX]
[Dreamweaver MX]
[Fireworks MX]
[FreeHand MX]
Re: for文は重たい?
 そうですね遅いマシンじゃ動かなくなってしまいますね。なので1からプログラム設計をやり直しました。そのため以前のプログラムが手元に無い訳です。計画性が無いため、この設計でいいかな?と思っていた物でも作っている最中に仕様が追加されたり変更を言い渡されるため今回の失敗が起きてしまいました。現在ではその処理は問題なく動くようになっています。
森 巧尚
Åê¹ÆNo.14419
投稿日時: 2005-1-23 19:36
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: for文は重たい?
もし「余分に処理を付け加えた」部分が大きな原因でないならば、
引用:
同じ処理をfor文にまとめた時にエラーが出たので同じ処理であり、大した処理をさせていないようなつもりにはなるということはありませんでした。

ということなので、「for文にまとめればエラーが出るけれど、まとめなければエラーが出ないというほど、ギリギリの大した処理」をさせているわけで、そのつもりがあるわけですから、プログラムの設計あたりから見直したほうがいいかも知れませんね。
今はたまたまエラーが出ていないけれど、遅いマシンだとエラーが出るかもしれないわけですから。


----------------
森 巧尚
http://www.ymori.com

長谷川
Åê¹ÆNo.14417
投稿日時: 2005-1-23 19:17
常連
居住地: 岐阜県
投稿: 84
使用環境:
OS[Windows XP]
ブラウザ[IE]
[Flash MX]
[Dreamweaver MX]
[Fireworks MX]
[FreeHand MX]
Re: for文は重たい?
 同じ処理をfor文にまとめた時にエラーが出たので同じ処理であり、大した処理をさせていないようなつもりにはなるということはありませんでした。そのプログラムが手元に残っていないので何とも言えないのですが、for文で重たくならないとしたらfor文にした際にまとめるために余分に処理を付け加えていたかもしれません。
空野大二郎
Åê¹ÆNo.14388
投稿日時: 2005-1-22 3:41
職人
居住地: 愛知
投稿: 389
使用環境:
 XP:Home
FlashMX
IE6.0+FlashPlayer7,0,19
CPU:Pentium4 2.26GHz
メモリ:1,024MB
Re: for文は重たい?
 まいど。

 連番スクリプト生成関数を作れば、われわれでも確認できますよ。
1:_rootの1フレーム目、フレームスクリプトに記述
//連番スクリプト生成関数
this.writeScript = function(theNum_str) {
	var i = theNum_str;
	for (i = theNum_str; i < theNum_str+100; i++) {
		var theScript = 'count+=' + i + ';';
		trace(theScript);
	}
};
//フレームレートを1?8くらいに落として実行。(桁抜けが起こる)
startHun_str = 0;//スタート直後の百桁
maxHun_str = 10;//最大の百桁
this.onEnterFrame = function() {
	if (startHun_str < maxHun_str) {
		this.writeScript(1+(100 * startHun_str));
	} else {
		delete this.onEnterFrame;
	}
	startHun_str++;
};
this.stop();

2:trace()関数で出力されたスクリプトをすべて選択し、貼り付ける。
count+=1;
count+=2;
 |
count+=1000;
 (出力では「すべてを選択」メニューがないので、先頭
左クリック&行末[shift]+左クリックですべて選択しましょう。)
引用:
ひろゆきさんは書きました:
実際、count+=1; から count+=1000; までを順に書いた処理と
for文で書いた処理で試してみてはいかがですか?
比較をするなら、同じ処理をさせないと。


 50万回くらいのループだとはっきりと差が出るかもしれませんが、
「出力パネル」の最大桁数は1万行なので、サンプルの「スタート
直後の百桁」、「最大の百桁」を書き換え、徐々にふやして差を
確認してください。


----------------
空野 大二郎 アニメーター作家
桜の道

森 なおき
Åê¹ÆNo.14386
投稿日時: 2005-1-22 2:40
モデレータ
居住地: 福岡(心は大阪)
投稿: 527
使用環境:
:MacOSX10.6.8
:FlashCS5.5
Re: for文は重たい?
ああ、バグというのはプログラムした側のミスという意味での
バグですね。了解しました(^^;


----------------
な お き
Dev.:MacOSX+FlashCS5.5
View:---

森 巧尚
Åê¹ÆNo.14385
投稿日時: 2005-1-22 2:37
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: for文は重たい?
引用:

すんません。これってX=1としてるから
条件をいつまでも満たさないだけでは?

そうです。わざと条件をいつまでも満たさないようにして、エラーが必ず出るようにしている「よくあるバグの例」ですよ。

ループの内側がこんな短ければすぐ気がつきますが、長い場合ついうっかり
「ループ用の変数なのに、別の処理に使ってしまっていてループが終わらなくなる」
ということが起こります。たいしたループじゃないつもりなのにいつまでたっても
終わらないということがあるよという例です。

for文を使うときの注意点ですね。


----------------
森 巧尚
http://www.ymori.com

森 なおき
Åê¹ÆNo.14384
投稿日時: 2005-1-22 2:18
モデレータ
居住地: 福岡(心は大阪)
投稿: 527
使用環境:
:MacOSX10.6.8
:FlashCS5.5
Re: for文は重たい?
引用:

森 巧尚さんは書きました:
ただ、変数処理にバグがあって、
for (X = 1; X <= 3; X++) {
	count += X;
	X = 1;
}

のような構造になっていると延々と処理し続けることになってエラーが出ますが、それはバグですしね。


すんません。これってX=1としてるから
条件をいつまでも満たさないだけでは?
なんか勘違いしてますでしょうか?


----------------
な お き
Dev.:MacOSX+FlashCS5.5
View:---

ひろゆき
Åê¹ÆNo.14383
投稿日時: 2005-1-22 1:57
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: for文は重たい?
森さんも書かれていますが、for文だから重くなるというのではなくて、
「for文で書けば、数行でたくさんの処理を容易にさせることができるので、
大した処理をさせていないようなつもりになる」ことが問題なのではないでしょうか?

つまり、
count+=1;
count+=2;
count+=3;
count+=4;
count+=5;
count+=6;
count+=7;
count+=8;
count+=9;
count+=10;
count+=11;
count+=12;
count+=13;
count+=14;
count+=15;
count+=16;
count+=17;
count+=18;
count+=19;
count+=20;
count+=21;
count+=22;
count+=23;
count+=24;
count+=25;
count+=26;
count+=27;
count+=28;
count+=29;
count+=30;
だと、重そうな処理をさせちゃったな。と感じやすいので、
実際に時間がかかっても、そりゃそうだ。と思うわけですが、
これを、
for(X=1;X<=30;X++){
count+=X;
}
とすれば、これっぽちのことで、なんで重いんだよ。と。

まるで、for文を使ったので重くなったかのような錯覚に陥っているのではないかと。

実際、count+=1; から count+=1000; までを順に書いた処理と
for文で書いた処理で試してみてはいかがですか?
比較をするなら、同じ処理をさせないと。

for文で処理した場合、重く感じるでしょうね。
前者の処理では、途中でスクリプトを書くことすらやめちゃいますから、
感じることすらできないかも。
軽い重いを感じる機会に遭遇しやすいのは、後者の処理の方でしょう。

森 巧尚
Åê¹ÆNo.14379
投稿日時: 2005-1-21 23:05
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: for文は重たい?
引用:
今まで通りfor文を使わずひたすら羅列してたほうが一番パソコンに優しいみたいですね。

正確に言うと、for文が悪いわけじゃないですよ。「一度にものすごくたくさんの処理を行うこと」が問題で、
それが15秒以上もかかってしまうときにメッセージが出るわけです。

もしとても多くの処理しなければいけない場合は、1フレームで一気に行ってしまわないで、
途中で一回解放してイベント処理に戻してやるような設計にすればいいわけです。
「ムービー内のスクリプトが原因でMacromedia Flash Player 7の実行速度が遅く・・・」

for文の中身が軽ければ、普通のループぐらいは大抵なんともないですよ。
ただ、変数処理にバグがあって、
for (X = 1; X <= 3; X++) {
	count += X;
	X = 1;
}

のような構造になっていると延々と処理し続けることになってエラーが出ますが、それはバグですしね。


----------------
森 巧尚
http://www.ymori.com

長谷川
Åê¹ÆNo.14378
投稿日時: 2005-1-21 22:32
常連
居住地: 岐阜県
投稿: 84
使用環境:
OS[Windows XP]
ブラウザ[IE]
[Flash MX]
[Dreamweaver MX]
[Fireworks MX]
[FreeHand MX]
Re: for文は重たい?
 返信ありがとうございます。今日学校の先生に聞いてみたところ同じような回答が返ってきたのでなるほどっと思いました。今まで通りfor文を使わずひたすら羅列してたほうが一番パソコンに優しいみたいですね。

 Flash上の仕様が少し分かった気がするので良かったと思います。色々な事を教えて頂きありがとうございました。
(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops