0.00
Рейтинг
0.00
Сила

Оптимизация некоторых методов ядра

UPD: Недавно выяснил, что все эти оптимизации уже сделаны в AltoCMS.
UPD2: Добавил буфер значений для метода ядра GetEntity().
UPD3: Немного переписал класс Config.class.php.

С ЛС я знаком уже больше 3 лет. В течение этого времени следил за развитием движка, а также за быстродействием версий с 0.4* до 1.0*. Поэтому решил проверить, куда уходит процессорное время.
Поставил на тестовый сервер версию 1.0.3.

Параметры сервера:
Intel® Xeon(TM) CPU 3.00GHz 4GB RAM
GNU/Linux 8.5
nginx/1.1.14
Apache/2.2.22
PHP 5.3.23 + APC (на момент теста оказывается, что не работало) + Memcache


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

Они вернулись. Минусы.

Мы возвращаем на сайт минусы, но теперь они будут под присмотром плагина «Magic Rule»

Настройки у нас такие:
/**
 * Список правил
 * Для каждого действия составляется отдельная группа правил, групп может быть несколько
 * Список действий: vote_comment, vote_topic, vote_user, create_comment, create_topic
 * В параметре msg можно указать сообщение, которое будет отображаться пользователю, можно использовать просто текст или указать ключ из языкового файла, например, 'message_cant_vote'
 *
 * Список доступных критериев:
 *	registration_time - время в секундах с момента регистрации пользователя
 *	rating - необходимый минимальный рейтинг
 *	skill - необходимая минимальная сила
 *	count_comment - необходимое минимальное количество комментариев у пользователя
 *	count_topic - необходимое минимальное количество топиков у пользователя
 *  rating_sum_topic - необходимый суммарный рейтинг топиков пользователя за период. По умолчанию период 14 дней, для изменения периода можно указать значение ввиде массива array(rating,period)
 *  rating_sum_comment - необходимый суммарный рейтинг комментариев пользователя за период. По умолчанию период 7 дней, для изменения периода можно указать значение ввиде массива array(rating,period)
 *
 * Любой из критериев можно опустить.
 */
$config['rule']=array(
	'vote_comment' => array(
		'msg' => 'Вы еще не достаточно окрепли!',
		'groups' => array(
			/**
			 * Голосовать за комментарии могут юзеры старше 3-х дней, рейтинг больше -5, написал больше 10 комментариев,
			 * суммарный рейтинг комментариве за последние 7 дней больше -10
			 */
			array(
				'registration_time' => 60*60*24*3,
				'rating' => -5,
				'count_comment' => 2,
				'rating_sum_comment' => array(-10,60*60*24*7),
			),
		),
	),
	'vote_topic' => array(
		'msg' => 'Вы еще не достаточно окрепли!',
		'groups' => array(
			/**
			 * Голосовать за топики могут юзеры старше 3-х дней, рейтинг больше -3, написал хотя бы 1 топик,
			 * суммарный рейтинг топиков за последние 14 дней больше -5
			 */
			array(
				'registration_time' => 60*60*24*3,
				'rating' => -3,
				'count_topic' => 1,
				'rating_sum_topic' => array(-5,60*60*24*14),
			),
		),
	),
	'vote_user' => array(
		'msg' => 'Вы еще не достаточно окрепли!',
		'groups' => array(
			/**
			 * Голосовать за пользователя могут юзеры старше 14 дней, рейтинг больше 3, написал хотя бы 3 топика,
			 * суммарный рейтинг топиков за последние 30 дней больше 0
			 */
			array(
				'registration_time' => 60*60*24*14,
				'rating' => 3,
				'count_topic' => 3,
				'rating_sum_topic' => array(0,60*60*24*30),
			),
		),
	),
);

/**
 * Правила для создания блокировок
 * Группы правил необходимо располагать по приоритету - вверху самые главные
 * Если группа правил сработала, то создается блокировка и обход нижестоящих правил прекращается
 *
 * Параметры правил:
 *	name - название правила блокировки, для учета в таблице блокировок. Название ограничено в 50 символов
 * 	type - список типов голосований, up - за, down - против
 *	target - список сущностей за которые голосуют
 * 	count - количество голосований
 * 	rating - максимальный порог рейтинга пользователя, блокировка используется только если рейтинг пользователя ниже этого
 * 	period - период, за который необходимо считать количество голосований, в секундах
 * 	block_time - время, на которое необходимо блокировать возможность голосования
 * 	block_msg - сообщение, которое будет видеть пользователь при попытке голосования
 */
