是否可以将 PHP 数组存储到我的服务器,现在它总是在有人从 CSV 文件重新加载页面时创建,但这是不必要的,因为该文件仅在每小时后才有机会。
ATM,页面加载大约需要 9 秒,相当长。 CSV 文件有 10k+ 行,每行 9 个元素,因此如果服务器不必为每个用户处理 100k 个元素,那将对性能非常有利。
我已经有一个用于下载 csv 文件的 cronjob,所以如果在下载完成后执行解析命令会很好,每小时只执行一次。
定时任务:
<?php
function download_remote_file($file_url, $save_to) {
$content = file_get_contents($file_url);
file_put_contents($save_to, $content);
}
download_remote_file(<url here>, realpath(".") . '/dump.csv');
?>
每次重新加载页面时都会发生这种情况:
1st:解析数据到数组
$url = 'dump.csv';
$csvData = file_get_contents($url);
$lines = explode(PHP_EOL, $csvData);
$array = array();
foreach ($lines as $line) {
$line = str_replace("\\", "\", $line);
$line = str_replace("#", "#", $line);
$array[] = str_getcsv($line);
第二:将数组传递给 Javascript
var array = <?php echo json_encode( $array ) ?>;
第三:创建 HTML 表格
//some code
第四:初始化数据表插件
$(document).ready( function () {
createtable();
$('#scoreboard').DataTable( {
"iDisplayLength": 50,
language: {
decimal: ".",
},
"lengthMenu": false,
"bLengthChange": false
} );
} );
有什么可以更快完成的吗?
如前所述,将 php 数组保存在服务器端,或者以某种方式将 JS 数组与 HTML 表一起保存?
-内狼
最佳答案
解析 CSV 后,执行以下操作:
$file = fopen('/tmp/output.js', 'w');
fwrite($file, '<script type="text/javascript">');
fwrite($file, 'var array =');
fwrite($file, json_encode( $array ));
fwrite($file, ';');
fwrite($file, '</script>');
fclose($file);
copy('/path/to/script.js', '/path/to/script.js.bak');
move('/tmp/output.js', '/path/to/script.js');
然后,稍后当您输出 HTML 时,您只需要插入:
<script type="text/javascript" src="/scripts/script.js">
在标题中。人们的浏览器也应该正确缓存它。注意复制和移动——你并不严格需要制作备份副本,但你必须使用 move() 来替换“实时”脚本——move() 或多或少是原子的,不会导致任何人得到一半的文件。
另外,请注意,您需要对脚本所在位置的写入权限——有一些方法可以确保这一点非常安全(不要让您的 PHP 脚本写入整个硬盘驱动器),但这超出了这里的范围。
关于javascript - 提高页面性能,在服务器上保存 PHP 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31141753/