Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Графика > реализация кэша |
Автор: Bog d`An 3.9.2007, 02:37 |
Наверное, не совсем по теме - но все же... функция, которая проверяет есть ли картинка на диске у пользователя и не отличается ли она от той, которая на сервере. если совпадает - соответственно путь в теге img ставит локальный иначе - путь к картинке на сервере. собственно, проблема в сравнением без загрузки - ради чего все и делается. Я думаю, сравнить по размеру файл будет достаточно... так вот вопрос: как сравнить размер файла на сервере и локального? заранее спасибо |
Автор: chup007 3.9.2007, 04:06 |
ты не можешь узнать на сервере, есть ли у клиента какой ли файл |
Автор: Bog d`An 3.9.2007, 05:58 |
вот и предложите как можно реализовать....... |
Автор: vasac 3.9.2007, 07:12 |
Спросить у пользователя: слюшай пользователь, есть ли у тебя картинка. |
Автор: Bog d`An 3.9.2007, 09:49 |
![]() |
Автор: vasac 3.9.2007, 10:33 |
Чего вы сделать то хотите? |
Автор: Diesel Draft 3.9.2007, 11:34 |
Задача не просто, без JS никак |
Автор: ewolf 3.9.2007, 21:28 | ||
Для таких вещей есть вполне стандартный способ кеширования - передача браузеру заголовков о том, сколько максимально можно держать файл в кэше. Если под апач установлен mod_headers можно использовать такую команду в htaccess
в любом случае, можно все картинки выдавать через скрипт, которым подставлять нужные заголовки |
Автор: Bog d`An 6.9.2007, 05:05 |
ewolf, к сожалению тут задача не в использовании кеша браузеров - если я правильно понял вашу идею, а в реализации его же. Что достигается методом подстановки в теге img параметра src как пути к файлу изображения на диске пользователя. файлы расположены определенным образом, так что названия и внутренние каталоги на сервере и диске пользователя совпадают. Соответственно возможна ситуация когда файл на диске пользователя отсутствует, поврежден или не соответствует файлу на сервере(не был обновлен)... Как решить/замаскировать эту проблему без участия пользователя - вот в чем вопрос. |
Автор: Diesel Draft 6.9.2007, 10:09 |
А может просто послать элементарную шапку в рисунку, где будет указывать чтоб кэшировал? |
Автор: ewolf 8.9.2007, 00:43 |
Bog d`An, а для чего требуется такая штука? если просто для снижения нагрузки на сайт, то мой способ вполне подходит. Если, что бы просто показать, что у пользователя такой файл уже есть, то надо либо сохранять на сервере, что пользователь данный файл уже загрузил, либо просто спрашивать у пользователя. Выяснить через JS, есть ли на компьютере пользователя какой-то файл, слава Богу, нельзя. |
Автор: Diesel Draft 8.9.2007, 17:37 |
ewolf, Зачем делать все так складно. Почему мой вариант вам не нравится. Смотрите: Клиент -> Серверу : Дай мне информацию про объекта №3, у меня он есть з датой 08,09,2008 17:42 Если есть изменения Сервер ->Клиенту : Ну на тебе Если нет изменений Сервер ->Клиенту : Ты знаешь, а он и не менялся Клиент -> Серверу : Дай мне информацию про объект №4, у меня его нет совсем Если есть изменения Сервер ->Клиенту : Ну на тебе Если нет изменений Сервер ->Клиенту : Ну на тебе |
Автор: Bog d`An 9.9.2007, 07:12 |
ewolf, предполагается что файлы (порядка 3K штук) юзверь заберет в архиве... штука требуется для снижения нагрузки и уменьшения трафика... Diesel Draft, клиент... в смысле браузер такое умеет? |
Автор: ewolf 9.9.2007, 13:20 | ||
Как складно, какой ваш вариант? Я предложил изначально использовать кэш браузера. Bog d`An, то, что описал Diesel Draft и есть кэш браузера. Еще раз повторю, что проверить наличие на компьютере пользователя файл средставми js нельзя. |
Автор: Diesel Draft 9.9.2007, 15:58 |
Bog d`An, Нет, программа написана на чем то, браузер не умеет сохранять. ewolf, Я не хочу использовать кэш браузера!!! |
Автор: ewolf 9.9.2007, 17:45 |
Diesel Draft, тогда вашу задачу невозможно реализовать. |
Автор: Diesel Draft 9.9.2007, 18:07 |
ewolf, Не обязательно писать на javascript |
Автор: sergejzr 9.9.2007, 18:33 |
Если я правильно понял, то как раз браузерный кэш использовать нежелательно, потому что картинки на сервере могут менятся. (?) 1) Узнать чего либо про диск пользователя, если это не находится в кэше браузера нельзя. 2) Но можно извернуться стандартными методами используя кэш браузера. Каждый раз запрашивая картинку браузер передаёт заголовки, полученные им когда-то при загрузке этой картинки. Итак: Если Браузер заголовки не передал, то картинка запрашивается в первый раз. Мы формируем заголовки сами. У нас есть возможность посадить дату и/или E-Tag - мд5 картинки. Посадили заголовки, отдали картинку. Если браузер заголовки передал, сравниваем дату и/или мд5 с данными картинки на сервере. Если всё совпадает, отдаём заголовок "Not Modified" иначе отдаём картинку. Таким образом у клиента всегда свежая картинка, а структуру картинок на клиенте создавать не надо. Архив с картинками весит столько же, сколько сами картинки, поэтому вместо того чтобы его грузить, лучше просто картинки загрузить в невидимый div. Это HTTP - Protokoll уже лет 15 как умеет. Для подобного и создавался ![]() |
Автор: ewolf 9.9.2007, 18:50 |
Но мы не ищем легких путей. |
Автор: Diesel Draft 9.9.2007, 19:04 |
ты не правильно понял |
Автор: sergejzr 9.9.2007, 19:26 | ||||
В кэше браузера файлы логически лежат точно так же, как на сервере
С этим как раз с помощью HTTP-Protocol прекрасно бороться |