3

スキミング?太字を読んでください。

なんてこった!私はいくつかの深刻なXMLクランチを行う必要があるWebアプリケーションを構築しています。

私は現在、jQueryを使用して大量のXMLドキュメントを解析および操作する関数を持っています。これにより、ブラウザのUIが最大60秒間ロックされますが、これは明らかに非常に不十分です。

ブラウザのUIを軽減するために、この操作をWeb Workerスレッドで実行したいので、私はWebWorkersを調べてきました。

Web Workerを使用してjQueryライブラリをインポートし、WebWorkerスレッド内からXMLを解析および操作できることを望んでいました。self.importScripts()
   できない: jQueryライブラリがウィンドウやフレンドへの参照を作成するため、Webワーカーはエラーをスローwindow is not definedます。これらはスレッドセーフではないため、Webワーカーのグローバル名前空間に存在しません。

私はたくさんのグーグルをしましたが、この主題に関する最近の情報を見つけるのに苦労しました。いくつかのハッキーな回避策とjQueryプラグインを見つけましたが、それらはすべて数年前のものであり、この比較的新しいテクノロジーの新しいソリューションがないことを望んでいました。
   (半)公式の「WebワーカーjQuery」は存在しますか?

Webワーカー内で実行する必要があるjQueryの代替であるXMLforScriptを見つけましたが、コードを書き直したくないので、特にjQueryソリューションを探しています。

importScripts()次のように呼び出す前に、Webワーカー内のjQueryのエラーを緩和するために、一連の偽の要素を作成しようとしました。

window={
    document:{
        createElement:function(){
            return {
                setAttribute:function(){} } } } };
    /* ... much more fake DOM */
    importScripts('jquery.js');

しかし、jQueryを満たすために巨大な人工DOMの作成に深く取り組む必要があることを認識しており、jQueryはXML解析のためにこれらのオブジェクトの一部に依存している可能性があるため、おそらく失敗と時間の浪費への道であると考えています(I jQueryがどのように機能するかを知るのに十分な知識がありません)。

誰か素敵な解決策はありますか?

そうでない場合は、脂肪の多い静的負荷インジケーターを作成して、シェナニガンには時間がかかること、およびWebアプリがクラッシュしたり、動作を停止したりしていないことを信頼して期待する必要があることをユーザーに警告します:D

熟考していただきありがとうございます。
  //追跡。

4

2 に答える 2

0

このメソッドのアイデアを使用できるはずです。これは、Blobを使用して Web ワーカーに元の dom へのアクセスを提供します。

アップデート

このおもちゃの例が示すようにDOM、ワーカーは実際に にアクセスできます

上記のステートメントはあからさまな嘘です (OP に感謝します)。アップデート II を参照

アップデートⅡ

OPが以下のコメントで正しく指摘しているように、与えられた例は不正行為です。あなたが JQuery から解放されることができるなら、私は非常に有能なxml for <script>ライブラリーを使用して xml 文書で SAX 処理を行う例を持っています。例をgithubに投稿しました。実行すると、結果が に書き込まれるconsoleので、1 つ開いておきます。

デモ用にここにコードをアップロードしました。

また、この SO の質問では、Web ワーカーと DOM にアクセスできないことについての詳細な議論が提供されています。

于 2013-10-24T12:20:08.510 に答える