Увеличиваем скорость 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



Читать дальше
  • +11
  • 08 декабря 2011, 11:12
  • gran

Правильная функция подмены автолоадера в хелпере aceadminpanel

2
зафиксил, чтоб работало с yii :)

файл 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;
    }

Мысли об Object-Relational Mapping в LiveStreet

5
Хочу предложить свои идеи для развития MVC/ORM.

Замечу, что исторически сложилось так, что MVC в LiveStreet весьма отличается от привычного представления в других фреймворках.
Модель здесь заменяется связкой модуль+сущность+маппер, причем, если сущность представляет из себя стандартный ООП-объект с набором свойств и методов, то модули и мапперы, это просто наборы функций для работы с определенными типами данных, что скорее похоже на библиотеки из структурного программирования, чем на стандартный ООП.
Я не возьмусь судить хорошо это или плохо, у меня есть лишь предложения о том, как можно воспользоваться этим для создания эффективных отношений между объектами (модулями).


Читать дальше
  • 0
  • 04 августа 2010, 15:56
  • Ajaxy

Ставим хук внутри шаблона.

12
Появилась возможность устанавливать хуки прямо внутри шаблона — trac.lsdev.ru/livestreet/changeset/848
Делается это за счет плагина к Smarty hook, например:
{hook run='body_begin'}
вызовет хуки повешенные на событие 'template_body_begin'(обратите внимание, что приставка template_ добавляется автоматически, если хук вызван из шаблона), а их результат в виде строки вернется в шаблон.

Предлагаю определиться какие нужны стандартные хуки? Сейчас добавлено только два: body_begin и body_end, соответственно вызываются в начале HTML тега BODY и в конце.
  • +10
  • 18 апреля 2010, 16:50
  • ort

Переопределение методов модулей с помощью ...Hook'ов!

28
В LiveStreet 0.4 появилась возможность переопределять не только целиком модули, но и отдельные методы. Это позволить разным плагинам бесконфликтно переопределять разные методы одного модуля.

Принцип действия этого механизма основан на Hook'ах:
  1. Вызов каждого метода сопровождается выполнением хуков — module_ModuleName_MethodName_before и module_ModuleName_MethodName_after, соответственно ДО и ПОСЛЕ вызова метода модуля. В первом случаи в хук передаются параметры вызова метода, во втором передается результат выполнения метода модуля.
  2. На 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];
	}
}
?>


Читать дальше
  • +10
  • 26 марта 2010, 17:46
  • ort

Руководство по созданию плагина для v.0.4 на примере "Лента друзей"

91
Предисловие

Что такое плагины — читайте здесь.
По мотивам этого, выполняю обещание — привожу руководство как подобное сделать в виде плагина. Всех тонкостей в одной заметке не расскажешь, но основное постараюсь изложить.

Примечание. Долго не публиковал этот материал, держал в черновиках — на случай «мало-ли-что-измениться». Но думаю, кардинальных изменений в механизме плагинов в ближайшем релизе уже не будет.

Пошаговая схема:


Читать дальше

Использование плагинов в v.0.4

58
Безболезненное расширение функционала — достаточно проблематичный вопрос (под «безболезненностью» я понимаю весь спектр удобства для пользователей движка).

Я думаю, вы еще не забыли, что для добавления новых возможностей в версиях до 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. Управление выводимыми на страницу блоками через конфигурацию.

Подробнее под катом.



Читать дальше

Не грузятся картинки!

6
Помогите, не грузятся картинки. То есть нажимаю на кнопку — дальше вписываю URL, он думает, и выкидывает ошибку «Файл не является изображением». И залить картинку в пост можно только нажав «Выберите файл» и тупо в окне в строчку вставить ссылку. Тогда загрузит.

Решение найдено
Нужно изменить конфигурацию PHP сервера, а именно в файле php.ini (где он у вас, или где его создавать, спросите у хостера) нужна строчка allow_url_fopen = On.

UPD: Если после выше описанных действий возникает ошибка «Не возможно обработать внешний файл», то вам сюда livestreet.ru/blog/sollutions/690.html.