PHP - Bir yöntem daha az kere mümkün yürütmek

4 Cevap php

Ben birden çok dilde bir site var. Ben bir dizide bana bugün para döndüren bir yöntem var. Ben görüntülemek o zaman bir tablodaki para.

// --- en/index.php
<?php
include_once "../exchangeRates.php";
$currencies = ReadExchangeRates();

// --- fr/index.php
<?php
include_once "../exchangeRates.php";
$currencies = ReadExchangeRates();

...
// somewhere in the page
<td><?php echo $currencies["eur"]["today"]; ?></td>

Yani, her zaman ben en/, yük veya fr/ veya diğer dil, ben bir dış siteden döviz kurları talep.

Ben bu davranışı (günde bir ya da oturum başına okuma) optimize edebilirsiniz?

belki bir küresel değişkeni saklamak ve güncelleme tarihini kontrol etmek?

4 Cevap

Tüm değişkenler komut dosyası, global veya yerel, onlar önbellek amaçlar için kullanılamaz ile ölmektedir.

Sen kaynaklarına bağlı olarak çeşitli çözümler var:

  • Sen, döviz kurlarını almak serialize Onları bir dize olarak ve bir dosya içine saklayabilirsiniz. Eğer onları yazdırmak için ihtiyacınız olduğunda, file modification time okundu; o X daha eski ise, dış sunucudan yeni veri alıp aksi unserialize mevcut veri ve görüntüler.

  • Ve, tabii ki, sadece uygun bir SQL veritabanında ham veri depolamak ve düzenli olarak güncelleyebilirsiniz.

Aradığınız anahtar kelime Caching .

Senin durumunda, fikir sadece sıklıkta güncellenir gibi Kurların almak için olduğunu. Örneğin, script fetching the Exchange Rates from the ECB, ardından oranları (1400 CET) etrafında bir günlük olarak değiştirilir ise. Daha fazla günde bir kez daha onları almaya gerek yoktur.

Ben önbelleği kurmak için aklınıza gelebilecek basit özel uygulama Forex çağrısı sonucu depolamak ve dosya sonucu sokmaktır. Ardından, hizmet için ikinci bir çağrı yapıldığında, dosyanın son değiştirilme zamanını kontrol edin. Bu, örneğin, daha eski ise 24 saat, harici bir siteye çağrı sevk ve dosyayı değiştirin. Değilse, bunun yerine dış siteyi çağıran içeriğini unserialize.

Önbelleğe alma, ortak bir kavram olduğundan, Zend_Cache, ARMUT en {[(3 gibi APC, memcached ve soyutlama katmanları gibi seçim yapmak için uygulamaları bir dizi var )]} veya CacheLite. Smarty çok Forex hizmetini kullanarak herhangi bir şablon önbelleğe, ama şahsen I feel Smarty's time is over olabilir.

Ayrıca bu ilgili soruya bakın:

Sizi mutlu kılan ne olursa olsun, saatlik, günlük .. sıklıkta güncelleştirmek istediğiniz gibi bir cron işi gelen komut çağrı, bir veritabanı sonuçları saklayın.

Bu Smarty gibi iyi bir çiftleşmiş motoru biri avantaj olabilir. Smarty ne isterseniz aralığı için sayfanın önbellek bölümlerini effetively sağlar ve sizin için bunu hallederim.

Diğer çiftleşmiş motorları muhtemelen benzer olacaktır ve tabii ki bu kendiniz yapabilirsiniz.

Ama önce sormak gerekir: Bu aslında bir sorun? Render için gereken ne kadar uzun zaman oldu. Bu gerçek bir sorun olup olmadığını aslında sürpriz olacaktı ama bu yükü nasıl uygulandığını bu bilgileri alma ve nerede bağlıdır.

Güvenilmez bir şey (örneğin, bir Web servisi) gelen Alternatif eğer (örneğin memcached) ya da sadece bir veritabanında bir dış script onları yüklemek ve bir bellek önbellek bunları saklamak isteyebilirsiniz.