2011-06-28 4 views
2

Openlayersを使用してマップを表示するDrupal Webサイトを作成しました。これらのマップの1つに、ユーザーがマップに表示されているデータを動的に変更するために使用できる「フィルタ」がいくつかあります。データは各国のバブルとして表示されています。バブルはOpenlayersのAPIを使用して描画されます。フィルターが選択されている間、かなりの量の計算がシーンの後ろに行きます。私は長い実行ループを避けるためにsetTimeoutを使用しました。フィルタは正常に動作します。ユーザーがリンクをクリックして別のページに移動しようとすると、いくつかのフィルターがクリックされた後、IE7とIE8で次のエラーが表示されます。 -IE7とIE8で別のページにナビゲートしようとしているときに「このスクリプトの実行を停止する」エラー

"このスクリプトの実行を停止します?

実行し続けると、コンピュータが応答しなくなることがあります。

このエラーは他のブラウザには表示されず、リンクがクリックされるまでIE7,8では表示されません。この点に関するポインタは高く評価されます。

更新:問題はOpenLayersのイベントキャッシュにありました。 OpenLayersのウィンドウアンロードイベントでイベントキャッシュがクリアされ、IE7とIE8でスタックされていました(なぜそうはわかりません)。これまでは、通常のリンクをクリックしたときにOpenLayers.Event.unloadCache()を呼び出すことで、ユーザーが別のリンクをクリックしたときに問題を解決できました。

+0

ページへのリンクを置く場合、私たちはコードに見ることができます。 – Rodrigo

答えて

0

クライアントスクリプトを最適化する必要があります。回答を参照してください。here.

+0

ご返信ありがとうございます。私はすでにその議論をチェックしていた。また、Remy Sharpが推奨するツールを確認しました。しかし、それから多くを得ることができませんでした。私の主な問題は、リンクがクリックされるまでメッセージが表示されないため、問題を引き起こすコードを見つけることができないことです。 – Abhijit

5

jQueryは非常にリソースが高くなる可能性があります。以下にリンクされている記事では、jQueryアプリケーションのパフォーマンスを向上させるための10の良いアドバイスを提供しています。私にとって最も便利なのは、$ .each()をlopsの伝統的なものに置き換え、広範なDOM構築をjqueryテンプレートに置き換えることでした(1ヶ月前に同じ問題がありました)。また、クラスの代わりにIDを使用したり、セレクタ、セレクタキャッシングなどのコンテキストを与えることもできます。

このリストは、アドバイスに「有用性」という独自の基準を使用して並べられています。

  1. 10 ways to instantly increase your jquery performance

  2. improve your jquery 25 excellent tips

  3. 10 advanced jquery performance tuning tips from paul irish

  4. 8 jquery performance tips

+0

ありがとうございます。私は多くの$ .each()を持っています。それらを置き換えて、私が得たものをあなたに教えてくれるでしょう。 – Abhijit

関連する問題