2

AJAXを使用してhtmlfileをにロードしたいので、これに対してjsMath<div> を実行する必要があります。私がinnerHTMLでこれまでに行ったことはすべて、1つか2つの段落であり、おそらく表や画像です。派手すぎるものはありません。

あらゆる種類の複雑なcssフォーマットを使用してinnerHTMLを外部25kファイルに設定すると、どのような潜在的な問題が発生する可能性がありますか?(jsMathのおかげで)これを行う他の方法は考えられませんが、制限があるかどうかを知る必要があります。

前もって感謝します。

-デイブ

4

6 に答える 6

4

ブラウザー固有のサイズ制限についてはわかりませんが、65536 よりも長い文字列を割り当てると、Chrome はそれを多数elem.childNodesに分割するため、これらのノードをループして連結する必要がある場合があります。

以下の抜粋を Chrome Dev Tools で実行します。160k の文字列を作成しますが、theDivElement.childNodes[0]65536 文字にクリップされます。

var longString = '1234567890';
for (var i = 0; i < 14; ++i) {
  longString = longString + longString;
}
console.log('The length of our long string: ' + longString.length);
var elem = document.createElement('div');
elem.innerHTML = longString;
var innerHtmlValue = elem.childNodes[0].nodeValue;
console.log('The length as innerHTML-childNodes[0]: ' + innerHtmlValue.length);
console.log('Num child nodes: ' + elem.childNodes.length);

結果: (Chrome バージョン 39.0.2171.95 (64 ビット)、Linux Mint 17)

The length of our long string: 163840
The length as innerHTML-childNodes[0]: 65536
Num child nodes: 3

しかし、Firefox では、innerHTMLコンテンツを多くのノードに分割しません: (Firefox バージョン 34.0、Linux Mint 17)

"The length of our long string: 163840"
"The length as innerHTML-childNodes[0]: 163840"
"Num child nodes: 1"

childNodesそのため、ブラウザによって処理が異なり、おそらくすべての子ノードを反復処理して連結することを考慮する必要があります。innerHTML( 100k を超える HTML エンコード文字列をエスケープ解除しようとしたため、これに気付きました。)

実際、Firefox では、上記innerHTML-childNodes[0]をループすることで、長さ 167 772 160 の を作成できますi < 24。しかし、この長さを超えると、InternalError: allocation size overflowエラーが発生します。

于 2014-12-18T11:33:55.773 に答える
1

これを技術的に行うことを妨げるものは何もありません。最大の問題はページの読み込み時間です。データが読み込まれていることを示す何らかの表示を含めるようにしてください。そうしないと、何も起きていないように見えます。

于 2009-12-24T01:04:36.807 に答える
1

私が現在取り組んでいるアプリケーションでは、innerHTMLを30k以上の文字列に設定するブラウザで問題は発生していません。(制限が何であるかわからない)

于 2009-12-24T01:05:13.273 に答える
0

このタイプのものにある唯一の種類の制限は、純粋に帯域幅とプロセッサに関連しています。ajaxリクエストに低いタイムアウトが設定されていないことを確認する必要があります。また、一部の低速コンピュータでテストして、メモリの問題があるかどうかを確認する必要があります。一部の古いブラウザは、メモリ内の大きなオブジェクトをかなり容赦しない場合があります。

于 2009-12-24T01:06:18.063 に答える
0

制限は、Web サーバーから設定されたダウンロード制限である可能性が高くなります。通常、数 MB です。いくつかの Web フレームワークでは、このサイズを大きくすることができますが、バッファ サイズが大きくなることを意味するため、単純にそれを行うことはできません。これは良いことではありません。

于 2009-12-24T01:40:52.280 に答える
0

おそらく、dynatrace ajaxspeed tracerなどのツールを使用してこれをプロファイリングし、innerHTML を非常に大きな値に設定するとパフォーマンスにどのような影響があるかを理解する必要があります。新しいコンテンツを iframe に配置したり、コンテンツのページ番号を付けたりするなどの別のアプローチと比較したい場合があります。

于 2009-12-24T01:13:26.397 に答える