Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mimetex + кэширование формул 
:(
    Опции темы
MystDeim
Дата 30.3.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 22.10.2007
Где: Россия->Юбилей ный

Репутация: нет
Всего: нет



Возникла такая проблема: использую "mimetex" для отрисовки формул, но хостеру похоже стало это не нравится и сайт стал выдавать ошибку 500, видимо много ресурсов кушает... Можно ли закэшировать часть страницы вместе с картинками? И как лучше поступить, записать в базу данных или в файлы?
--------------------
Учебные материалы для студентов http://studlab.org
PM MAIL WWW   Вверх
awers
Дата 31.3.2008, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



ZendFramework Cache.
А кешировать то что теперь, 500ую ошибку? )
PM MAIL WWW ICQ Skype   Вверх
Canarat
Дата 31.3.2008, 09:48 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий

Репутация: 5
Всего: 5



Кешируй просто картинки, используя md5 хеш формулы(записывая сгенерированное изображение формулы в статическую картинку). Этого хватит.
PM MAIL   Вверх
MystDeim
Дата 31.3.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 22.10.2007
Где: Россия->Юбилей ный

Репутация: нет
Всего: нет



Цитата

записывая сгенерированное изображение формулы в статическую картинку


Подскажите, как это сделать.

Формулы я всталяю вот так:
Код

<img class="mimeimg" src="<?=mimetex?>?y=2t(1+3t)"> <i>(м)</i>

В константе "mimeimg" путь к скрипту.

--------------------
Учебные материалы для студентов http://studlab.org
PM MAIL WWW   Вверх
MoLeX
Дата 31.3.2008, 14:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



приблизительно так:
1. дописать меметех для кэширования формул (если нет в нем этой возможности)
2. получаем формулу, пихаем ее например в md5(), получаем хеш и проверяем если в в папке (которая отвечает за кэш) данный файл, если да то отдаем, если нету - создаем.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
MystDeim
Дата 31.3.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 22.10.2007
Где: Россия->Юбилей ный

Репутация: нет
Всего: нет



MoLeX, Спасибо, мемтех как раз и пихает в md5().
Цитата

 -DCACHEPATH=\"path/\"
    This option saves each rendered image to a file in directory path/, which mimeTeX reads rather than re-rendering the same image every time it's given the same LaTeX expression. Sometimes mimeTeX disables caching, e.g., expressions containing \input{ } are re-rendered since the contents of the inputted file may have changed. If compiled without -DCACHEPATH=\"path/\" mimeTeX always re-renders expressions. This usually isn't too cpu intensive, but if you have unusually high hit rates then image caching may be helpful. The path/ is relative to mimetex.cgi, and must be writable by it. Files created under path/ are named filename.gif, where filename is the 32-character MD5 hash of the LaTeX expression.
          When caching a new image, mimeTeX also updates the file path/mimetex.log containing a timestamp, filename and LaTeX expression for each new file created. A sample entry looks like


Тока его перекомпилироть надо, а у меня нет доступа к SSH... Может кто-нить под FreeBSD сидит? smile

--------------------
Учебные материалы для студентов http://studlab.org
PM MAIL WWW   Вверх
Fortop
Дата 31.3.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(MystDeim @  31.3.2008,  14:18 Найти цитируемый пост)

Код

<img class="mimeimg" src="<?=mimetex?>?y=2t(1+3t)"> <i>(м)</i>

В константе "mimeimg" путь к скрипту.

Может все же "mimetex"?


Цитата(MystDeim @  31.3.2008,  16:38 Найти цитируемый пост)
Тока его перекомпилироть надо, а у меня нет доступа к SSH... Может кто-нить под FreeBSD сидит? smile

Общий совет. Напиши скрипт обертку для твоего mimetex и внутри этого скрипта вычисляй md5() твоих параметров в частности такого y=2t(1+3t), и уже сам в скрипте определяй нужно ли брать картинку из кеша или запросить ее у mimetex, а затем полученный результат  одновременно сохранить в кеш и вывести пользователю


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 31.3.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Нужно бы еще вставить заголовки кэширования правильные (expired, ets...). Насколько я понимаю, формула однозначно задается своим md5 и перерисовывать ее необходимости нет...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Fortop
Дата 31.3.2008, 17:38 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(ksnk @  31.3.2008,  17:31 Найти цитируемый пост)
Нужно бы еще вставить заголовки кэширования правильные (expired, ets...). Насколько я понимаю, формула однозначно задается своим md5 и перерисовывать ее необходимости нет...

Есть два кеша smile
Клиентский, и серверный smile
серверный кеш - тоже может быть разным smile Но в данном случае он представлен сохраненными/статическими картинками. Т.е. мы не тратим время на вычисления, а отдаем статику. А уж будет он реализовывать кеш сам или возьмет готовое решение - это дело индивидуальное.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 31.3.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Fortop, До моего сообщения обсуждался только серверный кэш. Я прав? Если прав, то обилие смайликов непонятно  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
MystDeim
Дата 31.3.2008, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 22.10.2007
Где: Россия->Юбилей ный

Репутация: нет
Всего: нет



Цитата

Может все же "mimetex"?

Да вы правы!

Цитата

Общий совет. Напиши скрипт обертку для твоего mimetex и внутри этого скрипта вычисляй md5()


Действительно, надо так попробывать smile. Только я не могу понять, как сохранить картинку, которую скрипт отрисует...

Цитата

До моего сообщения обсуждался только серверный кэш


Да, я имею ввиду только серверный кэш.
--------------------
Учебные материалы для студентов http://studlab.org
PM MAIL WWW   Вверх
ksnk
Дата 31.3.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Стоит проанализировать ситуацию... К примеру, если типичной картинкой будет такая - по команде "два зеленых свистка", весь компьютерный класс полез на сервер и все получают одинаковые формулы, в этом случае использование клиентского кэша как бы и не нужно, а вот если юзеры начинают нажимать кнопку "обновить", пребывая в паническом недоумении по поводу отсутствия некоторых формул-картинок, вот в этом случае правильно оформленные заголовки кэширования могут сильно помочь. 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Fortop
Дата 31.3.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(MystDeim @  31.3.2008,  18:48 Найти цитируемый пост)
Действительно, надо так попробывать smile. Только я не могу понять, как сохранить картинку, которую скрипт отрисует...

Вопрос в другом, как у тебя подключается mimetex, т.е. посмотри документацию по нем. Возможно ты обойдешься лишь командой
system('mimetex.cgi ' . $params); где в $params ты укажешь нужные ключи для формулы и имя файла.
Если же нет.... это хуже. В худшем из вариантов сделаешь костыль в виде CURL
Код

//формула
$arg = 'y=2t(1+3t)';
// где-то тут будет проверка, есть ли у нас md5($arg) в кеше)
if (file_exists(md5($arg))) {
//если нет то...
    //указываем адрес и аргументы для CURL
    $cr = curl_init('mimetex.cgi?' . $arg);
    curl_setopt($cr, CURLOPT_HEADER, 0);
    //это чтобы мы получили результат в переменную, а не на экран.
    curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1);
    //выполняем запрос и получаем его результат в $img
    $img = curl_exec($cr);
    curl_close($cr);
    //создаем файл с картинкой и пишем в него.
    file_put_contents(md5($arg), $img);
}
// просто отдаем пользователю картинку например вот так
header('Location: ' . $md5($arg));
die();


мда, так вот - крайне не рекомендуется в самом мануале...
Но если не можешь перекомпилить, то вместо CURL лучше используй system()
Цитата
The complete command-line syntax for mimeTeX is

     ./mimetex [ -d ]            dump gif image on stdout,
               [ -e export_file ]  or write gif image to export_file
               [ expression      expression, e.g., "x^2+y^2",
               | -f input_file ]   or read expression from input_file
               [ -g1 -d ]        dump .pbm-formatted image on stdout
               [ -g1 -e export_file ]  or write .pbm image to export_file
               [ -g2 -d ]        dump anti-aliased .pgm image on stdout
               [ -g2 -e export_file ]  or write .pgm image to export_file
               [ -m msglevel ]   verbosity of debugging output
               [ -o ]            render image with opaque background
               [ -s fontsize ]   default fontsize, 0-5

     -d   Rather than printing ascii debugging output, mimeTeX
          dumps the actual gif (or xbitmap) to stdout, e.g.,
               ./mimetex  -d  "x^2+y^2"  >  expression.gif
          creates expression.gif containing an image of x^2+y^2

     -e export_file   Like -d but writes the actual gif
          (or xbitmap) directly to export_file, e.g.,
               ./mimetex  -e expression.gif  "x^2+y^2"
          creates file expression.gif containing an image of x^2+y^2



Это сообщение отредактировал(а) Fortop - 31.3.2008, 23:58


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Feldmarschall
Дата 1.4.2008, 02:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



мне кажется, не стоит совершать так много телодвижений, исходя из столь расплывчатых догадок про злобного хостера, который подсовывает 500-ю ошибку.
Как минимум, стоит в логе веб-сервера посмотреть - какая именно ошибка происходит. И только потом начинать решать какие бы то ни было проблемы.

Если есть подозрение, что хостеру что-то не нравится - почему бы у него об этом не спросить?
PM   Вверх
ksnk
Дата 1.4.2008, 08:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Код

<img class="mimeimg" src="<?=forumla("y=2t(1+3t)")?>"> <i>(м)</i>


Код

define ('FORM_CACHE','form_cache/'); // сюда будем бросать кости...
...

function forumla($f)
{
  $filename=FORM_CACHE.md5($f);
  if (!file_exists($filename)) {
    //указываем адрес и аргументы для system
    system('./mimetex  -e '.realpath($filename).'  "'.$f.'"');
  }
  return $filename;
}


imho, достаточно...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.