Уважаемые посетители портала Kamensk.NET! Напоминаем вам, что будучи зарегистрированным пользователем вы получаете возможность оставлять комментарии к новостям на сайте и к топикам на форуме, иметь доступ к скрытым разделам и много других благ и привелегий. Пожалуйста заполните регистрационную форму, это отнимет у вас всего лишь несколько минут вашего времени.

Есть варианты увеличить производительность движка.

Ne01eX
Ne01eX аватар
User offline. Last seen 1 неделя 3 дня ago. Не в сети
Зарегистрирован: 12.02.2006
Сообщения:

За счёт уменьшения количества запросов к БД за переводами интерфейса.
Реальных вариантов два:

1. Использование прекомпилированных переводов. Все шаблоны переводов представляют собой обычные gettext po-файлы. Используя прекомпилированные переводы можно избавится от лишних запросов к БД. Необходимо патчить всё и сразу. После установки нового модуля необходимо будет скомпилировать перевод на сервере. То есть одной админкой не обойтись. К тому же модуль Translate Interface и Locale будет уже не нужен. Axel (админ Drupal.ru, признался в личке как-то, что делал такое для пятёрки, но не уточнил почему идея не прижилась).

2. Использование вместо БД для хранения переводов include-файлы. Вариант исполнения можно посмотреть на http://deluxebb.com. Я как-то юзал этот форумный движок на rtklinux (ещё орг), очень был доволен его производительностью (в среднем движок генерирует 10-12 запросов на страницу), в чём можно убедится. Зато переписывать модули можно постепенно.

Фактически это грозит тем, что каждый модуль придётся переписывать. В обоих случаях придётся форкать Drupal. В одну каску я форк не потяну.

Я сейчас делаю тему для Drupal'a, можно будет попробовать её переводы оформить в виде include.

Протянув руку помощи, не забудь разжать кулак.

Real Alex
Real Alex аватар
User offline. Last seen 35 недель 4 дня ago. Не в сети
Зарегистрирован: 06.02.2006
Сообщения:

А насколько скоро выйдет релиз Друпал-7?
Если скоро обновляться, не будет ли этот труд бесполезным?

Ne01eX
Ne01eX аватар
User offline. Last seen 1 неделя 3 дня ago. Не в сети
Зарегистрирован: 12.02.2006
Сообщения:

У друпалеров разработчиков с гулькин х.. вост. После того, как Дрис зарегил фирму и начал развивать Aquila Drupal они как-то резко охладели к core-проекту. Secret

Так что, вытянем форк? Wink

Протянув руку помощи, не забудь разжать кулак.

Real Alex
Real Alex аватар
User offline. Last seen 35 недель 4 дня ago. Не в сети
Зарегистрирован: 06.02.2006
Сообщения:

ну тогда я за Я за!

Электродрель
Электродрель аватар
User offline. Last seen 49 недель 6 дней ago. Не в сети
Зарегистрирован: 29.04.2010
Сообщения:

Ne01eX пишет:

У друпалеров разработчиков с гулькин х.. вост. После того, как Дрис зарегил фирму и начал развивать Aquila Drupal они как-то резко охладели к core-проекту. Secret

Так что, вытянем форк? Wink

Зачем форк? Может разработчик друпала захотят включить ваш код в свой проект

А всё-таки волнистый попугайчик в качестве логотипа Linux смотрелся бы лучше!

Real Alex
Real Alex аватар
User offline. Last seen 35 недель 4 дня ago. Не в сети
Зарегистрирован: 06.02.2006
Сообщения:

Напишу чтобы не забыть.

Есть еще идея сделать кэширование для каждого комментария.
Если в mysql 5 есть триггеры то можно сделать так чтобы при обновлении/удалении комментария, соотв. кэш бы автоматически удалялся.

Ch
Ch аватар
User offline. Last seen 13 недель 5 дней ago. Не в сети
Зарегистрирован: 24.04.2010
Сообщения:

Цитата:

Все шаблоны переводов представляют собой обычные gettext po-файлы. Используя прекомпилированные переводы можно избавится от лишних запросов к БД.

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

Цитата:

Фактически это грозит тем, что каждый модуль придётся переписывать. В обоих случаях придётся форкать Drupal.

Зачем? Все переводы осуществляются с помощью t(). Не проще ли просто переписать эту функцию?

Тоже когда то думал на этим вопросов. Имхо, самый простой вариант сделать парсер кода.
Тупо заменить все вызовы t() на echo. Там где используется множественное число, подставлять собственную функцию либо оставлять t().
Такой подход, позволит сохранить совместимость с оригинальным друпалом. При обновлении достаточно просто обработать парсером все новые файлы и все. Аналогичная ситуация с новыми модулями и темами.

Фактически нужна просто небольшая консольная программулька.

За основу можно взять potx

Кол-во запросов к таблице переводов действительно огромное.

Real Alex
Real Alex аватар
User offline. Last seen 35 недель 4 дня ago. Не в сети
Зарегистрирован: 06.02.2006
Сообщения:

Я еще код не смотрел, я правильно понял - там везде прописано что-то типа

t("English phrase here")

?

Ne01eX, насколько я понял, предложил вынести все фразы в константы как это сделано в joomla, то есть вместо

echo t("English phrase here");

будет

echo ENGLISH_PHRASE_HERE;

а сами константы все будут определены в одном подключаемом файле...

То есть, можно тем же парсером автоматически нагенерировать все константы, и заменить t() на вывод этих констант...

Ch
Ch аватар
User offline. Last seen 13 недель 5 дней ago. Не в сети
Зарегистрирован: 24.04.2010
Сообщения:

А зачем использовать константы? Почему нельзя сразу выводить русский текст?
echo t("English phrase here");
echo 'Русский текст здесь';

Real Alex
Real Alex аватар
User offline. Last seen 35 недель 4 дня ago. Не в сети
Зарегистрирован: 06.02.2006
Сообщения:

Везде же так сделано Smile

Чисто для удобства, если в дальнейшем понадобится изменить текст.
Например некоторые модули ещё не переведены на русский, а так все будет в одном месте.

Хотя когда я модифицировал для себя модули joomla и вордпресс, я тоже не заморачивался с константами и указывал все прямым текстом.

Ch
Ch аватар
User offline. Last seen 13 недель 5 дней ago. Не в сети
Зарегистрирован: 24.04.2010
Сообщения:

>Чисто для удобства, если в дальнейшем понадобится изменить текст.
Думаю все таки не для того что бы изменить текст, а для того чтобы перевести на другой язык.

> предложил вынести все фразы в константы
Это все можно сделать стандартными средствами drupal

в settings.php есть массив
/**
* String overrides:
*
* To override specific strings on your site with or without enabling locale
* module, add an entry to this list. This functionality allows you to change
* a small number of your site's default English language interface strings.
*
* Remove the leading hash signs to enable.
*/
# $conf['locale_custom_strings_en'] = array(
# 'forum' => 'Discussion board',
# '@count min' => '@count minutes',
# );

Если оперативки достаточно можно вынести все в этот массив. И отключить locale.