我正在记录我的索引页上的IP,大多数人将访问的页面。我想记录IP数据。所有信息都将进入MySQL数据库。我的问题是滞后。
为我生成页面大约需要一秒钟。我希望它是尽可能快,和服务器连接到数据库和插入日志。现在(我相信)用户进入了索引页,在加载整个页面之前,我的脚本被执行,它连接到DB并插入数据。因此,用户必须等待一秒钟才能插入数据。我希望用户访问页面,然后将数据插入数据库。
这是我的代码。
index . php
$ip = $_SERVER['REMOTE_ADDR'];
if(substr($ip,0,4) != "192."){ //Don't log my local IP
$page = $_SERVER['PHP_SELF'];
include("ext/functions.php");
logger($page,$ip);
}
显然也<?php
function logger($page, $ip){
$logr = mysqli_query(mysqli_connect($host, $user, $pass,$statDB),
"INSERT INTO logs (page, DATE, ip) VALUES ('$page', NOW(), '$ip')");
}
?>
可以在页面加载完成后使用jquery:
创建一个php页面并将php/mysql代码存储在其中,如"storeip.php"
,然后简单地下载并插入jquery库到您的索引页,如:
<script src="scripts/jquery.min.js" type="text/javascript"></script>
并使用以下代码:
<script type="text/javascript">
$(document).ready(function(){
var ip = "<? echo $_SERVER['REMOTE_ADDR']; ?>";
var page = "<? echo $_SERVER['PHP_SELF']; ?>";
$.post("storeip.php","ip="+ip+"&page="+page);
});
</script>
所以你可以管理张贴的"ip"answers"page"变量在你的"storeip.php"文件
您可以刷新输出缓冲区,以便用户可以看到实际的页面,然后执行插入。你是否真的能够做到这一点取决于你的实际实现,但如果它很简单,你可以把你的代码在你的脚本的最后,在它执行之前:
ob_flush();
flush();
session_write_close(); //optional; it will allow your users to navigate away before the slow operation is complete (if you are using sessions)
//your logging code goes here
- 你可能需要在脚本开头调用
ob_start();
。 - 这只会使你的页面显示更快,它不会使它加载更快(加载图标仍然会显示)
在另一个注释中,正如其他人提到的,对于一个简单的操作来说,一秒钟的时间太长了。你必须试着看看为什么它会这么长。首先,检查是连接还是查询本身的问题。在后一种情况下,如果日志表太大,则必须考虑:
- 删除表上的任何(或所有)索引。索引对读很好,但是会减慢写速度,所以如果你主要用这个表写,你应该重新考虑它的结构。 重新考虑您正在使用的表引擎。不同的表类型具有不同的性能特点;查看归档文件,例如: