トップ回答者
JavaScriptのWindow.Openが遅い

質問
-
直接ASP.NETに関係ないのですが、ASP.NETで開発しているので、質問をしたいと思います。
JavaScriptの「window.Open」を実行したときにウィンドウの表示が遅くなることがあります。
たとえば、
ボタンコントロールのOnClientCilckプロパティに"window.open("SearchWin.htm", "search");"と
ウィンドウオープンのスクリプトを割り当て、実行し、ボタンコントロールをクリックすると、"SearchWin.htm"の
表示が遅いときがあります。
原因を調べてみたら、IEをたくさん起動した状態で、 window.openの第2引数にウィンドウ名を明示的に
指定したスクリプトを実行すると遅くなるというのがわかりました。
第2引数に"_blank"とした場合は、遅くはなりませんでした。
きっと、IEの中で同じtargetをもっているウィンドウを探しているため遅いのだと思いますが、この認識で
正しいのでしょうか?
※ちなみに、IE以外のウィンドウ(メモ帳等)を多く起動しているときは、特に遅くなりませんでした。
よろしくお願いします。
回答
-
確かに、targetに何か指定すると、Windowハンドルを検索する処理が入るので、
その分、重くなるというのはあると思います。
後は、WindowをOpenした後、そのWindow内にあるコントロールにフォーカスを当てたりする処理が入っていたり、
また、ポップアップブロックを設定できるブラウザの場合は、そのチェック処理が入ったりするので
これらをすべて総合して、Windowの開きが重いということがあるかもしれません。
(微々たるものだとは思いますが・・・)
また、IE7のように、タブを対応するようになると、新規Windowを、Windowではなく、
新しいタブで表示することもできるので、ブラウザ側で、これらの判定処理が入る分、
若干重いというのはあるかもしれません。
後は、ここで言う「SearchWin.htm」のHTML量が多すぎるとか、そういったことはございませんか?
いろいろと情報を探したのですが、決め手になる情報がありませんでした。
なので、上記は、あくまで推測論になってしまいますが、もしできるのであれば、
setTimeoutを駆使して、targetがあるときと、ない時で計測してみては如何でしょうか?
また、Window.Openだけではなく、a href で、targetを指定した場合も重いのか?も見て頂ければ、
ブラウザ側の問題なのか、または、JavaScriptや自分が作ったソースコードが悪いのか
ある程度は、判断できると思います。
推測論で申し訳ございませんが、ご参考になれば幸いです。
すべての返信
-
確かに、targetに何か指定すると、Windowハンドルを検索する処理が入るので、
その分、重くなるというのはあると思います。
後は、WindowをOpenした後、そのWindow内にあるコントロールにフォーカスを当てたりする処理が入っていたり、
また、ポップアップブロックを設定できるブラウザの場合は、そのチェック処理が入ったりするので
これらをすべて総合して、Windowの開きが重いということがあるかもしれません。
(微々たるものだとは思いますが・・・)
また、IE7のように、タブを対応するようになると、新規Windowを、Windowではなく、
新しいタブで表示することもできるので、ブラウザ側で、これらの判定処理が入る分、
若干重いというのはあるかもしれません。
後は、ここで言う「SearchWin.htm」のHTML量が多すぎるとか、そういったことはございませんか?
いろいろと情報を探したのですが、決め手になる情報がありませんでした。
なので、上記は、あくまで推測論になってしまいますが、もしできるのであれば、
setTimeoutを駆使して、targetがあるときと、ない時で計測してみては如何でしょうか?
また、Window.Openだけではなく、a href で、targetを指定した場合も重いのか?も見て頂ければ、
ブラウザ側の問題なのか、または、JavaScriptや自分が作ったソースコードが悪いのか
ある程度は、判断できると思います。
推測論で申し訳ございませんが、ご参考になれば幸いです。
-
こんにちは。中川俊輔 です。
けろ-みおさん、大変参考になる回答ありがとうございます。
bs-factoryさん、フォーラムのご利用ありがとうございます。
問題解決に大変参考になる回答のようでしたので、
勝手ながらけろ-みおさんの回答へ回答済みチェックをつけさせていただきました。
追加の質問等あればぜひ投稿してください!
回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
問題解決につながる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。bs-factoryさんはチェックを解除することもできますので、ご確認ください。
それでは!