Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Основы PHP...

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Таблица большая, поэтому перебор не подходит, надо как-то иначе, быстрее

почему? просто подготовьте ее заранее - отсортировать данные, к примеру, создать индекс.
большая - сколько?
 

Цитата:
Может быть лучше занести таблицу в базу, быстрее будет?  

ну либо так. она то и сделает индексы и остальное, если расскажите ей как.

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 22:28 11-05-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Цитата:
Таблица большая, поэтому перебор не подходит, надо как-то иначе, быстрее
 
почему? просто подготовьте ее заранее - отсортировать данные, к примеру, создать индекс.
большая - сколько?
В таблице 200 тысяч записей, весит 2.5Мб. Левая колонка, по которой идет поиск, отсортирована по возрастанию.
 
А вот относительно индекса, я Вашу мысль не понял. Если мы говорим не о базе, а о чистом РНР, то в этом смысле я даже не встречал понятия индексирования. Что Вы имели в виду?

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 09:28 12-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
В таблице 200 тысяч записей, весит 2.5Мб.

фигня
 

Цитата:
Левая колонка, по которой идет поиск, отсортирована по возрастанию.

тогда в чем проблема с поиском?
 

Цитата:
Что Вы имели в виду

самостоятельно создаете индекс и сохраняете его. используете для поиска.
вам тогда не нужно будет даже считывать весь файл, а сразу считываете нужную строку через fopen, fseek, fread
 
например https://ru.wikipedia.org/wiki/B-дерево
а можно, что проще, хранить позиции определенных значений, чтобы стартовать уже не с нуля.
но 2.5 мегабайта это фигня, поверьте.

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 09:33 12-05-2022 | Исправлено: Mavrikii, 09:40 12-05-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый вечер!
 

Цитата:
Цитата:
В таблице 200 тысяч записей, весит 2.5Мб.
 
фигня
Вы оказались совершенно правы, а в целом расклад такой:
- Загрузка файла $ipv4 = file_get_contents('my-geo-2kol.csv');  4 мс;
- Создание массива $m_ipv4 = explode("\r\n", $ipv4); 37 мс;
- Перебор в цикле 93 мс.
Всего 134 мс.
 
Как ни удивительно, но если вместо двух первых операций использовать $m_ipv4 = file('my-geo-2kol.csv'), то совершенно ничего не меняется.
 
Перебор я ускорил путем изменения инкремента: сначала проходим цикл с инкрементом 10000 и находим нужную область, потом ее уточняем с инкрементом 1000, 100, 10 и 1. В итоге время поиска сократилось до 1 мс.
 
Таким образом, самой медленной операцией остается создание массива.  
 
По идее, можно с помощью отдельного скрипта заранее сохранить в текстовом файле массив, а потом его извлечь через unserialize(file_get_contents('array.txt')), но получилось 56мс. То есть, еще медленнее.
 
Похоже, что простых способов ускорения больше нет и на достигнутом стоит остановиться?    
 
 

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 22:15 15-05-2022 | Исправлено: Vladsvn, 22:36 15-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
что простых способов ускорения больше нет и на достигнутом стоит остановиться?

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

Цитата:
unserialize(file_get_contents('array.txt'))

тогда уж лучше JSON. скорить чтение можно бинарной упаковкой.
https://www.php.net/manual/en/function.pack.php

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 22:36 15-05-2022 | Исправлено: Mavrikii, 23:00 15-05-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
тогда уж лучше JSON
json_decode занял 65 мс. Т.е, еще больше.
unserialize(base64_decode($text)) столько же.
 

Цитата:
происходит очень часто - держать в памяти
Происходит при каждом открытии любой страницы сайта, поэтому я бы с удовольствием прописал кеширование всего этого РНР-скрипта в .htaccess, но ведь он не статический, и в .htaccess, как я понимаю, прописывается не файл, а расширение. То есть, это не возможно.
 
Но можно выделить операцию по загрузке файла и формированию массива в отдельный файл, который инклудить в основной скрипт. Этому файлу дать какое-то нестандартное расширение (типа .s5s), и для этого расширения в .htaccess прописать кеширование и подключить это расширение к РНР.
 
Возможно такое осуществить?
 
   
 
 
 

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 23:00 15-05-2022 | Исправлено: Vladsvn, 23:01 15-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Происходит при каждом открытии любой страницы сайта, поэтому я бы с удовольствием прописал кеширование всего этого РНР-скрипта в .htaccess, но ведь он не статический, и в .htaccess, как я понимаю, прописывается не файл, а расширение. То есть, это не возможно.

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

Цитата:
Возможно такое осуществить?

и нет смысла, потому что не понимаете, как идет взаимодействие между php интерператором и http сервером. он кэширует то, что передается пользователю, а не что грузит сам php скрипт.
 

