Я пытаюсь улучшить производительность сайта, написанного на классическом ASP.
Он поддерживает несколько языков, проблема заключается в том, как это было реализовано. Он имеет следующий метод:
GetTranslation(id,language)
Который называется по всему магазину так:
<%= GetTranslation([someid],[thelanguage]) %>
Этот метод просто ищет идентификатор и язык в SQL и возвращает перевод. Простой.
Но невероятно неэффективно. На каждой странице загружается около 300 независимых вызовов SQL для получения индивидуального перевода.
Я уже значительно улучшил производительность для многих сценариев:
- Инструмент C #, который сканирует файлы .asp и выбирает ссылки на GetTranslation
- Затем инструмент создает метод «объемного кэша», который (в зависимости от страницы) принимает все найденные им идентификаторы и одним махом кэширует результаты в словаре.
- Затем метод GetTranslation был обновлен, чтобы проверять словарь на наличие любых запросов и обращаться к SQL, только если его там еще нет (и кэшировать свой собственный результат, если необходимо)
Это так далеко.
Когда идентификаторы переводов хранятся в базе данных, я не могу их забрать (особенно легко).
В идеале метод GetTranslation будет при каждом вызове создавать одну большую строку SQL, которая будет выполняться только в конце запроса страницы.
Возможно ли это в ASP? Можно ли получить результат <% = ...%>, который будет ссылкой на что-то, что будет позже разрешено?
Я также искренне оценил бы любые другие творческие способы, которыми я мог бы улучшить производительность этого старого, уродливого зверя.