| 先日Softimageのスクリプトの事で調べ物をしていたら、Softimageのスクリプト言語での処理速度を比較するという面白い記事を見つけました。(myaraさんのサイト、他のスクリプト記事も濃くて面白いです^^), 今までスクリプトの処理速度は気にした事が無かったので「VBS、意外と速いんやなぁ〜」と興味深く読んでました。ただこの2年間くらいはPython縛りでプラグイン作成を統一していた自分にとっては、Pythonの速度比較が気になるところです。という訳で、今回は上記記事を参考にSoftimageのスクリプト言語での速度比較をしてみました。, 題材にしたのは、上記記事にあったXSIBaseのスクリプト。処理の内容はというと、, ・選択しているポリゴンオブジェクトを取得 ・2つのポリゴンの法線ベクトルの差が、指定した値以上であればエッジを選択, というような感じです。今回の速度計測で使用したオブジェクトは、恒例のスタンフォードドラゴンをリダクションしたものを利用しています。(そのままだと処理時間がかかりすぎたので…。), まずはこれをmyaraさんの記事に基づいて最適化したものをベースで利用しています。最適化の概要は「option explicitを利用した宣言の徹底」と「特定のエッジを発見した時に、その都度選択を行う処理を止め、一旦配列に保存して最後に一括選択」が大きなところです。このスクリプトで、処理時間的には下記の通りとなりました。, さて、上記で最適化したVBスクリプトを他の言語にも移植していきます。今回はJスクリプト、Python、あとC++でdll化したものも用意してみました。どれも処理内容は同じものです。で、結果はこちら。, Python遅いっ!圧倒的に処理時間がかかっています。これはどういうことなんでしょう…。処理の流れは同じはずなんですが…。 ・全てのエッジを検証。エッジに隣接しているポリゴン(neighbor polygon)が2つ以上あるか判定 ]アイコンを表示64: [i]アイコンを表示, 標準ボタン0: 第 1 ボタン256: 第 2 ボタン512: 第 3 ボタン768: 第 4 ボタン, 戻り値ポップアップウィンドウ終了時にクリックしたボタンを示す整数値1: [OK]2: [キャンセル]3: [中止]4: [再試行]5: [無視]6: [はい]7: [いいえ]-1: タイムアウト, 指定のアイコン種類によっては、ポップアップ表示時にサウンドを出力する。VBScriptのMsgBox関数は、Popupで代替えが可能なはず。, 解説wsfにVBScriptのコードを記述して、JScript側からVBScriptを呼び出す。, サンプル今更だが JScript で VBScript の Inputbox を使う - Qiita, 解説wscにVBScriptのコードを記述して、GetObjectで呼び出して使用する。, 64bitのWindowsを使用している場合、32bit版のcscript/wscriptを使用しないとエラーになる。(特別なにもしない場合、64bit環境では64bit版を使用するため、エラーになる), タイトルが"Explorer ユーザープロンプト"になる。質問の前に"スクリプト プロンプト:"の表示が増える。表示位置が画面中央ではないことがある。プロンプトの起動が遅い。, InputBox関数は、クロスサイトスクリプティング対策で正常に実行できずエラーとなる。, cscript.exeのWSHエンジンでのみ使用可能です。wscript.exeでは、エラーとなる。cscript.exeでは、入力ストリームの文字列を返す。, ※fileout.txtを事前に準備する必要あり fileout.txtの内容をコマンドプロンプトに出力します, すいません。教えて下さい。『ScriptControlを使用する』で64bit環境で動かしたいのですが、よく分かりません。『%windir%\SysWoW64\cmd.exe』をどのように使えばよいのでしょうか。上のコードの一番上に入れるのでしょうか?よろしくお願いいたします。, shoshiminpapaさん遅くなりましたが、『ScriptControlを使用する』の使用例を3例追記しました。ご確認ください。, 今更だが JScript で VBScript の Inputbox を使う - Qiita, 「Microsoft JScript 実行時エラー: オートメーション サーバーはオブジェクトを作成できません。」エラーとなる, 「ファイル名を指定して実行」などで上記コマンドを実行して32bitコマンドプロンプトを表示する, 64bitコマンドプロンプトで「%windir%\SysWoW64\cmd.exe /C cscript inputbox2.jse」など、32bitコマンドプロンプト経由で実行する. strTitle ブログを報告する, http://myara.blog.fc2.com/blog-entry-71.html. 関数ret = sh.Popup(strText, [nSecondsToWait], [strTitle], [nType]), nSecondsToWaitポップアップウィンドウを閉じるまでの待機時間(秒)0:無期限, nTypeポップアップウィンドウに表示するボタンとアイコンの種類ボタン種類とアイコン種類と標準ボタンを加算した値を指定する。, ボタン種類0: [OK]ボタンを表示(クローズボタンは[OK])1: [OK]と[キャンセル]ボタンを表示(クローズボタンは[キャンセル])2: [中止]と[再試行]ボタンを表示(クローズボタンなし)3: [はい]と[いいえ]と[キャンセル]ボタンを表示(クローズボタンは[キャンセル])4: [はい]と[いいえ]ボタンを表示(クローズボタンなし)5: [再試行]と[キャンセル]ボタンを表示(クローズボタンは[キャンセル]), アイコン種類0: アイコンなし16: [Stop]アイコンを表示32: [? npmライブラリが多くてどれがいいのかわからない一番よく使われているnpmライブラリを知りたいJavaScript界隈のトレンドを知りたい 新しく開発を開始する時や、追加機能でnpmライブラリを取り入れたい時に、どのnpmライブ... ESLint:'$' is not defined. javascriptってsleepってないの?setTimeoutってよくわかんないしどう書けばいいの?なんでもいいからjavascriptでsleepしたいんだー!javascriptで開発していると、処理の途中でsleep(スリープ)し WSH(JScript)での外部入力関連まとめ. 2006年10月11日 JavaScript で Right 関数 ちょっとした WSHスクリプト を JScript で書いていた際に、 文字列を右側から指定文字数だけ取り出す関数がほしくなった。 そういえばC++で作ったdllはプラグイン形式で、他の言語はスクリプトの直接実行なので、その辺りが影響しているのかなと思い、他の言語もプラグイン化してみました。, うぅん速くなっているようですが、体感速度的には誤差程度の差しか無かったですね・・・。(マクロ的な使い方をしていれば、体感的に速くなる印象があるので、今回みたいなエッジをforでループと言う処理内容では結果が出にくいのかもしれません。), というわけで、今回の比較ではPythonが遅くて、VBスクリプトが速いという結果になりました。, 最近は時流に乗ってプラグイン制作では全てPythonで統一を考えていましたが、VBスクリプトを見直しました。よくよく考えるとSoftimage自体に入っているプラグイン自体の大半がVBスクリプトで書かれているので、そこで気づくべきでしたね。, Pythonの構文はシンプルで行数も少なく、アーティストには優しい言語だと思っているので、今後も使用を継続していくと思いますが、処理速度を求めるところはVBスクリプトで書くという選択肢は考えた方が良いかもですね。, あと最後に、今回使ったスクリプト・C++のソースはダウンロードできる形にしています。もし「Pythonはこう書いたら速くなるよ〜。」とかヒントがあれば、ぜひコメントいただければと思います。自分もその方が助かるので…。, Aquさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog (no-undef)エラーが出たReactでjQueryって使っていいの? Reactで構築していたシステムに、ふとjQueryを入れないと実現できないような要件が発生しまし... 読み込む外部JSファイルに値を渡したい代表的なやり方をいくつか紹介しますJS初心者向けの記事です