autocomplete sql performans artırma yöntemleri
12
●1.603
- 16-09-2012, 20:12:37arakdaşlar bildiğiniz gibi bir text kutusuna her tuşa basma işlemini veri tabanında arama sonucu döndürüyoruz jquery autocomplete eklentisini kullanıyorum ama bu beni bu işleri yapmaktan alıkoymuyor bu konuda ciddi anlamda performans sağlayacak bir yöntem bileniniz varmı sürekli her tuşa basışta arama olayı tetiklenirse veri tabanı patlar.
- 16-09-2012, 23:11:07o zaman size kodları yoluyorum.
$("input[name=yazaradi]").keyup(function(){
var sonuc=new Array();
var out=new Array();
if ($(this).val().length>2)
{
$.ajax({
type:"POST",
url:"yazarcek.php",
data:"deger="+$(this).val(),
dataType: "json",
success:function(id){
$.each(id,function(key,valuec){
sonuc.push(key,valuec);
out[valuec]=key;
});
$("input[name=yazaradi]").autocomplete({
autoFocus:true,
delay:1000,
select:function(){
$("input[name=yazaradi]").attr("disabled","disabled");
$(".yazarcik").show();
$("input[name=yazarid]").val("");
},
close:function(){
//alert(out[$("input[name=yazaradi]").val()]);
$("input[name=yazarid]").val(out[$(this).val()]);
},
source:sonuc
});
}
});
}
});
burada sistemi hızlandıracak ne gibi yöntemler kullanabilirim ?
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 20:11:07 -->-> Daha önceki mesaj 20:02:11 --
astald adlı üyeden alıntı: mesajı görüntüle
çok basit her tuşa bastığınızda veritabanına bir sorgu atılıyor 5 karakterli bir aramada işlem bitince 5 sorgu atıyor bunu bir sorguaya düşürmem lazım. ayrıca like ile arama işlemleri veritabanında en zor işlemlerdir id ile aramaya oranla 5 kata kadar sistemi kasar. - 17-09-2012, 01:44:59Üyeliği durdurulduAşağıda uygulamalı örnek yazdım
session_start(); $gelen_yazi = $_POST["gelen_yazi"]; $sonuclar = array(); if (strlen($gelen_yazi) == 1){ // Eğer gelen yazı 1 karakter ise $sql = mysql_query(); // Mysql sorgunu çalıştır while ($a = mysql_fetch_array($sql)){ // Gelen verileri array a akttar; $sonuclar [] = $mysql_den_gelen_kayit; echo "Textfied yazıları"; } // Döngüden çıktıktan sonra oluşturulan array ı session a at $_SESSION['veriler'] = $sonuclar; } else { if (strlen($gelen_yazi) % 2){ // Gelen yazı karakteri 1 den çok ise sayının bölünebilirliğini kontrol et örneğin ben 2 ye bölünüyorsa işlem yap dedim ################################################### // Yukardaki aynı işlemleri tekrarla verileri arraya aktarıp session a ata; ################################################### } else { $veriler = $_SESSION['veriler']; foreach ($veriler as $v){ echo $v; } } } - 17-09-2012, 19:08:50bjkasim adlı üyeden alıntı: mesajı görüntüle
javascript kısmı için timeout kontrolü ekleyebilirsin.
http://www.w3schools.com/jsref/met_win_cleartimeout.asp
if ($(this).val().length>2)
direk sorguyu göndermek yerine misal 1 sn sonra arama yaptırabilirsin.
ziyaretçi arama metnini yazarken timeout silinir, yazması bittikten 1 sn sonra ajax ile isteği gönderirsin
.
.
clearTimeout(t);
if ($(this).val().length>2) {
t=setTimeout(function(){timedCount()},1000);
}
--------------------------------
veritabanı açısından
mysql memory table kullanabilirsin daha hızlı olucaktır.
cron ile verileri memory tablosuna aktarırsın düzenli, ordan da arama yaptırabilirsin.
file cache pek uygun değil bence bu uygulama için...