4

次のような多くのコードを使用するクラシックASPでいくつかのレガシーコードを編集しています。

pf "<div class=""span-6 last"" style=""margin-top:4px;"">"
pf "<div class=""clean-lightblue-left"" style=""margin-top:4px;"">"
pf "<span style=""float: left; margin-right: 0.3em;"" class=""ui-icon ui-icon-print""></span><a href=""#report"" name=""report"" id=""topic_report_download"">Topic Progress : <b>Download Report</b></a>"
pf "</div></div>"

この例では、pfは、基本的にresponse.write改行の場合と同じ効用関数です。

私はむしろこのようなことをしたいです:

...asp code
%> 
Regular HTML code here
<%
asp code...

私はaspを初めて使用しますが、コンテキストスイッチングについて聞いたことがあり、コストがかかる可能性があります。これらの2つのオプションのどちらがよりコストがかかりますか?

4

3 に答える 3

1

プレーンHTMLは、response.writeを介してHTMLをレンダリングするときに、1つがresponse.writeを実行してからHTMLをレンダリングするように2つのステートメントを実行するので良いと思います。しかし、HTMLコードを書くと、ブラウザで直接レンダリングされます。

于 2011-10-20T08:34:52.290 に答える
1

まず、あなたの具体的な例をまとめましょう。プレーンな文字列リテラルを運ぶ一連のResponse.Write呼び出しは、スクリプトコードの外部のコンテンツとして完全なHTMLを含めるよりも遅くなります。

この「コンテキスト切り替え」の考え方は、一部のドキュメント(またはおそらく歴史)での不幸な言い回しの結果として、少し誤謬です。ASPファイルは、を使用してスクリプトが解釈されたHTMLであると考える傾向があります<% script here %>。実際、ASPファイルはHTMLを含むスクリプトファイルです。%> content here <%(暗黙的>%および<%ファイルの最初と最後に)を使用してhtmlコンテンツを分離していると考えると、何が起こっているのかを簡単に推測できます。

ファイルを解析してpコード化すると、スクリプトエンジンで完全に処理可能なファイルが作成されます(「コンテキスト切り替え」はありません)。事実上、との間のコンテンツをバッファに%> .... <%送信するResponse.Writeの特別な形式になります。%><%違いは、バイトは元のASPファイルに表示されるとおりに逐語的に表示されるのに対し、標準Response.WriteはVBScriptからUnicode文字列を受け入れResponse.CodePage、バッファに入れるためにバイトのセットにエンコードする必要があることです。

したがって、「コンテキストスイッチング」は、実際にはスクリプトがバッファに書き込まなければならない回数にすぎません。HTMLに多数<% = someExpression %>あると、大量のバッファ書き込みが作成されます。

最近では、めちゃくちゃ大量のHTMLを生成していない限り(Doozerが言及している記事は10年前のものです)、バッファリングをオンにする必要があります。多くの書き込みのコストは非常に低いです。それらを減らすことは助けになりますが、VBScriptが文字列の接触を処理する方法にも問題がないわけではないことを覚えておく必要があります。

于 2011-10-21T12:23:13.627 に答える
0

パフォーマンスを向上させるためにこれらのASPのヒントを読む必要がありますが、具体的には#16を参照してください。

また、少量のスクリプトとHTMLを散在させると、スクリプトエンジンとHTMLが切り替わり、パフォーマンスが低下します。

少なくとも。Response.Bufferがtrueに設定されていることを確認します。上記のパフォーマンスの違いはごくわずかかもしれませんが、どのように変更したいかを理解していれば、変更したい方法の方が良いと思います。ただし、変更するかどうかは、最終的にはあなたが決定します。私は、コードを変更する必要があるかどうかについて、コードがどれほど読みやすく、保守しやすいかを調べます。

于 2011-10-19T15:34:33.673 に答える