PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 10
Jetro Отправлено: 25 Января, 2020 - 14:11:02 • Тема: Правильная подгрузка данных без перезагрузки страницы • Форум: Вопросы новичков

Ответов: 3
Просмотров: 354
По старинке к сожалению не канает, увы. Нужно резать количество выводимых данных. Раньше я как раз и сделал тупо вывод данных при загрузке страницы. Пользователь открыл личный кабинет - все его данные с базы дернулись, обработались и вывелись на странице, а новые через аякс подгружаются. "Вроди все супер, все работает" думал я, пока не появились пользователи, у которых накопилось этак тыщ 10 записей. И все, при загрузке ЛК все скрипит и трещит. А потом появились пользователи, у которых эдак с десяток веток с записями, и в каждой ветке по тех-же 10 тыщ записей. Результат - если сайт все-же прогрузился, и например его загрузку браузер по таймауту не отрубил, то сайт у пользователя из-за простыни текста так тормозит... Вот кстати, по этой причине простой рефреш и не подходит.
Эх... а что такое Ajax знаю прекрасно. Сейчас на сайте большинство манипуляций происходят именно через Ajax. И как результат - переделываю вот. Ajax Подходит для небольшого количества данных, но если количество растет - все, вешайся...
Ajax, кстати, оставил для удаления записей. Тут он подходит идеально - отправил post с id записи, если вернулся ответ 200 - удалил через JS запись у пользователя. В данном случае маловероятно что что-то пойдет не так.
Блочить страницу тож не вариант. В целом главный функционал это вывод новых данных, полученных пользователем или пока открыт ЛК, или пока пользователь отсутствует на сайте. Большинству пользователей старые записи не нужны, но все-же есть те, которые периодически их используют. Вот по этому и приходится извращаться.
Спасибо за информацию, изучу то что советуете, а там уже буду думать дальше.
Jetro Отправлено: 25 Января, 2020 - 02:27:09 • Тема: Правильная подгрузка данных без перезагрузки страницы • Форум: Вопросы новичков

Ответов: 3
Просмотров: 354
Вероятнее всего вопрос будет капец каким глупым, но что-то решение найти не получается никак (скорее всего гуглить разучился). Так что звиняйте.

Собственно, есть страница, которая отображает пользователю 100 записей. При нажатии на кнопку "хачу ищо" с помощью Ajax подгружается еще 100 записей, потом еще 100 и еще. Собственно стандартная ситуация. Решается все прости и красиво с помощью:
CODE (text):
скопировать код в буфер обмена
  1. SELECT * FROM table where owner=user_id ORDER BY id DESC LIMIT 100*X, 100

А теперь усложняем задачу - пока открыта страница, и отображено 100*Х записей, может добавиться, допустим, 5 новых записей. Новые записи я подгружаю на страницу с помощью сокетов. Но теперь, если пользователь захочет подгрузить еще 100, и у нас выполнится запрос, который выше, у нас подгрузяться дублирующие записи, ака 5 штук старых, уже загруженных, и 95 новых.
Как правильно решать подобную ситуацию?
У меня по этому поводу только одна мысль - сохранять в переменных JS количество новых записей, которые были подгружены с помощью сокетов, а потом уже делать запрос на 105 записей. В целом работать то оно будет, но что-то меня терзают сомнения об адекватности такого решения.
Jetro Отправлено: 23 Июля, 2018 - 22:01:36 • Тема: Как правильнее всего отправлять сообщения пользователям? • Форум: Хранение данных, их вывод и обработка

Ответов: 2
Просмотров: 1576
С сокетами еще не работал. Года два назад думал внедрить, но когда начал изучать доступные модули, показалось что это слишком громоздко для такой задачи.

По поводу кэша - идет запрос новых сообщений. Скрипт проверяет наличие кэша нужных данных, и если он есть - грузим его. Если нет, делаем запрос к БД, отдаем полученные данные в ответ на запрос, плюс генерируем с этих данных новый кэш. Вы это имели ввиду, говоря о том, что должно работать без кэша?
Jetro Отправлено: 21 Июля, 2018 - 15:53:20 • Тема: Как правильнее всего отправлять сообщения пользователям? • Форум: Хранение данных, их вывод и обработка

Ответов: 2
Просмотров: 1576
Суть следующая - в личном кабинете пользователя есть окно, куда подгружаются сообщения, поступающие с внешнего сервера.
Сейчас это реализовано следующим способом - сообщение приходят через POST-запрос, загружаются в базу, плюс сразу-же создается apcu-кэш сообщений и их количество, для пользователя, которому поступило сообщение. После этого, если пользователь откроет личный кабинет, у него каждых 5 секунд отрабатывает AJAX-скрипт, который проверяет нет ли новых сообщений (отличается ли количество сообщений с переменной в js-скрипте от количества с кэша, которое подгружается через AJAX) и если количество разное, то AJAX подгружает новые сообщения с того-же кэша.
Сейчас все работает, но мне потребовалось помечать прочитанные сообщения, но это невозможно сделать пока они будут грузиться с кэша. Но если их грузить напрямую с БД, то возникает немаленькая такая нагрузка на БД, из-за чего сайт начинает тупить. Что-то мне кажется что мою задачу можно решить более элегантно, но я не представляю как. Прошу совета.
Jetro Отправлено: 11 Августа, 2015 - 16:47:01 • Тема: Помогите заменить множество запросов одним • Форум: Вопросы новичков

