2015-12-14 9 views
11


Heatmaps.jsを使用してすべてのユーザーのクリックを表示するヒートマップをPatrick Wiedが実装しています。ヒートマップは、各要素の「データポイント」のコレクションからロードされます。それはSelectorator.js - ページ上のすべての非表示要素のセレクタ

問題DESC:


....ロードに時間がかかりすぎる各データポイントは、ページ上のX、Y座標と セレクタ(selectorator.jsを使用して取得)HTML要素のを有しています。 現在、私は各ページに約5kポイントを得ています。 隠し要素のヒートマップを表示しないように、いくつかの要素が隠されていないかどうかを確認する必要があります。

element = $(data.points[i].Element); 
element.is(":hidden")) 

をが、これは非常に長いすべてのそれらの点を確認するのに約7秒かかります:

現在、私は使用しています。 私は、この問題を避ける/最適化する方法を尽くしました。

データポイントの詳細:

Element: #pageData > tbody > tr:eq(3) > td:eq(4) > a:eq(0)
Y:0.6546159
X:0.4444231

疑似スクリプトフローDESC:

FOREACH(point in allDatapoints) 
{ 
... 
    calculation of some parameters needed to show on heamapat 
... 
    if (point.element.is(":hidden")) 
    { 
    continue; 
    } 
    pointsToDisplay.push(point) 
} 

私はまた、すべての隠された要素のセレクターを取得しようとしましたが、selectorator.jsでGetSelector()、その後、ちょうど行きましたその配列を介してしかし、それはほぼ同じ時間がかかるis(:hidden)機能。

これは意味があると思います。

enter image description here

enter image description here

事実:要素の取得セレクタは少し時間がかかるかもしれませんが、逆のプロセスは、(セレクタに基づいて取得し、要素)ほとんどの時間を要します。 - >隠された要素のセレクタの配列を送信して、それらをフィルタリングするだけでははるかに高速になるわけではありません。

+0

編集ありがとうございました。 @TotaloDotoNeto。 – Anymoify

+0

プロファイラを実行して結果を投稿しますか?たぶんそれは何をすべきかについてのいくつかの洞察力を与えるでしょう – epoch

+0

プロファイルのおかげで、それは私の選択ではあなたのページを殺している、あなたは、おそらく要素の状態を保存することによって、これを行う別の方法を考える必要がありますデータを収集するとき – epoch

答えて

1

selectoratorのソースを見ると、インデックスを使用してセレクタが生成されているようです。すなわちpageData > tbody > tr:eq(3) > td:eq(4) > a:eq(0)

は今、そのセレクタを経由して要素を取得することは非常に複雑に見えます(私は何かがそれを解析し、実際の要素を取得するためのセレクタを実行する必要があることを前提としています。

私はそれがあることをここに推測しています私がコメントで言ったように、プロフィールが本当に助けになるでしょう。

この正確な問題を解決しようとするのではなく、要素のdisplayプロパティを保存することはできますか? jQuery経由で確認してください。

手動チェックの例

element = $(element); 
while (element.tagName.toLowerCase() !== 'body') { 
    if (element.style.display === 'none') { 
     return false; 
    } 

    element = element.parentNode; 
    if (!element) break; 
} 
+0

ヒートマップが表示されているときにデータが収集されたときに表示される要素もあるので、 'display'プロパティを保存してもそれほど効果がありません。だから私は各ポイント(クリック)を独占的に通過する必要があるのです。 解析セレクタは、 'is。(" hidden ")'関数でそれほど時間がかかりません。 確認するには2kポイントを得ました。そして、.is( ":hidden"))条件がチェックされている間、それはページ上のすべての要素を通過し、およそ100である可能性があります。つまり、2000 * 100の条件評価を意味します。 – Anymoify

+0

要素が実際に隠されているかどうかを確認するために手動でDOMを実行してみてください。編集がすぐに投稿されました – epoch

+0

ありがとう、私はそれを試みますが、 hidden ")は、表示プロパティをチェックするだけではありません。しかし、要素の他の可能性を見えないように評価する。 0幅と高さのように。 https://api.jquery.com/hidden-selector/ – Anymoify

関連する問題