Цитата:
ускорить чтение можно бинарной упаковкой.
https://www.php.net/manual/en/function.pack.php

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

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 23:02 15-05-2022 | Исправлено: Mavrikii, 23:15 15-05-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
и нет смысла, потому что не понимаете, как идет взаимодействие между php интерператором и http сервером. он кэширует то, что передается пользователю, а не что грузит сам php скрипт.
Да, это моя большая ошибка!  
Спасибо!

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 23:10 15-05-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
хотите быстрее - разбейте файл на несколько и читайте именно тот, что вам нужен.
Как всегда, Вы оказались правы, и мне следовало бы сразу последовать Вашему совету. В итоге все сократилось и ускорилось, И общее время исполнения скрипта стало меньше 2 мс. По сравнению с первоначальными 130 мс это заметное достижение.  
 
Еще раз Спасибо!  

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 14:34 19-05-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Проблема разрешилась, поэтому вопрос я убрал.
 
 
 
 
   
 
 
 

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 10:40 03-06-2022 | Исправлено: Vladsvn, 15:42 03-06-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На странице есть возможность комментировать статью и формировать рейтинг комментариев. При этом хочется сделать так, чтобы:
- автор комментария не имел возможности плюсовать свой комментарий;
- не было возможности накликивать.
 
Представляется наиболее удобным для этой цели использовать сессии, в которых фиксировать факт того, что данный посетитель уже проголосовал. Но если кто-то голосует активно, то у него и файлов сессий будет много.  
 
К примеру, если он проголосовал 200 раз (на разных страницах), то на его компе будет 200 файлов.  
 
Можно, конечно, все голосования записывать в массив и в сессии хранить именно массив. Но стоит ли с этим заморачиваться? Какое нам дело до файлов на чужом компьютере (пользователя)? Или как?  

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 19:46 13-07-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

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

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

Цитата:
К примеру, если он проголосовал 200 раз (на разных страницах), то на его компе будет 200 файлов.

сессия, обычно, одна на сайт. но ничто не мешает удалить куку, чтобы сгенерировалась новая сессия, и проголосовать снова. можно только ограничивать по IP, либо требовать регистрации.
 

Цитата:
Какое нам дело до файлов на чужом компьютере (пользователя)?

при чем тут комп пользователя?

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 19:53 13-07-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
требовать регистрации

Цитата:
у пользователя хранится только идентификатор сессии в куке.
Вот это я упустил из вида. Спасибо!
 
 
 
Добавлено:
Какой срок жизни кукисов для этой цели был бы оптимален по Вашему мнению?
 
Дней 10 достаточно?

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 20:17 13-07-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Какой срок жизни кукисов для этой цели был бы оптимален по Вашему мнению?

зависит от ваших целей и задач.
https://www.php.net/manual/ru/session.configuration.php#ini.session.cookie-lifetime

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 20:39 13-07-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Сайт сделан так, что ко всем его РНР файлам инклудится некий файл с именем init.php, в котором собраны разные куски кода:
- соединение с базой;
- коды капчи;
- генерация пароля;
- отправка почты;
- какие-то функции, смысл которых с ходу и не поймешь.
 
Фрилансер так сделал и все работает, но мне не нравится эта свалка, хотя вес этого файла всего лишь 8 Кб.
 
Есть желание разбросать содержимое init.php по отдельным файлам и инклудить их только туда, где они нужны. При этом надо понимать, что в каких-то случаях инклудиться будет два, а то и три файла. А инклуд тоже занимает время.
 
Есть ли смысл делать эту работу?

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 15:37 18-07-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Есть ли смысл делать эту работу?

Нет.
 

Цитата:
А инклуд тоже занимает время.

Нет
 
Рефакторинг делать для красоты не имеет смысла. Будешь добавлять новую фитчу или править код, тогда этим и занимайся.  
Лучше выучи фреймворк какой ни будь если чешутся руки ковыряться и кодить, тогда появятся идеи зачем и как делать этот самый рефакторинг.

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 18:37 18-07-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за совет, но фреймворки меня совершенно не интересуют - я сейчас тем и занят, что от одного из них очищаю сайт.

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 19:11 18-07-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
но фреймворки меня совершенно не интересуют - я сейчас тем и занят, что от одного из них очищаю сайт

Грабли, грабли, грабли. Ты выбрал путь боли. Многие через это проходили. Мой совет сэкономить тебе год жизни, минимум. Удачи.

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 19:14 18-07-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Есть ли смысл делать эту работу?

ради чего?

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 21:22 18-07-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ради чего?

 
Целей я вижу две:
1. Порядок навести. Если в дальнейшем будут доработки, то можно запутаться, могут дублироваться переменные и что-то еще в этом роде;
2. Ненужные коды исполняются и это занимает время.

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 22:03 18-07-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Компьютерный форум Ru.Board » Интернет » Web-программирование » Основы PHP...


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru