Я использую массив сессии для кэширования блоков информации, полученной от дб:
$result = mysql_query('select * from table');
array_push($_SESSION['data'],new Data(mysql_fetch_assoc($result)));
Мой вопрос, там limit/a большой объем информации, который может/должен быть розданным на сессии? Опрометчиво или значительно препятствие производительности, чтобы сделать это?
По умолчанию данные $ _SESSION хранятся на диске в каталоге / tmp вашего сервера. Пока у вас есть достаточно места и вы не достигли предела памяти PHP, все в порядке.
Однако, если вы пытаетесь кэшировать запрос, который является ЖЕСТНЫМ для большего числа пользователей, вы можете захотеть использовать что-то вроде APC или memcache, не привязанного к отдельному пользователю. В противном случае вы, по сути, собираетесь кэшировать один и тот же результат 1x для каждого пользователя, а не использовать кеш для всех пользователей.
Поскольку данные сессии хранятся в файле (или записи базы данных) на вашем сервере, не имеет значения, сколько данных вы в нем храните. Я бы просто не советовал хранить огромные объекты.
Вместо этого вы можете посмотреть на APC или memcached для кэширования результатов, так как это не кэш для каждого пользователя, и он использует память вместо файлов.
Если вам не нужна другая переменная, я думаю, что ответы выше лучше, но один из моих любимых маленьких синтаксических трюков заключается в том, чтобы воспользоваться тем фактом, что присвоение является lvalue, так что с небольшой перегруппировкой скобок:
(my $string = $webpage) =~ s/^$domain//g;
вы можете сделать копию и изменить ее в одном утверждении.
Также, наряду с другими вещами, которые немного странно в этом коде, нет много точки к /g
на образец, начиная с ^
. Он не может совпадать более одного раза.
В стандарте C отрицательный модуль не определен, и многие компиляторы C дадут вам то, что дает Java. В python, однако, вы всегда получите положительное число, которое часто более полезно, потому что это означает, что вы можете сделать сложение по модулю, и вычитание. Если отрицательное значение по модулю даст отрицательное значение, оно не будет работать должным образом.
Я понятия не имею, какие преимущества имеет получение отрицательного числа из модуля.
-121--1862570- Ммм, сложно. Думаю, вы могли бы сохранить его на сеансе. Реальный вопрос: хотите ли вы, чтобы вся эта информация сериализовалась и несериализовалась каждый раз, когда клиент делает запрос?
Я думаю, что было бы нормально сохранить его там, если вы будете использовать всю эту информацию на каждой странице вашего веб-сайта, но это невозможно. Было бы лучше сохранить эту информацию в каталоге, таком как /temptables/sometable/
, и каждый файл будет иметь имя сеанса. Вы можете использовать session _ id
, чтобы получить его, и сохранить и загрузить информацию на страницах, которые вы должны использовать с:
$info = unserialize(file_get_contents('/templatebles/sometable/'.session_id().'.ser'));
и сохранить с:
file_put_contents('/temptables/sometable/'.session_id().'.ser'), serialize($info));
Но вам нужно cron задание, чтобы очистить этот каталог для старого файла. Можно получить сеанс из имени файла и запросить некоторую переменную, например, «itsalive», используя session _ start ()
или сделав что-то вроде file _ exists (session_save_path (). '/sess _ '. $ session _ name)
, чтобы проверить, следует ли удалить временный файл.
По умолчанию сеанс сериализуется и записывается на диск, поэтому в зависимости от размера и количества пользователей работа может замедлиться. Однако обе вещи можно изменить (все подробности см. В руководстве по сеансу http://php.net/session ), например, используя memcache для хранения данных в памяти. Лучше всего попробовать его в среде, максимально похожей на рабочую систему, и проверить полученную нагрузку и пропускную способность.
Проверьте, Utf8Checker это простой класс, который делает именно это в чистом управляемом коде.
Примечание: как уже указывалось, "определение кодирования" имеет смысл только для байтовых потоков. Если у вас есть строка, она уже закодирована от того, кто уже знал или угадал кодировку, чтобы получить строку в первую очередь.
-121--689798-я не пробовал/использовал это, но идея для подхода:
остановить/прервать перерисовку холста при КАЖДОМ событии прокрутки ждать 1s, а затем начать перерисовку холста при КАЖДОЙ прокрутке.
это приведет к выполнению перерисовки только в конце прокрутки, так как только последняя прокрутка фактически будет непрерывной для завершения перерисовки.
надеюсь, что эта идея поможет вам:)
-121--915225-Я думаю, что ответ будет зависеть от того, где вы храните свои данные и как быстро вы можете перенести их туда.
Если объем данных составляет 44 МБ, и вы находитесь в 1000base-T сети, можно ожидать, что на фактическую передачу THERE потребуется 1 секунда. И 1 секунду перевести обратно..
Если используется локальная память, то компьютер имеет ограниченный объем памяти.
Если вы используете диск, то у вас есть время загрузки/сохранения (диск медленный).
Но имейте в виду, что PHP имеет ограниченный объем памяти, который позволяет использовать скрипт. Я думаю, что установка по умолчанию составляет 8 МБ.
Если вы говорите о больших блоках данных, вы можете рассмотреть Redis , Tokyo Cabinet или другие хранилища ключей/ценностей. Или даже внутренний интерфейс для управления данными/кэшированием, не передавая их через PHP.