highres_177434192

Multi Cache Laravel (Redis)

redis

Cache dengan penyimpanan menggunakan memory usage memang banyak varian. Laravel sendiri me-support beberapa tipe untuk cache memory seperti APC, memcache, dan Redis.

Kemuadahan setup dari cache laravel memang sangat membantu dari sisi Developer atau Programmer untuk memilih cache apa yang cocok dengan aplikasi atau web yang sedang dibuatnya.

Tulisan ini lebih condong penggunaan Redis sebagai cache yang membantu kinerja laravel untuk optimasi dari sisi kecepatan pengaksesan.

Kasus yang akan saya angkat disini adalah penggunaan multi cache redis dengan pemanfaatan Predis Library sebagai secondary cache yang berfungsi sebagai key value store.

Dikarenakan config laravel hanya memungkinakan penggunaan cache redis dengan 1 (satu) database saja –> app/config/database.php. Jika kita ingin menggunakan lebih dari 1 (satu) database di Redis, maka harus ada setting config tambahan atau pembutan Controller sebagai tools tambahan penggunaan cache.

Default setting Redis Cache Laravel
app/config/database.php

'redis' => array(
   'cluster' => false,
   'default' => array(
      'host'     => '127.0.0.1',
      'port'     => 6379,
      'database' => 0, // selected database
   ),
),

app/config/cache.php

'driver' => 'redis',

Controller Tools untuk penggunaan multi database
RedisController.php

<?php
use Predis\Client;
class RedisController extends BaseController
{
    public static $redis;
    public static $scheme = 'tcp';
    public static $host = '127.0.0.1';
    public static $port = '6379';
    public static $database = '1'; //selected database
    public static $ttl = 3600; // 1 hour

    function __construct(){
        try{
            $params = [
                'scheme' => self::$scheme,
                'host'   => self::$host,
                'port'   => self::$port,
                'database'   => self::$database,
            ];
            self::$redis = new Client($params);
        }catch (Exception $e) {
            echo "Couldn't connected to Redis";
            echo $e->getMessage();
        }
    }

    public static function set($key, $value, $ttl = null){
        if(empty($key) || empty($value)){
            return false;
        }else{
            if(empty($ttl)){
                $ttl = self::$ttl;
            }
        }
        $value = serialize($value);
        self::$redis->set($key, $value);
        if($ttl > 0){
            self::$redis->expire($key, $ttl);
        }
        return true;
    }

    public static function get($key){
        if(self::$redis->exists($key)){
            $result = self::$redis->get($key);
            return unserialize($result);
        }else{
            return false;
        }
    }

    public static function forget($key){
        if(self::$redis->exists($key)){
            self::$redis->expire($key,0);
            return TRUE;
        }else{
            return FALSE;
        }
    }

    public static function has($key){
        if(self::$redis->exists($key)){
            return TRUE;
        }else {
            return FALSE;
        }
    }

    public static function setTtl($key,$ttl){
        try{
            self::$redis->expire($key, $ttl);
            return TRUE;
        }catch (Exception $e){
            return FALSE;
        }
    }

    public static function checkTtl($key){
        try{
            echo ' expired at : '.date('Y-m-d H:i:s',strtotime( date('Y-m-d H:i:s')) + (int)self::$redis->ttl($key));
        }catch (Exception $e){
            return FALSE;
        }
    }
    
}

Contoh code di atas adalah solusi kecil yang akan sedikit banyak membatu pekerjaan yang berkenaan dengan cache redis.

 

Terima kasih,

Kun Budiharta

laravel

Mempercepat Render View pada Laravel 4.2

Sedikit sharing mengenai optimasi dari penggunaan Framework PHP Laravel, banyak isu yang menyebutkan Laravel memiliki render template HTML yang kurang cepat dengan template engine bawaan yaitu Blade.

Tidak ada masalah dengan templating Blade, yang menjadi masalah adalah seberapa cepat server dapat merender template tersebut untuk dapat disuguhkan ke pengguna (user).

Berdasarkan pengalaman dan beberapa contoh di website lain. Cara yang tepat untuk mengurangi waktu render dengan 2 (dua) metode ini :

Fungsi render()

Trik penggunaan fungsi render jarang sekali digunakan karena sudah ditangani langsung oleh laravel dengan return dari function yang kita buat.

tetapi perlu kita ingat, apakah hasil render template laravel semua dibutuhkan ?
jawabannya tidak.

Fungsi render() hanya akan mengembalikan plaintext HTML saja, dan tidak mengembalikan Package yang dipanggil oleh autoload, seperti Illuminate\Database dsb.

// Function START

$view = View::make('page.article', $data);
echo $view->render(); //output plain HTML
die();

//Function END

Laravel Cache

Penggunaan cache pada laravel sangatlah berguna jika kita sudah membicarakan optimasi sebuah halaman website.

Cache memungkinakan aplikasi tidak menjalankan perintah secara berulang.
Cache berguna untuk menyimpan hasil dari sebuah pemrosesan dari sebuah function, dalam kasus ini adalah halaman generate dari template Blade.

// Cache START
$cache_key = 'article-' . $title_url .'-cache';
$expiresAt = 10; // on minutes

// Checking view on cache
if (!\Cache::has($cache_key)) {
    $view = View::make('page.article', $data);
    echo $view->render(); //output plain HTML

    // Save render view on cache
    \Cache::put($cache_key, $view->render(), $expiresAt);
    
    die();
} else {
 
    // Get view from cache
    $view = \Cache::get($cache_key); 
    echo $view;
    die();

}
// Cache END

Hasil di atas dapat mengurangi load time dari sebuah halaman website.
yang standard dari laravel adalah >700ms menjadi 150 s/d 200ms

Semoga apa yang saya share di atas dapat sedikit membatu kesulitan anda dalam optimasi halaman website menggunakan Laravel Framework.

 

Terima kasih,

Kun Budiharta

Android caplok Blackberry di OS 10.3

Android caplok Blackberry di OS 10.3

Android caplok Blackberry di OS 10.3
Android caplok Blackberry di OS 10.3

image via berryflow.com

BlackBerry 10.3 kabarnya membenamkan inti Android 4.3 di dalamnya. Selain lebih banyak aplikasi Android yang didukung, butuh waktu tak sampai 2 detik untuk membuka sebuah aplikasi Android pada BlackBerry 10.3.

Hal ini yang membuat Blackberry disebut sebagai Android, lantaran dukungan terhadap aplikasi Android semakin sempurna. Developer aplikasi Blackberry pun merasa terdiskriminasi oleh hal ini. Mereka merasa semakin dikucilkan bahkan banyak yang merasa sudah tidak dibutuhkan lagi. Mungkin Blackberry harus segera sadar akan hal ini, sebelum semua Developer akan meninggalkannya.

Dari sisi User bukan tak mungkin pengguna BlackBerry 10 malah lebih memilih menggunakan aplikasi Android ketimbang aplikasi BlackBerry itu sendiri.

Improvisasi lainnya yang ditawarkan oleh BlackBerry 10.3 adalah menu scroll down yang diisi oleh informasi yang lebih lengkap, seperti halnya pada Android dan iOS. Memang bagi pengguna Android maupun iOS, hal tersebut bukan lagi hal yang istimewa.