<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// これは記事の内容とは関係ありませんPHPコードの例</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"この記事を読んでください!<br>"</span></span><span>;
</span><span><span class="hljs-variable">$time_start</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// テキストを開始します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h1>fgetss大きなファイルを処理するとutter音が立てられます?パフォーマンスを最適化するためのいくつかの方法を教えてください</h1>"</span></span><span>;
</span><span><span class="hljs-comment">// 導入</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<p>存在するPHP開発中,fgetss関数は、多くの場合、ファイルから行ごとにコンテンツを読み取り、削除します。HTMLラベル,但存在する处理大文件时,多くの開発者は明らかな遅れに遭遇します。この記事では、遅れの原因を分析します,パフォーマンスを最適化するためのいくつかの方法を提供します。</p>"</span></span><span>;
</span><span><span class="hljs-comment">// 1つ、理解するfgetssそれがどのように機能するか</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h2>1つ、理解するfgetssそれがどのように機能するか</h2>"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<p>fgetss関数の中核は、行ごとにファイルのコンテンツを読み取ることです,同時に削除しますHTMLそしてPHPラベル。ファイルが大きい場合,各呼び出しfgetss都需要执行字符串解析そしてラベル过滤,これにより、かなりのパフォーマンスが頭上になります。</p>"</span></span><span>;
</span><span><span class="hljs-comment">// 二、大きなファイルのst音の理由</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h2>二、大きなファイルのst音の理由</h2>"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> <span class="hljs-string">"<ul>
<li><strong>ファイルが大きすぎる:</strong>1つ次性读取整个文件会占用大量内存。</li>
<li><strong>頻繁にI/O動作します:</strong>毎回fgetssすべての呼び出しは、ハードディスクにアクセスする必要があります,I/Oパフォーマンスのボトルネックです。</li>
<li><strong>ラベル解析开销:</strong>fgetss解析して削除しますHTMLラベル,这存在する大文本中耗时明显。</li>
</ul>"</span>;
</span><span><span class="hljs-comment">// 三つ、最適化方法</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h2>三つ、最適化方法</h2>"</span></span><span>;
</span><span><span class="hljs-comment">// 方法1:使用fgets+strip_tags代替fgetss</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h3>1. 使用 <code>fgets "; //方法2:バッファーを増やします
エコー 「 fgetssは最大読み取り長を指定でき、バッファーを合理的に設定できます。ループの数を減らすことができます。
」 ;エコー」
\ $ buffersize = 8192; //デフォルトは4096です。
while(!feof(\ $ handle)){
\ $ line = fgetss(\ $ handle、\ $ buffersize);
// process \ $ line
}
fclose(\ $ handle);
" ; //方法3:ブロックごとにファイルを読む
エコー 「 超大型ファイルの場合、固定バイトブロックを一度に読み取るために、I/O時間の数を減らすことができます。
」 ;エコー」
\ $ handle = fopen( 'lagefile.txt'、 'r');
\ $ chunksize = 16384;
while(!feof(\ $ handle)){
\ $ chunk = fread(\ $ handle、\ $ chunksize);
\ $ cleanchunk = strip_tags(\ $ chunk);
//プロセス\ $ cleanchunk
}
fclose(\ $ handle);
" ; //方法4:ジェネレーターを使用してメモリ効率を向上させる
エコー 「 ジェネレーターは、ファイル全体を一度にロードせずに読み取り、処理できます。
」 ;エコー」
function readfilelines(\ $ file){
\ $ handle = fopen(\ $ file、 'r');
if(!\ $ handle)return;
while(!feof(\ $ handle)){
Strip_tags(fgets(\ $ handle));
}
fclose(\ $ handle);
}
foreach(readfilelines( 'largefile.txt')as \ $ line){
// process \ $ line
}
" ; //要約します
エコー "FGETSSは、ラインバイラインの読み取りとタグの解析によって引き起こされるパフォーマンスボトルネックが原因である大きなファイルを処理するときに実際にutter音を立てる可能性があります。FGETS+STRAP_TAGSを使用し、バッファーの増加、ブロックによる読み取り、または発電機を使用すると、パフォーマンスを大幅に改善しながら、メモリの使用量を選択できます
。 ?>