file:data.txt (11617行)
var listItem = $('#menu-selector > li');
$(listItem).click(function() {
$(listItem).removeClass('js-is-active');
$(this).toggleClass('js-is-active');
});
$('#home_li').click(function(){
alert('home clicked')
})
$('#notif_li').click(function(){
alert('notifs clicked')
})
$('#profile_li').click(function(){
alert('profile clicked')
})
我只需要2015-06的数据,我使用fget并检查每一行的日期时间,但确实很慢,超过50秒。
user datetime
23 2015-03-01 08:04:15
15 2015-05-01 08:05:20
105 2015-05-01 08:07:10
15 2015-06-01 08:08:29
105 2015-06-01 08:12:48
解决方案:不到2秒!!!! (感谢Kevin P.和Dragon)
$d='data.txt';
import($d);
function import($d){
$handle = fopen($d, "r") or die("Couldn't get handle");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$line=explode("\t",$buffer);
if(date("Y-m",strtotime($line[1])=="2015-06"){
mysql_query("INSERT INTO `table` ....");
}
else{
//break? when month>6
}
}
fclose($handle);
}
}
答案 0 :(得分:2)
无法帮助,使用比PHP更快的东西。例如,您可以使用grep
或awk
来读取文件并快速过滤。例如:
$lines = explode("\n", `awk '$2 ~ /^2015-06/ { print }' data.txt`);
编辑:此外,fgets
无法保证为您提供全线。你一次得到4096个字节;如果幸运的话,边界可能位于一行的中间,这会使行不匹配,或者由于错过了假设(例如构造SQL时$line
数组的长度)而破坏了代码,如果不 *
*)反之亦然 - 它最好完全打破,这至少是一个明显的错误,大喊大叫固定;而不是静默数据下拉。
答案 1 :(得分:0)
可能会立即在DB中插入多个条目,而不是每次找到所需时间时都调用它?
在这种情况下,它类似于this
答案 2 :(得分:0)
也许你应该使用grep过滤掉你不需要的行。