#jquery #long-polling
#jquery #длительный опрос
Вопрос:
У меня есть страница, которая использует метод длительного опроса для получения данных с сервера по частям, создавая теги скрипта, содержащие выражения IIFE, которые будут выглядеть примерно так:
<script>
(function(){
$("#blah").append("Some new data");
})();
</script>
Если я получу МНОГО этих лишних <script>
тегов, особенно если новые данные относительно большие, я беспокоюсь, что это начнет замедлять работу страницы.
Будет ли какое-либо преимущество в производительности при удалении тега script из DOM после его выполнения?
<script id="thescript">
(function(){
$("#blah").append("Some new data");
})();
$("#thescript").remove();
</script>
РЕДАКТИРОВАТЬ: я чувствую, что этот вопрос стал крушением поезда, и намерение было неясным. Извинения. Действительно, в конечном итоге ищется ответ на другой вопрос, и это один ошибочный шаг на этом пути.
Комментарии:
1. почему у вас не может быть внешних JS-файлов со всем этим кодом?
2. Не можете ли вы просто longpoll, а затем ajax-ответ в текущий dom?
3. Я получаю большой (неизвестный размер, на самом деле) объем данных из PHP-скрипта. Использование длительного опроса, который создает теги мини-скриптов, когда PHP получает данные, было одним из способов справиться с этим, не взрывая браузер. Возможно, я неправильно понимаю длительный опрос, что, безусловно, возможно.
4. Даже IE6 может работать с большими объектами и массивами js. Но помните, что браузеру придется отображать все содержимое, и обычно это снижает производительность намного быстрее.
5. Флойд: Я пробовал версию моего скрипта с «безмозглым ajax», получая все данные сразу, и с примерно мегабайтом текста, возвращающегося с сервера, весь мой браузер заблокирован. Ищу решения. Возможно, этот вопрос вызывает неправильное дерево.
Ответ №1:
Вместо этого вы могли бы просто вернуть JavaScript и использовать $.getScript()
метод jQuery.
Редактировать:
Возможно, это был бы более прямой ответ.
Если вы запрашиваете скрипт в виде обычного текста, вы можете добавить его в заголовок и удалить.
$.get(url,function(str){
var head = $("head"),
script = $(str);
head.append(str);
str.remove();
},"text");
Я на самом деле не пробовал это, поэтому я не уверен на 100%, что это сработает. Хотя это звучит логично.
Другим вариантом было бы загрузить скрипт в определенный элемент, а затем очистить элемент. Это должно иметь тот же эффект.
Еще раз отредактируйте: вы можете вставить теги скрипта внутри определенного элемента с классом, а затем удалить этот элемент при успешном выполнении вызова ajax, поскольку вы возвращаете больше, чем просто тег скрипта.
Комментарии:
1. Это «очищается после себя» после его выполнения?
2. Да, это так. Он создает скрипт, сохраняет его в локальной переменной, добавляет его в заголовок, а затем по завершении выполнения удаляет скрипт с помощью
head.removeChild( script );
3. Вы можете увидеть это в ядре по адресу code.jquery.com/jquery-1.6.4.js в строке 7787
4. Хотя это может и не решить мою первоначальную проблему, это самый прямой ответ на мой вопрос (и это не ваша вина; это моя ошибка в формулировке).