$config['block_rule_vote']=array(
	/**
	 * Если пользователь за 20 минут успел поставить 5 минусов за комментарии и рейтинг пользователя меньше 3, то блокируем ему голосование на 5 часов
	 */
	array(
		'name' => 'block 1', //
		'type' => array('down'),
		'target' => array('comment'),
		'count' => 5,
		'rating' => 3,
		'period' => 60*20,
		'block_time' => 60*60*5,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
	/**
	 * Если пользователь за 48 часов успел поставить 10 минуса за топики и рейтинг пользователя меньше 5, то блокируем ему голосование на 24 часа
	 */
	array(
		'name' => 'block 2', //
		'type' => array('down'),
		'target' => array('topic'),
		'count' => 10,
		'rating' => 5,
		'period' => 60*60*48,
		'block_time' => 60*60*24,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
	/**
	 * Если пользователь за 3 часа успел поставить 4 минуса за топики и рейтинг пользователя меньше 5, то блокируем ему голосование на 12 часов
	 */
	array(
		'name' => 'block 3', //
		'type' => array('down'),
		'target' => array('topic'),
		'count' => 4,
		'rating' => 5,
		'period' => 60*60*3,
		'block_time' => 60*60*12,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
	/**
	 * Если пользователь за 8 часов успел поставить 3 минуса за пользователя и рейтинг пользователя меньше 10, то блокируем ему голосование на 1 день
	 */
	array(
		'name' => 'block 4', //
		'type' => array('down'),
		'target' => array('user'),
		'count' => 3,
		'rating' => 10,
		'period' => 60*60*8,
		'block_time' => 60*60*24*1,
		'block_msg' => 'Вы слишком агрессивны, нужно отдохнуть!',
	),
);


Всем удачи!

Плагин «Оптимизация и внутренняя перелинковка сайта (Cross linker)», учет пожеланий пользователей


НОВОЕ


  1. теперь для включения синонимайзера необходимо синонимы перечислять через вопросительный знак и запятую (?,) в выражении «чем заменить» — таким образом стало возможным легально использовать запятую в выражении «чем заменить»
  2. в шаблоне developer теперь отображается кнопка «обновить» для контекстного меню топика
  3. при быстром обновлении топика и при пересохранении всех топиков теперь учитывается опция «Не пропускать этот топик через CrossLinker» (раньше она действовала только при публикации и редактировании топика)
  4. убрана поддержка старых версий плагина powered spoiler
  5. опция при создании/редактировании топика «Не пропускать этот топик через CrossLinker» теперь доступна для всех типов топиков в ЛС (вопрос, фотосет и т.п.)
  6. на тулбаре теперь доступна кнопка для быстрого доступа к админке Cross linker
  7. при нажатии на ESC закрывается контекстное меню
  8. теперь личные сообщения добавлены в список исключений для обработки плагином по-умолчанию
  9. интервал пауз между запросами к серверу на пересохранение топиков вынесен в интерфейс на страницу пересохранения топиков
  10. теперь есть возможность поставить процесс пересохранения топиков на паузу и продолжить в случае необходимости
  11. при создании правила при вводе выражения замены (что заменить) есть автокомплитер по уже созданным словоформам (правилам)
  12. доступен новый режим переключения между автоматической заменой тегов в текстах и ручной установкой: теперь можно вручную выбрать все теги, которые следует обрабатывать в текстах, для этого в настройках появилась отдельная страница, на которой которой показываются все теги на сайте с возможность отметить нужные.
  13. внутри тега code теперь не происходит никаких замен
  14. добавлено изменение порядка правил — теперь можно передвигать правила по списку вверх/вниз, регулируя тем самым важность обработки. Например, чтобы правило замены с «парк отдыха» было обработано раньше чем просто «парк», его нужно передвинуть выше по списку над правилом «парк».
  15. местами причесан код
  16. есть небольшие изменения в интерфейсе
  17. «в коробку» добавлен новый пользовательский шаблон «справка»
  18. теперь можно пересохранять также и комментарии
  19. исправлен небольшой визуальный баг с быстрым обновлением топика или комментария

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

Плагин "Magic Rule"


Плагин позволяет определить правила для голосования и добавления контента.
Есть возможность создавать правила для блокировки голосования на определенное время, например, тех, кто часто голосует в минус.

GitHubgithub.com/livestreet/lsplugin-magicrule

Пример стандартной конфигурации:
Читать дальше →

Самое узкое место в ЛС - увеличение производительности

Ища пути ускорения движка я постоянно спотыкаюсь об класс конфига (/engine/lib/internal/ConfigSimple/Config.class.php), а именно — меня беспокоит авто замена ключей в конфиге. Такой код мы можем найти в дистрибутиве:

static public function KeyReplace($cfg,$sInstance=self::DEFAULT_CONFIG_INSTANCE) {
  if(is_array($cfg)) {
    foreach($cfg as $k=>$v) {
      $k_replaced = self::KeyReplace($k, $sInstance);
      if($k==$k_replaced) {
        $cfg[$k] = self::KeyReplace($v,$sInstance);
      } else {
        $cfg[$k_replaced] = self::KeyReplace($v,$sInstance);
        unset($cfg[$k]);
      }
    }
  } else {
    if(preg_match('~___([\S|\.|]+)___~Ui',$cfg))
      $cfg = preg_replace_callback(
        '~___([\S|\.]+)___~Ui',
        create_function('$value','return Config::Get($value[1],"'.$sInstance.'");'),
        $cfg
      );
  }
  return $cfg;
}


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

Как улучшить LiveStreet CMS для поисковых систем?

Ни для кого не секрет, что LiveStreet CMS не является seo friendly CMS, но таких CMS не так и много. По этому поводу я написал топик в своем блоге на своем сайте. Адресованный больше разработчикам LiveStreet CMS, чем простым вебмастерам. Хотя, и владельцам сайтов будет полезно почитать. Здесь же я вкратце даю советы по оптимизации сайта на LiveStreet CMS для лучшего ранжирования в поисковых системах. По личному опыту.

Узнать, как улучшить LiveStreet CMS для поисковых систем

Плагин «Оптимизация и внутренняя перелинковка сайта (Cross linker)» - мечты сбываются!

НОВОЕ

Более 20 улучшений! Рассмотрим их поближе:

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

Интеграция с amazon S3 для livestreet 1.0



В каталоге появился бесплатный плагин интеграции LiveStreet 1.0.1 с amazons3. Он загружает картинки из топиков, фотосетов, аватары и фото юзеров на amazons3. Все настройки bucket в конфиге.
Также интегрированы для заливки фото плагины линейки DAO(+market) и LSGallery:

подробнее

Прикрепление топиков: Sticky Topics v2

В последнее время, я смотрю, тема прикрепления/закрепления топиков снова стала актуальной, поэтому…



Для особо нетерпеливых скачать до прохождения модерации можно тут.

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