Пишу тизерную сеть и немного мучаюсь в сомнениях:
на рекламной площадке размещается код типа <script type=«text/javascript» src=«someurl.com/site_id/block_id»></script>
который, разумеется, подгружает уже полный JS-код для генерации тизерного блока.
Вот я и думаю — передавать клиенту уже отрендеренный блок (логика в php), или отдавать только данные блока в, например, JSON-формате, а рендерить его средствами JS (логика в JS)?
Для максимальной скорости загрузки вынесите всю логику рендеринга в отдельный статичный JS скрипт и сожмите его gzip-ом, а данные блока в JSON подгружайте. Статичный JS закешируется и все летать будет :-) Кроме того можно будет разместить несколько блоков на одной странице и обрабатывать их все тем же одним JS, а не грузить для каждого HTML.
На клиентскую сторону имеет смысл переносить любые задачи, если это:
— обеспечивает экономию ресурсов сервера и/или ускорение загрузки страниц/данных;
— не слишком сильно усложняет сопровождение;
— не наносит ущерба безопасности (скажем, для проверки правильности заполнения форм без дублирования на серверной стороне Javascript использовать не следует).
Если ваш сервер подвиснет, то вместе с ним подвиснут и все странички с тизерами, ожидая загрузки тега <script ...>. Поэтому обычно клиенты грузят тизеры в iframe или используют динамическую подгрузку JS. Для динамической подгрузки можно использовать jQuery.getscript или без JQuery что-нибудь вроде этого — Dynamically loading an external Javascript or CSS file
Первую причину описали в предыдущем комментарии, а вторая — потенциальные проблемы с конфликтами имен. Нужно для всех тегов в тизере обнулить стили (вдруг на сайте есть CSS типа img { padding: 20px; }) и нужно следить чтобы на сайте не было таких же атрибутов class и id (решается добавлением длинного уникального префикса). Опять же, если на одной странице установлено несколько ваших тизерных блоков, нужно чтобы ихние class и id не конфликтовали.
Ну и железный аргумент: так делает гугл (и наверняка еще много кто)
На самом деле у меня используются классы с префиксами, сильно сомневаюсь, что это будет проблемой. Что касается Гугла — предпочитаю не копировать слепо шаблонами. Даже с Гугла.
А по поводу загрузки страницы — да, весомый аргумент, если это так (я этого не знал, с JS мало работаю)… Надо подумать. Спасибо.
Это мне первым делом пришло в голову и я так изначально и сделал. Но я стараюсь оптимизировать приложение для максимальной скорости загрузки блока, поэтому и засомневался в правильности такого подхода.