Posts Tagged ‘php’

Как сократить количество правил в ACL (Access Control List)?

Posted in Статьи on февраля 19, 2009 by korchasa – 4 Comments

Главная проблема ACL – ее размер

Из этой проблемы формируются две гадости: во-первых правила долго писать, во-вторых по ним искать сложно. Попробуем пойти нестандартным путем и решить проблему, сделав роли более селективными.
read more »

Организация "кусочкового" кеширование HTML

Posted in Статьи on апреля 8, 2008 by korchasa – 3 Comments

Навеяно парой статей на Хабре, и тем, что вчера сделал cache тег для Macro.
read more »

Тесты производительности различных cache storage

Posted in Статьи on марта 20, 2008 by korchasa – 9 Comments


Version 0.4

Ну вот опять!

Передо мной в данный момент стоит задача сравнить популярные бытрые хранилища данных, основанные на использовании оперативной памяти. Найденные сравнения(например, вот это) не совсем подходят, так как необходима информация не только о скорости get/set операций, но и о add/delete (их предполагается использовать для создания мьютексов).
read more »

PHP 5.3: что пых грядущий нам готовит?

Posted in Статьи on февраля 22, 2008 by korchasa – 4 Comments

То о чем так долго говорили большевики…

Кратенько:

  • пространства имен
  • mysqlnd
  • позднее статическое связывание
  • динамические вызовы статических методов
  • Прочие изменения

А теперь подробно…
read more »

Тесты PHP шаблонизаторов

Posted in Тесты on февраля 8, 2008 by korchasa – Be the first to comment

Два дня убил на эти тесты и небольшие оптимизации macro. А теперь <звуки горна: та-да>:

Limb template engine benchmark

Примечания:

  • В роли опкод-кешера используется APC.
  • Постфикс ‘one_tpl’ указывает, что шаблон один, и нет инклудов и враппов.
  • macro_sl – версия macro – с простым локатором шаблонов.
  • macro_sl_boundled – версия macro – с простым локатором и объединенная в один файл.

SVN:

https://svn.limb-project.com/limb/misc/template_engines_bench/

Текущее положение дел таково:

name rps %
php_one_tpl 2647 100%
php 2183 82%
blitz-ctx-arr 1994 75%
macro_sl_bundled 1736 66%
blitz 1521 57%
quicky_one_tpl 1457 56%
smarty_one_tpl 1389 52%
macro_sl 1247 47%
smarty 942 36%
quicky 839 32%
macro 768 29%

Работа с UTF-8 в PHP

Posted in Анонсы on января 24, 2008 by korchasa – Be the first to comment

Ребята из WACT собрали, упорядочили и выложили список “проблемных” мест в PHP, с точки зрения использования UFT-8:

Полную версию можно прочесть здесь.

4 в 1 – простой комбайн для оптимизации статики

Posted in Анонсы on января 24, 2008 by korchasa – 5 Comments

Наткнулся на интересную библиотеку. Вот перевод интродакшена:

Как уменьшить время загрузки сайта в 5 раз, тремя строчками кода.

Есть 4 относительно простых способа, с помощью которых вы можете уменьшить время загрузки страницы:

  • делать меньше HTTP запросов
  • выставлять expires на далекое будущее
  • сжимать компоненты вашей страницы gzip’ом
  • обфускачивать ваши JavaScript и CSS файлы, а так же сам HTML-код

После моего поста об объединении CSS и JavaScript файлов, я написал PHP-скрипт, который будет автоматически применять все вышеперечисленные способы. Все, что вам нужно сделать, это поместить следующий код в начало своего PHP-файла:

require_once ( 'class.compressor.php' ) ;
$compressor = new compressor ( 'css,javascript,page' ) ;

А этот код в конец:

$compressor -> finish ( ) ;

read more »

Inclued. Профайлинг подключаемых файлов в PHP

Posted in Анонсы on января 20, 2008 by korchasa – 7 Comments

Не все знают, но существует удобная утилита для определения подключаемых (include, require) файлов в PHP. И зовется она — Inclued. В данный момент последней версией является 0.3 (inclued-0.3.tar.gz 7.5Кб).

read more »

Строгая типизация в PHP

Posted in Анонсы on ноября 23, 2007 by korchasa – Be the first to comment

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

Специально для таких любителей сотворить геморрой на пустом месте (а скорее не себе, а своему подчинённому), есть PECL’овское расширение SPL_Types, которое вводит строгую типизацию. Пример кода можно найти тут.

Вкратце:

getMessage();
}

Меньше кода ?== больше ям

Posted in Статьи on ноября 15, 2007 by korchasa – Be the first to comment

Вроде бы все всё знают, но почему не все всё используют? Меньше кода, хорошего и разного? Или читаемость все таки теряется?

1. Присвоение в сравнениях

Больше:

$id = $request->getId();
if(!$id) {
 return false;
}

Меньше:

if(!$id = $request->getId()) {
 return false;
}

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

2. Тернарный оператор, вместо if

Больше:

if($id) {
 return $id;
} else {
 return false;
}

Меньше:

return ($id) ? $id : false;

Читаемость нисколько не снижается. ИМХО их и объединять можно:

$a = ($a) ? a : ($b) ? $b : 'default';

3. “Вытаскивание” элементов массива в текущий контекст

Больше:

function resolveArray($params) {
 if(array_key_exists('foo', $params)) {
   return $params['bar'];
 }
}

Меньше:

function resolveArray2($params) {
 extract($params);
 if(isset($foo)) {
   return $bar;
 }
}

или

function resolveArray3($params) {
 list($foo, $bar) = $params;
 if(isset($foo)) {
   return $bar;
 }
}

Использование extract – несколько порочная практика, ибо непонятно откуда переменные берутся. Использование list’а в этом плане лучше, но он завязан на порядок следования элементов…гад.

Поэтому в больших методах лучше все таки вытаскивать “ручками”:

function resolveSomeArrayInformation3($params) {
 $foo = array_key_exists('foo', $params) ? $params['foo'] : false;
 $bar = array_key_exists('bar', $params) ? $params['bar'] : false;
 if(isset($foo)) {
   return $bar;
 }
}

, ибо можно нормальные значения по умолчанию задавать и наглядность не теряется. А если писать влом, то используйте возможности вашей IDE (она же позволяет использовать шаблоны, правда?).

4. Инициализация в объявлении цикла

Больше:

$count = count($array);
for($i = 0; $i < $count; $i++) {}

Меньше:

for($i = 0, $count = count($array); $i < $count; $i++) {}

Вполне нормально для меня, для остальных, говорят, не очень.

5. Операции в объявлении цикла

Больше:

for($i = 0; $i < 10; $i++) {
 $str .= $i;
}

Меньше:

for($i = 0; $i < 10; $str .= $i++);

Тоже самое, что и в предыдущем.

6. Простое позиционирование в строке

Больше:

$current_letter = substr($str, $i, 1);

Меньше:

$current_letter = $str{$i};

Читаемость лучше, однозначно стоит применять.

И так далее...