Содержание
Limb 2.4-alpha1 release
Краткое описание
Данный релиз представляет из себя демо проект, сделанный на основе Limb 2.4-alpha1. Статус «альфа» означает, что данный релиз нестабилен, API окончательно нестабилизированно и в будущем будет подвержено дальнейшим изменениям, использование в продукционных целях этого релиза нежелательно. Также данный релиз Limb не совместим с серией 2.3.x, причем последующие релизы 2.4 будут увеличивать эту разницу.
Что же именно было сделано:
- Значительное упрощение установки LIMB проекта на веб сервер
- Полная переработка GUI административной зоны
- Улучшенная поддержка I18N - переход на UTF8 кодировку
- Общая переработка кода и ускорение исполнения
Значительное упрощение установки LIMB проекта на веб сервер
Теперь Limb не предъявляет требований к тому, чтобы проекты устанавливались именно в корень директории хоста. Также наконец-таки удалось избавиться от назойливой приставки /root в каждом url.
Использование PathInfo
Теперь все запросы к системы проходят через скрипт index.php(root.php больше не существует). В самом базовом случае доступ осуществляется через стандартный метод CGI - PathInfo, т.е все запросы к системе выглядят так: index.php/path/to/some/object?foo=1&bar=2.
Поддержка запросов через PathInfo теоретически позволяет использовать LIMB с другими web серверами нежели Apache. К сожалению, нам так и не удалось включить поддержку PathInfo в IIS(хотя таковая присутствует), поэтому утверждать на 100% мы не можем.
"Читабельные" ссылки
Для того, чтобы url имели более «читабельный», можно использовать различные методы, одним из самых популярных является Apache mod_rewrite. Демо проект содержит .htaccess с настроенными правилами mod_rewrite. О том, что используется mod_rewrite необходимо явно указать в настройках проекта(setup.php, setup.override.php) используя константу ENABLE_MOD_REWRITE:
... define('ENABLE_MOD_REWRITE', true); ...
Технические детали
Новые константы
Limb автоматически объявляет следующие константы:
HTTP_BASE_PATH - http расположение Limb проекта, к примеру, http://dot.com/limb
HTTP_GATEWAY_PATH - http расположение Limb шлюза, который обрабатывает все запросы. К примеру, в базовом случае http://dot.com/limb/index.php, в случае же использования mod_rewrite HTTP_GATEWAY_PATH == HTTP_BASE_PATH
HTTP_SHARED_PATH - http расположение Limb shared директории
Все эти константы обязательно оканчиваются «/», имейте это в виду при их использовании
Данные константы регистрируются глобально в шаблонах, их аналоги: {#HTTP_BASE_PATH}, {#HTTP_GATEWAY_PATH}, {#HTTP_SHARED_PATH}.
<limb:HTTP_BASE>
Также был добавлен новый тег <limb:HTTP_BASE>, который делает следующее:
- регистрирует глобальные JavaScript переменные HTTP_BASE_PATH, HTTP_GATEWAY_PATH и HTTP_SHARED_PATH
- вставляет html тег <base href=«HTTP_BASE_PATH»>. Это сделано для того, чтобы упростить поддержку пользовательских ссылок в контенте, теперь внутренняя ссылка /news/foo должна выглядеть как news/foo, тег <base> обеспечивает добавление пути до Limb проекта.
fetcher
fetcher добавляет новый аттрибут http_path к каждому выбранному объекту для его использования непосредственно в шаблоне
Полная переработка GUI административной зоны
Текущая реализация нового GUI была протестирована только в Mozilla FireFox, полноценная поддержка других браузеров намечена в последующих релизах.
Обновленный дизайн
Использование верстки, основанной на фреймах, выявило определенные проблемы с юзабильностью, поэтому в новом дизайне мы полностью от них отказались. Новый дизайн также включает в себя переработку стилей, иконок и проч. элементов GUI.
Начальная унификация разметки шаблонов для административной зоны
Были добавлены новые теги, позволяющие унифицировать шаблоны для административной зоны.
Для форм:
<admin:form> <admin:form:header> <admin:form:title>...</admin:form:title> <admin:form:icon>...</admin:form:icon> </admin:form:header> <admin:form:hint>...</admin:form:hint> <admin:form:tabs> <admin:form:tab_item id='tab1'> <admin:form:tab_label>...</admin:form:tab_label> <admin:form:tab_content></admin:form:tab_content> </admin:form:tab_item> ... </admin:form:tabs> <admin:form:buttons> <admin:form:buttons:cancel> ... </admin:form:buttons> </admin:form>
Для таблиц:
<admin:list> <admin:list:title>...</admin:list:title> <admin:list:item> <admin:list:cell>...</admin:list:cell> <admin:list:cell>...</admin:list:cell> </admin:list:item> <admin:list:buttons>...</admin:list:buttons> </admin:list>
Переработка html разметки
Мы постепенно переводим существующую разметку на div элементы и максимальный перенос информации по форматированию в css, чтобы сделать разметку более чистой и простой в поддержке. В будущем будет сделан упор на соответствие W3C стандартам и переход к XHTML.
Переработка JavaScript
Прослойка JavaScript была основательно переработана, таким образом, чтобы соответствовать стандарту пакетов библиотеки JSAN. Теперь весь код находится в пространстве имен Limb, что позволяет использовать сторонние библиотеки без опасения пересечения имен. Стоит, однако, заметить, что переработка клиентского кода не завершена и ожидаются значительные изменения в последующих релизах.
Использование AJAX
Для улучшения пользовательского интерфейса выбора элемента из дерева была использована технология AJAX. Мы планируем использование AJAX в более широких масштабах в последующих релизах, что теоретически должно позволить упростить нагрузку на сервер.
Улучшенная поддержка I18N - переход на UTF8 кодировку
В Limb были добавлены базовые инструменты для работы с мультибайтной кодировкой UTF8. Весь не ASCII контент был преобразован в UTF8 кодировку.
Для работы с UTF8 были добавлены следующие глобальные функции(аналоги встроенных в PHP):
_substr($str, $start, $length=null) _explode($sep, $str) _str_replace($s, $r, $str) _ltrim($str, $charlist='') _rtrim($str, $charlist='') _trim($str, $charlist='') _strtolower($string) _strtoupper($string) _strpos($haystack, $needle, $offset=null)
Данные функции делегируют обработку одному из драйверов, скажем, если расширение mbstring доступно, то будет использоваться оптимизированный драйвер. Также существует базовый драйвер, которые не зависит от внешнего расширения и использует стандартные функции PHP, естественно, в ущерб производительности.
По умолчанию, однако, загружается драйвер, который манипулирует однобайтовыми строками. Т.к UTF8 совместима с ASCII, задействовать именно мультибайтные драйвера имеет смысл только по необходимости. Делается это с помощью объявления константы ENABLE_UTF8 в setup.php(setup.override.php):
... define('ENABLE_UTF8', true); ...
Следует четко отдавать себе отчет, когда именно целесообразно применять данные функции вместо встроенных. Разобраться с тонкостями UTF8 поможет детальное описание Harry Fuecks'а.
Общая переработка кода и ускорение исполнения
Мы постепенно повышаем качество кода 2.x, дабы тот соответствовал уровню 3.x, однако мы ни в коем случае не пытаемся сделать PHP4 совместимый клон ветки 3.x. Обсуждение дальнейшего развития 2.x можно почитать в форуме.
В данной версии Limb были добавлены новые уровни прозрачного кеширования, которые позволяют заметно ускорить время исполнения среднего запроса к системе.
Кеширование дерева
Был добавлен класс caching_tree, который обворачивая materialized_path_tree, кеширует все запросы к дереву в файловую систему, чтобы кеш был доступен между запросами. Любое изменение дерева полностью удаляет кеш, что позволяет иметь всегда синхронизованную версию дерева.
Данный функционал находится в стадии тестирования и по умолчанию отключен(в демо проекте включен), его можно включить, поместив следующую строку в setup.php(setup.override.php) проекта:
define('ENABLE_TREE_CACHE', true);
Кеширование запросов к БД
Был добавлен класс декоратор db_caching_driver, который кеширует результаты одинаковых запросов к БД в течении одного запроса.
Данный функционал находится в стадии тестирования и по умолчанию отключен(в демо проекте включен), его можно включить, поместив следующую строку в setup.php(setup.override.php) проекта:
define('ENABLE_DB_CACHE', true);

Обсуждение