Кэширование данных с использованием скрытых div - PullRequest
3 голосов
/ 03 декабря 2009

Я пытаюсь ускорить время отклика в своем веб-приложении ajax, выполнив следующие действия:

Допустим, пользователь запрашивает страницу, содержание которой не изменяется (например, веб-форма). Когда пользователь делает другой запрос, я «кеширую» форму, помещая ее в скрытый div. Перед отображением новой информации. Таким образом, форма в основном все еще загружена в браузере, но не видна пользователю. Если пользователь снова запрашивает ту же форму, он загружается из скрытого div. Это заметно быстрее, чем отправка туда-обратно для сервера формы.

Я понимаю, что выполнение этого с большим количеством данных, вероятно, приведет к снижению производительности, поскольку браузер сохранит много памяти. Но я наложу ограничение на то, сколько «кэшируется» таким образом.

Теперь, я придумал это сам, поэтому я хотел бы знать, есть ли лучший / устоявшийся способ сделать это. Это работает, как и ожидалось, но я не знаю, каковы возможные недостатки (возможно, связанные с безопасностью?).

Буду признателен за любые предложения. Большое спасибо.

Ответы [ 5 ]

2 голосов
/ 03 декабря 2009

Я делал это раньше. Это может быть полезной техникой. Просто убедитесь, что данные точны, и что вы поддерживаете отключенные пользовательские агенты JS.

РЕДАКТИРОВАТЬ: И что нет лучшего решения.

1 голос
/ 03 декабря 2009

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

1 голос
/ 03 декабря 2009

Хранение кода HTML для вашей формы в переменной JS, вероятно, более эффективно, чем скрытый div с интерпретацией этого кода HTML (форма + поля формы + различная разметка).

Если код формы генерируется одновременно со страницей, просто распечатайте его в переменной JS:

<script language="javascript">
var myFormCode = '<? echo $myFormCode; ?>';
</script>

(это если вы используете PHP ... другие языки не должны быть далеки от этого)

Если ваш код формы генерируется позже, вы можете отправить его в виде текста через JSON:

<?php
  echo json_encode($myFormCode);
?>

... и затем создайте свою форму, когда это необходимо, с чем-то вроде этого на стороне клиента:

<script language="javascript">
  myRealFormDiv.innerHTML = eval(myJSONEncodedTextIGotViaAJAX);
</script>

JS-код, очевидно, не совсем то, что вам нужно набирать, но вы, вероятно, понимаете мою точку зрения.

0 голосов
/ 03 декабря 2009

Другой способ сделать это - установить HTTP-заголовки "Expires" или "Cache-Control" для формы.

Если вы установите заголовок «Истекает» на 1 час в будущем для URL http://example.com/form.html, то в следующий раз в течение часа, когда пользователь перейдет к этой форме, HTML-код будет загружен без прикосновения к серверу.

Если вы правильно версируете свои изображения / CSS / JS и также дадите им заголовки «Expires» на далекое будущее, тогда не будет серверного обхода, плюс вы поможете повысить производительность остальных ваших страниц.

0 голосов
/ 03 декабря 2009

Как насчет использования APC или Memcached ?

Они позволят вам поддерживать разметку html в чистоте, без «скрытых трюков», которые потенциально могут создавать проблемы (у пользователя не включена функция css? Используйте IE6? Как насчет доступности?)

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

...