Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Делаю выгрузку данных список большой и очень грузить страницу. Хотелось бы спросить есть ли пути по оптимизации. На данный момент выгрузка идет через пхп модуль который запрашивает процедуру SqlServer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 21:20 |
|
||
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
komilесть ли пути по оптимизацииЧто именно хотите оптимизировать, что устраивает в существующей реализации и что не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2013, 22:08 |
|
||
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
vklekomilесть ли пути по оптимизацииЧто именно хотите оптимизировать, что устраивает в существующей реализации и что не устраивает? Спасибо за участие в обсуждении, на данный момент при обновлении страницы расходуется много времени, время загрузки минута. Это очень долго хочется по быстрее. Код для выборки из БД: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Попробовал добавить индекс в таблицу но не помогло. Посоветуйте что нибудь из своего опыта. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2013, 19:40 |
|
||
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
komil, Под временем загрузки Вы подразумеваете промежуток между отдачей запроса к вебсерверу и до окончания рендеринга ответной страницы или что-то другое? В любом случае, следует уточнить, сколько времени выполняется каждый этап. Поставьте вывод меток времени в самом начале страницы, до коннекта к БД, перед и после sqlsrv_query и после окончания цикла while. Это позволит оценить скорость обработки на стороне сервера. На стороне клиента временные затраты можно посмотреть в файрбаге, например. Теперь смотрим на запрос SELECT. Вы запрашиваете все поля из таблицы, а используете только два. В таблице реально только два поля, или их больше? Все данные, возвращенные в результате запроса, будут сохранены в памяти. Есть смысл ограничить выборку только нужными полями. Меньше данных - меньше затрат ресурсов. Вообще, за "select *" могут и тухлыми помидорами закидать :-) Далее (или это следовало уточнить в первую очередь), а много ли записей в таблице? Обратите внимание, что на каждой записи вызывается iconv. Обилия использования этой функции можно избежать двумя путями. Можно хранить в БД данные в нужной кодировке, а можно конвертнуть уже собранный, полный список опций, сохраняя его в переменной или взяв из буфера вывода. Конечно, первый вариант (без преобразования) предпочтительнее. Разумеется, я не думаю что этот вызов iconv вносит сильные тормоза. Однако, он есть и от него можно избавиться, если хотите. Если записей в таблице ОЧЕНЬ много - сотни, тысячи... Ну, фиг знает, как пользователь может работать с таким списком... да оставим эту головную боль пользователю. Однако, браузеру придется формировать HTML-документ для отображения по полной программе и тут много зависит уже от самого браузера, от плагинов, свободных ресурсов компьютера и т.д. Для начала смотрите, на что уходит эта минута, как она распределяется между этапами формирования страницы - отдельно по серверной части и отдельно по клиентской. А после уж можно будет оценить проблемные места и смотреть в сторону их оптимизации. Ну и дохлый канал передачи данных тоже может вносить свой вклад. Оцените уж и объем передаваемых данных (хтмл-код страницы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2013, 20:37 |
|
||
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
vklekomil, Под временем загрузки Вы подразумеваете промежуток между отдачей запроса к вебсерверу и до окончания рендеринга ответной страницы или что-то другое? В любом случае, следует уточнить, сколько времени выполняется каждый этап. Поставьте вывод меток времени в самом начале страницы, до коннекта к БД, перед и после sqlsrv_query и после окончания цикла while. Это позволит оценить скорость обработки на стороне сервера. На стороне клиента временные затраты можно посмотреть в файрбаге, например. Теперь смотрим на запрос SELECT. Вы запрашиваете все поля из таблицы, а используете только два. В таблице реально только два поля, или их больше? Все данные, возвращенные в результате запроса, будут сохранены в памяти. Есть смысл ограничить выборку только нужными полями. Меньше данных - меньше затрат ресурсов. Вообще, за "select *" могут и тухлыми помидорами закидать :-) Далее (или это следовало уточнить в первую очередь), а много ли записей в таблице? Обратите внимание, что на каждой записи вызывается iconv. Обилия использования этой функции можно избежать двумя путями. Можно хранить в БД данные в нужной кодировке, а можно конвертнуть уже собранный, полный список опций, сохраняя его в переменной или взяв из буфера вывода. Конечно, первый вариант (без преобразования) предпочтительнее. Разумеется, я не думаю что этот вызов iconv вносит сильные тормоза. Однако, он есть и от него можно избавиться, если хотите. Если записей в таблице ОЧЕНЬ много - сотни, тысячи... Ну, фиг знает, как пользователь может работать с таким списком... да оставим эту головную боль пользователю. Однако, браузеру придется формировать HTML-документ для отображения по полной программе и тут много зависит уже от самого браузера, от плагинов, свободных ресурсов компьютера и т.д. Для начала смотрите, на что уходит эта минута, как она распределяется между этапами формирования страницы - отдельно по серверной части и отдельно по клиентской. А после уж можно будет оценить проблемные места и смотреть в сторону их оптимизации. Ну и дохлый канал передачи данных тоже может вносить свой вклад. Оцените уж и объем передаваемых данных (хтмл-код страницы). Спасибо, очень познавательно. На счет SELECT сам уже думал :) если честно данных очень много в таблице и просто выборка прямо с БД относительно долго обрабатывается. Скорее участок уже известен так как выборка из базы долго работает, как оптимизировать выборку с таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2013, 21:26 |
|
||
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
komil, а так в форме более 10-и selectbox-ов и все загружаются с БД, видимо это тоже дает о себе знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2013, 21:29 |
|
||
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
komil, Сам по себе запрос слишком прост, чтоб его оптимизировать. Ну, явно указать только используемые поля, да и на этом и все. Возможно, есть смысл подумать о кешировании. Как часто изменяются данные в таблице? Если это справочник с изменением раз в несколько минут/часов/недель, то есть смысл закешировать селект в готовом виде. Сохранить как файл, например, или в мемкеше. Отдача готового контента из файла будет в тысячи раз быстрее происходить. Ну, над действиями при изменении таблицы придется немного подумать. Едем дальше. Селектов много. Они идентичны или разные? Если идентичны - отдали клиенту один селект, а остальное яваскриптом склонировать. Если селекты разные и с кешированием на стороне сервера уж совсем напряжно, тогда можно посмотреть в сторону динамической их подгрузки. Например, подтягивать их аяксом. В этом случае одновременно пойдут несколько запросов к серверу, которые вполне могут работать параллельно. Впрочем, аяксом можно подтягивать и готовые файлики с кодом селектов. Один момент надо учесть: с кешированием на стороне клиента и на прокси придется разбираться довольно тщательно (или, в крайнем случае, вообще его запретить). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2013, 22:08 |
|
||
|
Выгрузка большого списка
|
|||
|---|---|---|---|
|
#18+
vklekomil, Сам по себе запрос слишком прост, чтоб его оптимизировать. Ну, явно указать только используемые поля, да и на этом и все. Возможно, есть смысл подумать о кешировании. Как часто изменяются данные в таблице? Если это справочник с изменением раз в несколько минут/часов/недель, то есть смысл закешировать селект в готовом виде. Сохранить как файл, например, или в мемкеше. Отдача готового контента из файла будет в тысячи раз быстрее происходить. Ну, над действиями при изменении таблицы придется немного подумать. Едем дальше. Селектов много. Они идентичны или разные? Если идентичны - отдали клиенту один селект, а остальное яваскриптом склонировать. Если селекты разные и с кешированием на стороне сервера уж совсем напряжно, тогда можно посмотреть в сторону динамической их подгрузки. Например, подтягивать их аяксом. В этом случае одновременно пойдут несколько запросов к серверу, которые вполне могут работать параллельно. Впрочем, аяксом можно подтягивать и готовые файлики с кодом селектов. Один момент надо учесть: с кешированием на стороне клиента и на прокси придется разбираться довольно тщательно (или, в крайнем случае, вообще его запретить). Спасибо огромное за ответ, сегодня начну копать в сторону кэширования, данные там статические и редко меняются так что кэш то что надо будет. Другие списки тоже не часто меняются, можно AJAX-ом но хотелось бы чтобы после не мучили меня а чтобы сами пользователи могли менять данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2013, 09:55 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38410473&tid=1463406]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 329ms |

| 0 / 0 |
