Die Durchlaufzeit auf dem Server für eine Tabelle mit 300 Positionen beträgt bei ALT 3.512 sec, bei NEU 0.03 sec.
Das geht (in Abhängigkeit davon, wie Dein CSV ensteht) wohl noch besser. Habe mal was getestet:
<?php
$ar=[];
for( $i=0; $i<300; $i++ ) {
$row[0]=$i;
$row[1]=md5( date( $i ) );
$row[2]=sha1( $row[1] );
$ar[]=$row;
}
unset ( $row );
$csv='';
$start = microtime(true);
foreach ( $ar as $row ) {
$csv .= $row[0] . ';"' . str_replace('"', '\"', $row[1] ) . ';"' . str_replace('"', '\"', $row[2] ) . ';"' . "\r\n";
}
$end = microtime( true );
echo 'CSV (Excel): ' . round ( ( $end - $start ) * 1000, 2 ) . "ms" . PHP_EOL;
$csv='';
$start = microtime( true );
foreach ( $ar as $row ) {
$csv .= implode( ";", $row ) . "\r\n";
}
$end = microtime( true );
echo 'CSV (implode): ' . round ( ( $end - $start ) * 1000, 2 ) . "ms" . PHP_EOL;
if(!function_exists('str_putcsv'))
{
function strPutCsvRow($input, $delimiter = ',', $enclosure = '"')
{
$fp = fopen('php://temp', 'r+');
fputcsv($fp, $input, $delimiter, $enclosure);
rewind($fp);
$data = fread($fp, 1048576);
fclose($fp);
return rtrim( $data );
}
}
$csv='';
$start = microtime( true );
foreach ( $ar as $row ) {
$csv .= strPutCsvRow( $row, ',', '"') . "\r\n";
}
$end = microtime( true );
echo 'CSV (putcsv): ' . round ( ( $end - $start ) * 1000, 2 ) . "ms" . PHP_EOL;
$json='';
$start = microtime( true );
$json = json_encode( $ar );
$end = microtime( true );
echo 'JSON (encode): ' . round ( ( $end - $start ) * 1000, 2 ) . "ms" . PHP_EOL;
CSV (Excel): 0.4ms
CSV (implode): 0.17ms
CSV (putcsv): 1.22ms
JSON (encode): 0.09ms
Ich vermute mal, dass Javascript das JSON dann auch schneller verarbeitet..