Javascript / jquery: очистка после однократно выполненных тегов скрипта

#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. Хотя это может и не решить мою первоначальную проблему, это самый прямой ответ на мой вопрос (и это не ваша вина; это моя ошибка в формулировке).