Кеширане с файлове в PHP

от Стоян Кьосев

Кеширането е често срещана тема, що се отнася до уеб програмирането. Интересно е, че аз лично съм попадал често на хора, занимаващи се от доста време с php, за които тази тема е мъглива, затова ще се опитам да хвърля малко светлина по въпроса.

Общо взето страниците представят видимо статична дата, която обаче е с динамичен контекст. Например – страницата за обява в сайт за недвижими имоти. Отделните елементи на обявата (град, описание и т.н.) се вземат от базата данни, което става при всеки request (при всяко отваряне на страницата). Като информация обявата се променя сравнително рядко, т.е. заявката към базата данни и обработката на върнатия резултат си остават същите. Голяма част от времето за изпълнение на скрипта се поглъща именно от заявки за бази данни. Тук е най-подходящо да се приложи кеширане на ниво файл, което следва следните стъпки:

  • - Проверка дали резултата с данните не е вече в кеша.
  • - Ако е и валидността не е изтекла (изминал е 1 час от записа) – ползваме него
  • - Ако не е или валидността е изтекла- изтегляме го от базата данни, обработваме го и го записваме в кеша за 1 час (примерно)

Това означава, че в рамките на 1 час след записа, няма да има никакви обръщения към базата данни, а ще се ползва директно готовия резултат.

Из нета съществуват доста решения за кеширане, като се започне от решения за цялостно кеширане, който не се ограничават само до файловата система и се стигне до един от най-популярните пакети за файлово кеширане. Аз лично съм ползвал доста често PEAR::Cache_Lite, докато един от проектите ми не почна да бави значително, а причината се оказа именно Cache_Lite. Най-вероятно съществува начин да се коригира, а и грешката може да е била в моя код или в настройките за класа. Отдавна обаче се канех да си създам кеширащ клас. Първо защото настоящите решения са прекалено тежки, тъй като се опитват да бъдат all-in-one, второ защото кешът не е голяма философия и не ми отне много време да си направя собствен клас.

Пример А:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
require_once 'TinyCache.php';
 
function dbGetComplexMultiJoinQuery()
{
    return array(
            0 => 'item - ' . rand(1, 21),
            1 => 'item - ' . rand(1, 21)
        );
}
 
$options = array('path' => dirname(__FILE__), 'ttl' => 2);
$varcache = TinyCache::getInstance('var', $options);
 
if (!$data = $varcache->getVar('a')) {
    $data = dbGetComplexMultiJoinQuery();
    $varcache->putVar('a', $data);
}
 
var_dump($data);

Масивът $options приема следните ключове:

‘path’ | @string | default: ‘/tmp/’
пълен път до директорията, където ще се съхранява кеш файловете
‘ttl’ | @integer | default: 3600
време в секунди, за което ще се прази кеша преди да се обнови
‘prefix’ | @string | default: ‘cache_’
представката на файловете с кеша
‘auto_serialize’ | @boolead | default: true
(важи само за varCache) – флаг дали автоматично да сериализира/десериализира записваната променлива (default: true)

Пример Б:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
require_once 'TinyCache.php';
 
$options = array('path' => dirname(__FILE__), 'ttl' => 2);
$flowcache = TinyCache::getInstance('flow', $options);
 
if (!$flowcache->start('b')) {
    $result = rand(100, 200);
    $row_num = $result / 10
    echo 'The result from mega complex calculations is ' . $result;
    for ($i = 1; $i < $row_num; $i++) {
        echo 'Row data: ' . $i;
    } 
    $flowcache->stop();
}

Да обощя – кешът е подходят за облекчаване на системата от ресурсоемък процес, генериращ данни, които не се сменят често, като най-честото му приложение е записването на резултат от заявка към база данни (VarCache) или записването на генериран html за дадена страница (FlowCache).

jQuery sFilter – plugin за филтриране на <select> елементи

от Стоян Кьосев

Изтегли:
sFilter
Версия:
0.2
Обновено на:
13.04.2008
Демо:
виж
Списък с промени:
changelog.txt

На два пъти ми се наложи да вграждам функционалност за филтриране на html select list, затова реших да си поиграя и да го изнеса като плъгин.

Идеята – имаме падащо поле (най-често multiple) с много стойности и искаме да ги филтрираме по някаква ключова дума.

Реализацията – трябва ви jQuery и sFilter.

В html кода, освен полето <select id="my_select">, ще трябва и <input type="text" id="my_select-replace">, където ще се въвежда ключовата дума. След това просто извиквате:

$(document).ready(function() {
  $("#my_select").sFilter();
});

Като цяло може да се усъвършенства алгоритъма за търсене. Също така има възможност да се добавят и някои интересни неща като опции, така че очакваите още версии скоро.
виж цялата статия

Защо ни е необходим уеб сайт.

от svest

Може би все още не сте убедени, че присъствието на бизнеса Ви в интернет е необходимо. Съществуват обаче редица привилегии, които предлага уеб пространството. Разполагайки с уеб-сайт, Вие притежавате едно много гъвкаво средство с многостранни възможности. Нека Ви запознаем с някои от ползите и предимствата, които предлага тази инвестиция.

  1. С една крачка пред конкурентите.
    Един добре оформен интернет профил на компанията и/или бизнеса Ви, дава на посетителите представа за професионализъм и престиж, превръщайки ги в потенциални клиенти. В същото време предоставя удобство и сигурност за настоящите клиенти. При малки компании и разрастващ се бизнес, сайтът може да се превърне в основно предимство пред конкуренцията.
  2. Подробна информация за предлаганите от Вас услуги и/или продукти.
    Чрез сайта тази тя може да бъде осигурена на клиентите Ви или заинтересованите от дейността Ви по разбираем и лесно достъпен начин. Тази информация ще бъде достъпна денонощно и достижима от всяка точка на света.
  3. Основно средство за маркетинг.
    Уеб-сайтът е мощно маркетингово средство на цената на минимални разходи за дългосрочен период. Внушителният сайт вдъхва доверие у клиентите за това, което правите за тях. Чрез него можете също така да поддържате пряка връзка с тях, да провеждате запитвания и анкети, което ви позволява да следите отблизо тенденциите в дейността Ви и в бизнеса като цяло. Възползвайки се от най-добрия източник на информация – вашите клиенти, ще може успешно да изградите бъдещата си стратегия за развитие.
  4. Осигуряване на поддръжка за предоставените услуги или продукти.
    Възможността клиентите да осъществят непосредствен контакт с вас чрез Интернет е още един вариант да докажете надеждността на извършваната от вас дейност. Удовлетворявайки всички странични въпроси, които биха могли да възникнат от страна на клиента, освен взаимно улеснение, вие затвърждавате сигурността му, че се е доверил именно на Вас.
  5. Гъвкавост.
    Уеб-сайтът ще бъде разработен в полза на вашата компания и ще бъде съобразен с начина Ви на работа и на отношение към клиентите. Чрез постоянната консултация с разработчика на сайта ще може да вземете участие в процеса на изграждане, отхвърляйки или предлагайки нови идеи, за да може крайния резултат да бъде нагоден точно според вашите стандарти. Така ще разполагате с уникален краен продукт, работещ точно според конкретните изисквания.
  6. Добра функционалност, комбинирана с добър външен вид.
    Добре изглеждащият и същевременно функционален сайт би могъл да се превърне в асоциация на вашия бизнес – модерен технологичен облик, изтъкващ предимствата му.
  7. Работа според установените стандарти и приемственост на сайта.
    Доброто познаване на интернет пространството, както и на неговата аудитория, грижата за максимално широка достъпност и ползваемост на сайта– това е основна част от задълженията на надеждния уеб разработчик, какъвто Вие бихте намерили в наше лице.