Ответов: 1
Просмотров: 144
Вот собственно такое название, даже не придумал как правильно назвать те извращения, что мне нужны.

Собственно, имеется у меня страница с, так сказать, статистикой. На ней список пользователей, и у каждого пользователя есть строка с, предположим, сообщениями. Эти сообщения записаны в базу данных. В текущий момент я их считаю таким образом:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) AS `count` FROM `messages` WHERE user=1;

То есть обычный подсчет количества записей.
На странице около 100 пользователей. В итоге на каждого пользователя приходится делать этот запрос. А помимо этого запроса делаются еще три. Итого около 400 запросов за загрузку страницы. Из-за такого обилия запросов страница грузится с минуту, а иногда и дольше.

Вот решил оптимизировать все это. Решил начать с подсчета сообщений. Возможно ли все это как-то сделать красиво? Для примера получить с базы всех пользователей и все сообщения типа вот так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `user`, COUNT(*) AS `count` FROM `messages` GROUP BY `user`;

И с полученого массива подтягивать нужного пользователя, или может как-то по другому сделать?
Jetro Отправлено: 03 Декабря, 2014 - 13:59:20 • Тема: Создание переменной POST запросом. • Форум: Вопросы новичков

Ответов: 4
Просмотров: 240
Все, проблема решена.

В .htaccess добавил:
CODE (text):
скопировать код в буфер обмена
  1. php_value auto_prepend_file "register_globals.php"


register_globals.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if (isset($_REQUEST)) extract($_REQUEST);
  3. if (isset($_SERVER)) extract($_SERVER);
  4. if (isset($_SESSION)) extract($_SESSION);
  5. ?>
Jetro Отправлено: 03 Декабря, 2014 - 11:09:50 • Тема: Создание переменной POST запросом. • Форум: Вопросы новичков

Ответов: 4
Просмотров: 240
Теперь все стало на свои места. Включал register_globals, но не заработало, подумал что это не то.
О том, что небезопасно - знаю. Заставить работать нужно только для того, чтобы разобраться как оно работает, да перенести функционал во фреймворк.
Jetro Отправлено: 03 Декабря, 2014 - 10:29:17 • Тема: Создание переменной POST запросом. • Форум: Вопросы новичков

Ответов: 4
Просмотров: 240
Ковыряю несколько скриптов, которые писаны толи для PHP4, толи вообще для PHP3.
Так вот, есть там одна интересная штука - POST запрос превращается в переменную. То есть:
В файл приходит POST следующего вида - xxx=qwerty1%zzz=qwerty2, после чего в скрипте уже существуют переменные $xxx с содержимым qwerty1 и $zzz с qwerty2 внутри.
Сейчас уже подобное не работает, отключили, теперь нужно использовать $_POST[].
Так вот, меня интересует можно ли заставить работать подобную конструкцию? Переписывать все это очень долго. Подумал может включается это какой-то директивой в PHP.INI.
Jetro Отправлено: 26 Декабря, 2013 - 17:15:46 • Тема: Выполнение действия в случае изменения файла • Форум: Вопросы новичков

Ответов: 7
Просмотров: 364
kotyara1979 пишет:
А кто мешает сначала проверить изменился файл с данными или нет, и только если изменился делать обновление нужной части страницы?

До этого я и сам додумался. А вот как проверку реализовать? Вот в чем вопрос был.

likvidator пишет:
Первое,что пришло в голову - при первой загрузке читаем файлик и запоминаем номер последней строки,дальше тямем все,что после,если вытянули чего - запомнили и по кругу

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

caballero пишет:
simplexml парсит быстро - не стоит заморачивтся
а если данных станет много то все равно их нет смысла выводить пользователю в полном обеме.

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

Zuldek, знания PHP не на том уровне, чтобы создавать кеш с данными. Тем более хочется очень простого и красивого решения. Думаю такой вариант мне не подойдет.
Никаких строгих необходимостей нет, хочется всего лишь отображать актуальные данные на открытой странице без нужды её постоянно обновлять.
Самое простое решение это регулярное обновление инклуда по таймеру. Это пройдет если частота обновления данных будет очень большой (несколько раз в минуту). А если обновленные данные будут появляться с частотой один-два раза в день, то смысла обновлять страницу каждых несколько секунд попросту нет.
А каким образом можно узнать размер файла? В гугле куча обсуждений проверки размера файла на диске пользователя, но о проверке размера на сервере не удалось найти ни слова. Думаю можно размер файла хранить не в массиве данных, а, например в отдельном файле, перезаписываемым страницей.
Jetro Отправлено: 26 Декабря, 2013 - 05:25:09 • Тема: Выполнение действия в случае изменения файла • Форум: Вопросы новичков

Ответов: 7
Просмотров: 364
Вот так, даже не смог сформулировать внятного названия темы.

Имеется отображаемый PHP файл "index.php", в который инклудом подключается PHP файл "load.php", который в свою очередь с помощью "simplexml_load_file" подгружает "data.xml" с данными. В XML-файл периодически добавляются данные.
Хочется сделать так, чтобы при просмотре "index.php", файл "load.php" обновлялся в случае изменения "data.xml".
Сделать периодическое обновление "load.php" по времени дело нехитрое - в инете куча примеров на jQuery. Но это ведь некошерно, это сейчас там пару байт, но позже файл то разростется. Зачем издеваться над сервером? По этому задумал сделать обновление страницы только в случае изменения XML-файла, но вот с чего начать - не представляю.
Думаю вполне достаточно будет хотя-бы толчка в нужном направлении.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB