Где я должен объявить файлы JavaScript, используемые на моей странице? В <голове> </голова> или рядом </тело>?

Этот вопрос основан на ошибочной предпосылке, Хаскелл может это сделать! (хотя это обычно используется только в очень специфических обстоятельствах)

{-# LANGUAGE ScopedTypeVariables, NoMonomorphismRestriction #-}

import Data.Generics

q1 :: Typeable a => a -> Int
q1 = mkQ 0 (\s -> if s == "aString" then 100 else 0)

q2 :: Typeable a => a -> Int
q2 = extQ q1 (\(f :: Float) -> round f)

Загрузите это и поэкспериментируйте с ним:

Prelude Data.Generics> q2 "foo"
0
Prelude Data.Generics> q2 "aString"
100
Prelude Data.Generics> q2 (10.1 :: Float)
10

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

Большинство так называемых обобщенных функций (например, SYB) полагаются либо на ограничение Typeable, либо на Data. Некоторые пакеты вводят свои собственные альтернативные функции, которые служат по существу той же цели. Без чего-то подобного этим классам это сделать невозможно.

38
задан Sinan Ünür 18 June 2009 в 14:56
поделиться

10 ответов

Часто утверждают, что для повышения скорости вы должны помещать теги сценария прямо в конец документа (перед закрывающим тегом тела). Хотя это приведет к самой быстрой загрузке страницы, у этого есть несколько серьезных недостатков.

Во-первых, общая идиома при разработке веб-страниц - иметь файл заголовка, файл нижнего колонтитула и ваш контент посередине. Чтобы свести к минимуму ненужный Javascript, вам часто нужно размещать фрагменты кода на отдельных страницах.

Если вы включаете jquery, например, в конце документа, ваши фрагменты кода jquery (например, готовые документы) должны случиться после этого. Это может быть неудобно с точки зрения разработки.

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

Например, если вы помещаете таблицу в документ и прямо перед тегом закрытия тела помещаете:

$(function() {
  $("tr:nth-child(odd)").addClass("odd");
});

с соответствующим стилем , применяемый эффект часто будет виден. Лично я считаю, что это потенциально ухудшает пользовательский опыт. Я думаю, что часто вам лучше, чтобы страница загружалась немного медленнее (помещая скрипты вверху), если вы не получаете неприятных визуальных эффектов.

Я обычно рекомендую эффективные стратегии кэширования, чтобы вы только должны загружать файлы Javascript, когда они меняются, как в Перегрузка Javascript в PHP (но принципы применимы к любому языку, а не только к PHP), и по-прежнему помещать скрипты в начало. Это намного удобнее.

$(function() {
  $("tr:nth-child(odd)").addClass("odd");
});

при соответствующем стиле применяемый эффект часто будет заметен. Лично я считаю, что это потенциально ухудшает пользовательский опыт. Я думаю, что часто вам лучше, чтобы страница загружалась немного медленнее (помещая скрипты вверху), если вы не получаете неприятных визуальных эффектов.

Я обычно рекомендую эффективные стратегии кэширования, чтобы вы только должны загружать файлы Javascript, когда они меняются, как в Перегрузка Javascript в PHP (но принципы применимы к любому языку, а не только к PHP), и по-прежнему помещать скрипты в начало. Это намного удобнее.

$(function() {
  $("tr:nth-child(odd)").addClass("odd");
});

при соответствующем стиле применяемый эффект часто будет заметен. Лично я считаю, что это потенциально ухудшает пользовательский опыт. Я думаю, что часто вам лучше, чтобы страница загружалась немного медленнее (помещая скрипты вверху), если вы не получаете неприятных визуальных эффектов.

Я обычно рекомендую эффективные стратегии кэширования, чтобы вы только должны загружать файлы Javascript, когда они меняются, как в Перегрузка Javascript в PHP (но принципы применимы к любому языку, а не только к PHP), и по-прежнему помещать скрипты в начало. Это намного удобнее.

Лучше, если страница загружается немного медленнее (помещая скрипты вверху), если вы не получаете неприятных визуальных эффектов.

Я обычно рекомендую эффективные стратегии кэширования, поэтому вам нужно только загружать файлы Javascript когда они меняются, как в Перегрузка Javascript в PHP (но эти принципы применимы к любому языку, а не только PHP), и по-прежнему помещать сценарии в начало. Это намного удобнее.

Лучше, если страница загружается немного медленнее (помещая скрипты вверху), если вы не получаете неприятных визуальных эффектов.

Я обычно рекомендую эффективные стратегии кэширования, поэтому вам нужно только загружать файлы Javascript когда они меняются, как в Перегрузка Javascript в PHP (но эти принципы применимы к любому языку, а не только PHP), и по-прежнему помещать сценарии в начало. Это намного удобнее.

39
ответ дан 27 November 2019 в 03:33
поделиться

Инструмент Yahoo YSlow дает совет по этому поводу:

Проблема, вызванная скриптами, заключается в том, что они блокируют параллельные загрузки. В Спецификация HTTP / 1.1 предполагает, что браузеры скачивают не более двух компоненты параллельно на имя хоста. Если вы подаете свои изображения из нескольких имена хостов, вы можете получить более двух загрузки должны происходить параллельно. Пока загружается сценарий, однако браузер не запускает другие скачиваний, даже на разных имена хостов.

В некоторых ситуациях нелегко переместить скрипты вниз. Если для Например, сценарий использует document.write, чтобы вставить часть содержимое страницы, его нельзя переместить ниже на странице. Также может быть вопросы масштабирования. Во многих случаях способы обхода этих ситуаций.

Альтернативное предложение, которое часто возникает необходимость использовать отложенные скрипты. Атрибут DEFER указывает, что скрипт не содержит document.write, и это ключ к браузеры, которые они могут продолжить рендеринг. К сожалению, Firefox не поддерживает атрибут DEFER. В Internet Explorer сценарий может быть отложенным, но не настолько, насколько желанный. Если сценарий можно отложить, его также можно переместить в нижнюю часть страница. Это сделает вашу сеть страницы загружаются быстрее.

12
ответ дан 27 November 2019 в 03:33
поделиться

Помещая их в , вы заставляете браузер загружать файлы, прежде чем он сможет отобразить страницу. Это приводит к замедлению воспринимаемого времени загрузки.

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

Что лучше всего работает, зависит от вас и от того, как вы разрабатываете свой код.

12
ответ дан 27 November 2019 в 03:33
поделиться

Google pagespeed есть несколько хороших объяснений того, как распараллеливать загрузку скриптов.

Тем не менее, они советуют поместить их в заголовок ваша страница.

4
ответ дан 27 November 2019 в 03:33
поделиться

Причина объявления ближе к концу заключается в том, что ваша страница может начать рисование до того, как придется ждать загрузки .js.

Таким образом, все, что вам нужно в конце не повлияет на отображение страницы, и наоборот.

1
ответ дан 27 November 2019 в 03:33
поделиться

Теги скрипта обычно должны находиться в разделе заголовка. Исключение составляют случаи, когда они выполняют значительную немедленную обработку, которую следует отложить до самой поздней загрузки страницы, чтобы не мешать открытию страницы, как в Google Analytics, или когда фактическое размещение тега скрипта является частью его поведения.

2
ответ дан 27 November 2019 в 03:33
поделиться

Единственная причина для размещения его ближе к концу тела, AFAIK, - это возможность выполнить JavaScript после веб-браузер проанализирует ваш HTML-документ. Например, если ваш JavaScript имеет дело со «всеми элементами с именем hello », браузеру необходимо прочитать весь документ перед выполнением вашего JavaScript. Имеет смысл, не так ли?

Например, в JQuery вы можете поместить свой JavaScript в любом месте документа и использовать:

$(document).ready(function () {
  // your code here
});

... чтобы убедиться, что весь документ был загружен в DOM перед выполнением внутренней функции. Конечно, это можно сделать и с обычным JavaScript, но будьте осторожны, чтобы не нарушить совместимость с некоторыми браузерами, поскольку их потребности, как правило, сильно различаются.

0
ответ дан 27 November 2019 в 03:33
поделиться

Сделайте это рядом с . Причина проста: если вы поместите его в область заголовка , файлы должны быть загружены до того, как можно будет загрузить область тела. В это время пользователь видит только белый экран.

Но это зависит от вашего сайта. Я бы загрузил фреймворки, такие как mootools, в область головы, другие функции для событий или AJAX или что-то еще должны быть загружены рядом с .

0
ответ дан 27 November 2019 в 03:33
поделиться

Мне нравится загружать в голову небольшой файл js, который обрабатывает (1) все, что происходит до отображения страницы, и (2) загрузку других файлов сценариев после загрузки страницы, или по мере необходимости.

1
ответ дан 27 November 2019 в 03:33
поделиться

Думаю, лучше разместить теги сценариев прямо перед закрывающим тегом тела. Потому что:

  • Элементы блокируются от рендеринга, если они находятся ниже скрипта.
  • В IE6, Ресурсы IE7 на странице блокируются от загрузки, если они находятся ниже сценария.

Из этой статьи. Также правило производительности Yahoo 6 - Move Scripts to the Bottom

1
ответ дан 27 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: