Увеличиваем скорость livestreet. Nginx. GZip и не только.
53
Недавно перешел с шаред хостинга на VPS и столкнулся с проблемой что VPS работает не очень быстро, при том что тариф взял не самый дешевый (1600MHz и 1024Mb). Перекопал кучу сайтов чтобы разобраться как все сделать лучшим образом, думаю многие с этим сталкивались, хочу сэкономить ваше время и подытожить важные моменты по настройке.Для тестирования производительности изначально использовал приложение siege, когда меня там цифры стали более-менее радовать, уже начал использовать для тестов замечательный сайт loadimpact.com (количество бесплатных проверок ограничено, не злоупотребляйте сразу). Привожу картинки как было и как стало (сразу хочу заметить увеличение производительности не только из-за настройки nginx).
1. Debian 5 (64) nginx + apache + php-fcgi + eAccelerator + memcache (Апач по сути только для ISPmanager использовался)

2. Debian 5 (32) nginx + apache + mod_php + APC + memcache

Читать дальше
Правильная функция подмены автолоадера в хелпере aceadminpanel
2
зафиксил, чтоб работало с yii :)
файл aceadminpanel/include/adm_helper.php
класс HelperPluginLoader
метод Init
файл aceadminpanel/include/adm_helper.php
класс HelperPluginLoader
метод Init
public function Init() {
if ($this->bInialized) return;
$cbAceLoader = array(self::$oInstance, 'Autoloader');
$aFunc = spl_autoload_functions();
// первый вызов spl_autoload_register
if($aFunc === array('__autoload')){
spl_autoload_register('__autoload');
$aFunc = spl_autoload_functions();
}
if(!in_array($cbAceLoader, $aFunc)){
// удаляем все лоадеры кроме __autoload
foreach($aFunc as $cbLoader){
if($cbLoader !== '__autoload'){
spl_autoload_unregister($cbLoader);
}
}
// сразу за __autoload добавляем лоадер ace
spl_autoload_register($cbAceLoader);
// восстанавливаем лоадеры
foreach($aFunc as $cbLoader){
if($cbLoader !== '__autoload'){
spl_autoload_register($cbLoader);
}
}
}
$this->bInialized = true;
}
- 0
- 18 мая 2011, 18:53
- 1d10t
- Оставить комментарий
Мысли об Object-Relational Mapping в LiveStreet
5
Хочу предложить свои идеи для развития MVC/ORM.
Замечу, что исторически сложилось так, что MVC в LiveStreet весьма отличается от привычного представления в других фреймворках.
Модель здесь заменяется связкой модуль+сущность+маппер, причем, если сущность представляет из себя стандартный ООП-объект с набором свойств и методов, то модули и мапперы, это просто наборы функций для работы с определенными типами данных, что скорее похоже на библиотеки из структурного программирования, чем на стандартный ООП.
Я не возьмусь судить хорошо это или плохо, у меня есть лишь предложения о том, как можно воспользоваться этим для создания эффективных отношений между объектами (модулями).
Читать дальше
Замечу, что исторически сложилось так, что MVC в LiveStreet весьма отличается от привычного представления в других фреймворках.
Модель здесь заменяется связкой модуль+сущность+маппер, причем, если сущность представляет из себя стандартный ООП-объект с набором свойств и методов, то модули и мапперы, это просто наборы функций для работы с определенными типами данных, что скорее похоже на библиотеки из структурного программирования, чем на стандартный ООП.
Я не возьмусь судить хорошо это или плохо, у меня есть лишь предложения о том, как можно воспользоваться этим для создания эффективных отношений между объектами (модулями).
Читать дальше
Ставим хук внутри шаблона.
12
Появилась возможность устанавливать хуки прямо внутри шаблона —
Делается это за счет плагина к Smarty hook, например:
Предлагаю определиться какие нужны стандартные хуки? Сейчас добавлено только два: body_begin и body_end, соответственно вызываются в начале HTML тега BODY и в конце.
Делается это за счет плагина к Smarty hook, например:
{hook run='body_begin'} вызовет хуки повешенные на событие 'template_body_begin'(обратите внимание, что приставка template_ добавляется автоматически, если хук вызван из шаблона), а их результат в виде строки вернется в шаблон.Предлагаю определиться какие нужны стандартные хуки? Сейчас добавлено только два: body_begin и body_end, соответственно вызываются в начале HTML тега BODY и в конце.
Переопределение методов модулей с помощью ...Hook'ов!
28
В LiveStreet 0.4 появилась возможность переопределять не только целиком модули, но и отдельные методы. Это позволить разным плагинам бесконфликтно переопределять разные методы одного модуля.
Принцип действия этого механизма основан на Hook'ах:
Пример:
Читать дальше
Принцип действия этого механизма основан на Hook'ах:
- Вызов каждого метода сопровождается выполнением хуков — module_ModuleName_MethodName_before и module_ModuleName_MethodName_after, соответственно ДО и ПОСЛЕ вызова метода модуля. В первом случаи в хук передаются параметры вызова метода, во втором передается результат выполнения метода модуля.
- На module_ModuleName_MethodName_before можно повесить специальный хук — delegate, результат выполнения которого и будет «результатом» выполнения метода модуля
Пример:
<?php
class HookTest extends Hook {
public function RegisterHook() {
$this->AddDelegateHook('module_text_parser_before','testHook',__CLASS__,-3);
}
public function testHook($aVars) {
return 'Topic text > '.$aVars[0];
}
}
?>
Читать дальше
Руководство по созданию плагина для v.0.4 на примере "Лента друзей"
91Предисловие
Что такое плагины — .
По мотивам , выполняю обещание — привожу руководство как сделать в виде плагина. Всех тонкостей в одной заметке не расскажешь, но основное постараюсь изложить.
Примечание. Долго не публиковал этот материал, держал в черновиках — на случай «мало-ли-что-измениться». Но думаю, кардинальных изменений в механизме плагинов в ближайшем релизе уже не будет.
Пошаговая схема:
Читать дальше
Использование плагинов в v.0.4
58
Безболезненное расширение функционала — достаточно проблематичный вопрос (под «безболезненностью» я понимаю весь спектр удобства для пользователей движка).
Я думаю, вы еще не забыли, что для добавления новых возможностей в версиях до 0.3.1 включительно используются Хаки и Модули. При этом установка любого стороннего творения дело достаточно хитрое и небезопасное, часто требующее ориентирования в архитектуре и особенностях движка. Для преодоления этих проблем в ядро v.0.4 была введена система плагинов:

К чему мы стремились создавая систему плагинов?
а) расширения функционала (плагины) можно просто установить и также просто убрать (а вдруг не понравилось), сложность этого процесса не зависит от количества расширений, разветвленности структуры их каталогов и т.д.;
б) установка внешних расширений (плагинов) не усложняет обновление основного ядра;
Для тех, кого заинтересовали подробности
Я думаю, вы еще не забыли, что для добавления новых возможностей в версиях до 0.3.1 включительно используются Хаки и Модули. При этом установка любого стороннего творения дело достаточно хитрое и небезопасное, часто требующее ориентирования в архитектуре и особенностях движка. Для преодоления этих проблем в ядро v.0.4 была введена система плагинов:

К чему мы стремились создавая систему плагинов?
а) расширения функционала (плагины) можно просто установить и также просто убрать (а вдруг не понравилось), сложность этого процесса не зависит от количества расширений, разветвленности структуры их каталогов и т.д.;
б) установка внешних расширений (плагинов) не усложняет обновление основного ядра;
Для тех, кого заинтересовали подробности
Обработка изображений: crop, watermark, скругление углов
40
В новой версии livestreet намного улучшена работа с изображениями (и в плане качества, и в плане гибкости). Для обслуживания всевозможных операций с изображениями отведен специальный engine-модуль Image.
Коротко о том, что появилось нового:
1. Решена проблема с некрасивым ресайзом неквадратных аватарок (путем предварительного вырезания наибольшего возможного квадрата).
2. Устранены «почти» все проблемы с обработкой alpha и non-alpha прозрачности («почти»=«на столько на сколько это вообще возможно сделать с помощью PHP+GD2»). По крайней мере прозрачные png теперь можно использовать в аватарках спокойно.
3. Формирование HTML кода выводимого изображения централизировано в одной функции Image_BuildHTML(), которая запрашивает путь к изображению и дополнительные параметры (title,alt,align).
4. Watermark: возможность автоматически добавлять на загружаемые изображения надписи или изображения с достаточно гибкой конфигурацией (пример надписи см выше).
5. Закругление углов изображения.
О том, как пользоваться 4 и 5 поговорим подробнее.
Читать дальше
Эволюция Viewer: управление блоками, слияние и минимизация JS/CSS
23
На SVN работа над LS0.4 кипит, начну понемногу описывать нововведения. Итак, сегодня у нас на очереди модуль Viewer, который постепенно «обрастает» очень вкусными полезностями. В этот модуль добавлено:
1. Управление выводимыми на страницу js,css файлами.
2. Управление выводимыми на страницу блоками через конфигурацию.
Подробнее под катом.
Читать дальше
1. Управление выводимыми на страницу js,css файлами.
2. Управление выводимыми на страницу блоками через конфигурацию.
Подробнее под катом.
Читать дальше
Не грузятся картинки!
6
Помогите, не грузятся картинки. То есть нажимаю на кнопку — дальше вписываю URL, он думает, и выкидывает ошибку «Файл не является изображением». И залить картинку в пост можно только нажав «Выберите файл» и тупо в окне в строчку вставить ссылку. Тогда загрузит.
Решение найдено
Нужно изменить конфигурацию PHP сервера, а именно в файле php.ini (где он у вас, или где его создавать, спросите у хостера) нужна строчка allow_url_fopen = On.
UPD: Если после выше описанных действий возникает ошибка «Не возможно обработать внешний файл», то вам сюда
Решение найдено
Нужно изменить конфигурацию PHP сервера, а именно в файле php.ini (где он у вас, или где его создавать, спросите у хостера) нужна строчка allow_url_fopen = On.
UPD: Если после выше описанных действий возникает ошибка «Не возможно обработать внешний файл», то вам сюда