Merhaba. Verilerin daha hızlı gelmesini sağlamanız sizin tarafınızda pek mümkün değil. Yani sunucunuzun internet hızını artırabilirsiniz belki ama geç cevap verme çoğunlukla api'nin sunucularından kaynaklıdır.
Şöyle bir öneri sunabilirim:
Kendinize bir cache mekanizması kurabilirsiniz. API'a attığınız aynı isteklere aynı yanıtlar dönüyorsa tekrar tekrar istek atmanız gerekmez. Gelen isteğin yanıtını bir dosyaya kaydedersiniz ve mesela 1 saat boyunca aynı isteği atmak yerine bu dosyanızdaki veriyi okursunuz. Böylece kendi sunucunuzda bulunan dosyadan veri okumak, API'dan veri okumaktan çok çok daha hızlı sonuç verir.
Kendinize bir fonksiyon oluşturmalısınız. Bu fonksiyon,
- API'a atılmak istenen isteği alacak.
- Yeni bir istek atıp atmayacağını belirleyen bir değişken başlangıçta false değeri alacak.
- Daha önce atılan istekleri kaydettiği dosyadan bu isteğin daha önce atılıp atılmadığını bulacak.
- İstek daha önce atılmışsa
- Atılan isteğin zamanının dolup olmadığını kontrol edecek.
- Eğer isteğin zamanı henüz dolmamışsa:
- İsteğin sonucunu hangi dosyaya yazdığını alacak.
- Sonuç olarak fonksiyon bu dosyanın içeriğini return edecek ve fonksiyon sonlanacak.
- Eğer isteğin zamanı dolmuşsa:
- İsteğin sonucunu yazdığı dosyayı silecek.
- Kendisinde de bu isteği barındıran veriyi silecek.
- Yeni istek atılması gerektiğini belirten değişken true yapılacak.
- Daha önce istek atılmamışsa
- Yeni istek atılması gerektiğini belirleyen değişken true yapılacak.
- Yeni istek atılması gerektiğini belirleyen değişken true ise
- API'a istek atacak.
- İsteğin yanıtını bir dosyaya kaydedecek.
- İsteğin kendisini, yanıtını yazdığı dosyayı ve isteğin geçerlilik süresini (örn 1 saat) istekleri tuttuğu dosyaya kaydedecek.
- API sonucunu return edecek ve fonksiyon sonlanacak.
Bu algoritmayı sadece anlık değişmeyen API endpoint'leri için kullanabilirsiniz. Eğer API'dan gelen veri aynı isteği yapmanıza rağmen her seferinde farklı bir yanıt verebilecekse bu yöntemi kullanamazsınız çünkü kullanıcıya eski veri göstermiş olursunuz.
Kodunuzda çok fazla yazım yanlışı var. Aşağıdaki şekliyle sizinki arasındaki farkları inceleyebilirsiniz:
function islemsonucugoster() {
var islemsonuc = document.getElementById("islemsonucu");
// var sayi1 = parseInt(document.getElementById(sayi1));
// siz burada input'u değil, input'un kapsayıcısı olan div'i seçmeye çalışmışsınız.
// input'u seçmiş olsaydınız bile input'un value'sini değil direkt input elementinin kendisini seçmiş olacaktınız.
var sayi1 = parseInt(document.querySelector("#sayi1 > input").value);
// var sayi2 = parseInt(document.getElementById(sayi2));
// Burada da yine input'u değil kapsayıcısını seçmeye çalışmışsınız. sayi1 ile aynı.
var sayi2 = parseInt(document.querySelector("#sayi2 > input").value);
// document.getElementsByTagName(Option).value;
// Ama hangi option'un value'si? Seçilmiş olan option'a ulaşmak için select elementinin değerini almalısınız.
var secilendeger = document.querySelector(".islemisareti").value;
if(secilendeger == "1") {
islemsonuc = sayi1 + sayi2;
islemsonucu.innerHTML = islemsonuc;
} else if(secilendeger == "2") {
islemsonuc = sayi1 - sayi2;
islemsonucu.innerHTML = islemsonuc;
} else if(secilendeger == "3") {
islemsonuc = sayi1 * sayi2;
islemsonucu.innerHTML = islemsonuc;
} else if(secilendeger == "4") {
// islemsonucu = sayi1 / sayi2;
// "islemsonuc" yazmak yerine "islemsonucu" yazmışsınız.
islemsonuc = sayi1 / sayi2;
// islemsonucu.innerHTML = islemsonucu;
// burada da "islemsonuc" ve "islemsonucu" kelimelerini karıştırmışsınız.
islemsonucu.innerHTML = islemsonuc;
}
}
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
if(isset($item["anlamlar"]) && is_array($item["anlamlar"])) {
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
}
else echo "<div>Anlam bulunamadı</div>";
echo "</div>";
echo "<div class='birlesikler'>";
if(isset($item["birlesikler"]) && is_array($item["birlesikler"])) {
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
}
else echo "<div>Birleşikler bulunamadı</div>";
echo "</div>";
echo "</div>";
echo "<hr />";
};
echo "</div>";
2 sözcük çıkarsa zaten ayrılıyor olmalı. Onu düşünerek yazdım.
İlk foreach'in ilk div'ine stil verebilirsiniz margin-top gibi.
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
if(isset($item["anlamlar"]) && is_array($item["anlamlar"])) {
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
}
else echo "<div>Anlam bulunamadı</div>";
echo "</div>";
echo "<div class='birlesikler'>";
if(isset($item["birlesikler"]) && is_array($item["birlesikler"])) {
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
}
else echo "<div>Birleşikler bulunamadı</div>";
echo "</div>";
echo "</div>";
};
echo "</div>";
Her şeyi div'e çevirdim.
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
echo "</div>";
echo "<div class='birlesikler'>";
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
echo "</div>";
echo "</div>";
};
echo "</div>";
foreach($item["anlamlar"] as $anlam) {
$anlamArr = explode(" ", $anlam["anlam"]);
for($i=0; $i<count($anlamArr); $i++) $anlamArr[$i] = div($anlamArr[$i]);
$anlamlar .= li(i("Özellik: ".$anlam["ozellik"]).div(implode("",$anlamArr)));
};
belki böyle olabilir bu foreach'i değiştirirseniz.
Anlamlarda geçen cümleyi boşluk karakterlerinden ayırıp her birini bir div içine alacak.
Şu an şöyle bir yapı oluşuyor olmalı:
<div>
<div>
<strong>Kelime: </strong>
<span>kelime</span>
</div>
<section>
<div>
<div><strong>Anlamlar</strong></div>
<ul>
<li><i>(Özellik: özellik)</i><span>anlam metni...</span></li>
<li><i>(Özellik: özellik)</i><span>anlam metni...</span></li>
</ul>
</div>
<div>
<div><strong>Birleşikler</strong></div>
<ul>
<li><span>birleşik kelime</span></li>
<li><span>birleşik kelime</span></li>
</ul>
</div>
</section>
</div>
Siz nasıl bir yapı istiyorsunuz?
Doğrudan kapsayıcı bir div içine alabilirsiniz.
Örn 2.kodu kullanıyorsanız:
echo $kelimeler;
yerine echo "<div>$kelimeler</div>";
yazarsınız.
Hata kodlarını görebilmek için sayfanın üstünde bir yere şunları yazmayı deneyebilirsiniz:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Önceki mesajımı düzenledim. Noktalı virgül hatası olabilir...