parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

кеширование загружаемых файлов.

mashi 20.09.2007 11:08 / 20.09.2007 11:12

Внешний php-шный скрипт генерит картинки, например для капчи. И работает он достаточно быстро (0,001--0,009сек), но
на странице таких генерируемых изображений около десятка, а посещаемость страницы сумасшедшая(!)

Решил сделать кеширование через хешфайл, но ситуация не улучшилась, парсерные процесы начали периодически выпадать в core.

В чем может быть проблема? Есть идеи?
<img src="image.html?id=137" />

##########################################################
#image.html
@main[]
...
$response:body[^getImageFile[^form:id.int(0)]]
...
# end of @mian[]


##########################################################
@getImageFile[id][sImageGeneratorPath;sPathToImageCacheDir;hfImages;fImage]
$sImageGeneratorPath[*********************************/image.php]
$sPathToImageCacheDir[$MAIN:CACHE_DIR/images]

$hfImages[^hashfile::open[$sPathToImageCacheDir/cache]]

^if($hfImages.$id){
#	картинка свежая, читаем ее из кеша
	$result[^file::load[binary;$sPathToImageCacheDir/${id}.jpg]]
}{
#	картинки в кеше нет или она не свежая. Делаем новую и создаем ключ в хешфайле
	$fImage[^file::load[binary;${sImageGeneratorPath}?id=$id][$.timeout(5)]]
	^fImage.save[binary;$sPathToImageCacheDir/${id}.jpg]
	
#	Время кеширования.
#	Кешировать будем с разным временем (30--60min), что бы небыло такого, что все картинки состарятся в один и тот же момент.
#	iCacheTime = [рендомное кол-во мин от 30 до 60] + [рендомное кол-во секунд от 1 до 60]
#	1/24/60 = одна минута
#	1/24/60/60 = одна секунда
	$iCacheTime(1/24/60*(^math:random(31)+30) + 1/24/60/60*(^math:random(61)+1))
	$hfImages.$id[ 
		$.value[$id]
		$.expires($iCacheTime) 
	] 	
	$result[$fImage]
}
Интересный момент:
Завел лог для генератора картинок (image.php), куда пишу id картинки, время которое она формировалась и таймстемп.

Вот, взгляните на выборку для 85-й карнтинки. Обратите внимание на таймстемп.

Если минимальное время кеширования 30мин, как такое возможно что она формировалась 10 раз за период с 22:54 до 22:55,
ведь «в один момент времени файл может изменяться только одним скриптом, остальные ждут окончания его работы» (из документации)
#img-id      time            datestamp
 85          0.0022          2007-09-19 22:54:37
 85          0.0022          2007-09-19 22:54:43
 85          0.1084          2007-09-19 22:54:48
 85          0.0022          2007-09-19 22:54:52
 85          0.0033          2007-09-19 22:54:56
 85          0.0995          2007-09-19 22:55:00
 85          0.1087          2007-09-19 22:55:16
 85          0.0816          2007-09-19 22:55:27
 85          0.0021          2007-09-19 22:55:32
 85          0.0017          2007-09-19 22:55:46
 85          0.0973          2007-09-19 23:03:19
 85          0.0018          2007-09-19 23:12:12
 85          0.1268          2007-09-19 23:13:25
 85          0.0022          2007-09-19 23:44:21
 85          0.0059          2007-09-20 00:40:13
 85          0.0025          2007-09-20 01:33:09
 85          0.0058          2007-09-20 02:31:33
 85          0.0021          2007-09-20 03:29:19
 85          0.0022          2007-09-20 04:05:51
 85          0.0153          2007-09-20 04:59:39
 85          0.0020          2007-09-20 05:40:55
 85          0.0021          2007-09-20 06:22:10
 85          0.0057          2007-09-20 07:18:48
 85          0.0056          2007-09-20 08:15:37
 85          0.0720          2007-09-20 08:36:53
(Или я где-то протупил в кешировании?)