所以我实现了谷歌地图,使用javascript绘制多边形。我使用getBounds来获取latLongs。然后我调用一个数据库(postcodes
),其中包含英国每个邮政编码的每个纬度。
此查询如下所示:
SELECT * FROM `postcode`.`postcodeGoogle` WHERE (`lat` BETWEEN '$lat1' AND '$lat2')
AND (`long` BETWEEN '$long1' AND '$long2')
哪个好,返回正确的数据。
然后我有了第二个数据库address_list
,其中包含英国的每个地址(目前它只包含Kettering区域,因此有12,000行)。我在第一个查询上执行while
循环,然后在每个循环上运行此查询:
SELECT * FROM `digital_hub`.`address_list` WHERE `postcode`='".$row['postcode']."'
然后我将邮政编码的latlong添加到变量:
$resultE = $resultE."(".$row['lat'].", ".$row['long'].") || ";
然后在循环结束时回显。
此页面通过jQuery调用:
$.get("php/properties.php?bounds="+bounds, function(data){
var theLatLongs = data.split(" || ");
totalcount = 0;
for(x in theLatLongs){
var theLatLong = "";
var latLong = theLatLongs[x].substr(1);
var latLong = latLong.slice(0, -1);
var theLatLong = latLong.split(", ");
var thelat = theLatLong[0];
var thelong = theLatLong[1];
totalcount = totalcount+1;
}
$('#totalcount').html('<h6><span>'+totalcount+'</span> Households found</h6>Filtered by location');
});
一切正常(我认为)。它的速度非常慢。我知道facebook有更好的资源,但是创建广告过滤器的速度非常快。我还将实施更多过滤器。我试过加入,但时差似乎不大。有时它根本不会返回结果并导致我的mysql
服务崩溃......
答案 0 :(得分:1)
有3个源可以减慢代码:mysql,php,js。
我要做的第一件事就是在像toad这样的工具中运行sql(连接版本),或者做一个输出原始结果的php文件。您可以将console.time / console.timeEnd添加到js,并在php中添加mictrotime。
另一个“快速而肮脏”的检查是过去“your_server”/php/properties.php?bounds=YourBounds, 并检查结果。它会给你一些指示。
如果您确定它是sql,请尝试索引digital_hub.address_list.postcodes,postcode.postcodeGoogle.lat和postcode.postcodeGoogle.long。
然后,在你的php“raw”脚本(或你的sql工具)中,尝试使用less column调用查询,
甚至是“select count(*)
”。如果“select count(*)
”更快,则意味着返回值会降低系统速度。这是典型的空(非空)日期字段。
但他们的关键是简单,时间过程的不同部分来隔离瓶颈。
console.time('load');
$.get("php/properties.php?bounds="+bounds, function(data){
console.timeEnd('load');
console.time('parse');
var theLatLongs = data.split(" || ");
totalcount = 0;
for(x in theLatLong ){
var theLatLong = "";
var latLong = theLatLongs[x].substr(1);
var latLong = latLong.slice(0, -1);
var theLatLong = latLong.split(", ");
var thelat = theLatLong[0];
var thelong = theLatLong[1];
totalcount = totalcount+1;
}
console.timeEnd('parse');
console.time('display');
$('#totalcount').html('<h6><span>'+totalcount+'</span> Households found</h6>Filtered by location');
console.timeEnd('display');
});
在旁注中,您可以考虑使用json数据。 (并检查你对thelatlong js var的使用,但我猜你正在调试) 在php:
while ($row = msqlqresult) {
$resultArray[] = $row;
}
$resultJson = json_encode($resultArray);
在js:
console.time('load');
$.getJSON("php/properties.php", {bounds: bounds}, function(data){
console.timeEnd('load');
console.time('parse');
totalcount = 0;
for(var x in data){
var thelat = theLatLong[x].lat;
var thelong = theLatLong[x].long;
totalcount = totalcount+1;
}
console.timeEnd('parse');
console.time('display');
$('#totalcount').html('<h6><span>'+totalcount+'</span> Households found</h6>Filtered by location');
console.timeEnd('display');
});