Есть ли какие-либо негативные последствия получения файла JavaScript, который на самом деле не существует? - PullRequest
7 голосов
/ 20 мая 2010

Если вы выполняете скрипт src = "/ path / to / nonexistent / file.js" в файле HTML и вызываете его в браузере, и в HTML-файле больше нет зависимостей или ресурсов, ожидающих файл или код, который существует в действительности, есть что-то плохое в этом деле?

Да, это странный вопрос. Обоснование заключается в том, что разработчик имеет дело с CMS, которая позволяет при определенных обстоятельствах предоставлять пользовательские (автономные) файлы javascript. Проблема в том, что CMS не очень гибкая, когда дело доходит до создания условных включений для JavaScript. Поэтому проще просто делать ссылки на автономные js-файлы независимо от того, находятся ли они на самом деле по указанному пути.

Поскольку пользователю не отображаются ошибки, следует ли считать эту практику приемлемой?

Ответы [ 6 ]

2 голосов
/ 20 мая 2010

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

1 голос
/ 20 мая 2010
  1. вы должны спросить себя, почему вам было лень проверять это самостоятельно:)

  2. я протестировал 1000 рандомизированных имен файлов javascript, и для загрузки потребовалось несколько наносекунд,так что нет, это не имеет значения.пример:

script src = "/ 7701992spolsky.js"

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

Если, однако, у вас есть случайные доменные имена, которых нет, например,

script src = "http://www.randomsite7701992.com/spolsky.js"

, тогда это займет много времени.

1 голос
/ 20 мая 2010

Если у вас есть скрипт, указанный в теге <head> (не рекомендуется для начинающих), он также несколько замедлит начальное время рендеринга страницы.

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

(По крайней мере, так было с одной ревизией FireFox, надеюсь, они исправили ее с тех пор, как я это увидел ~ 2 года назад. *)

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

Наилучшим вариантом на сегодняшний день является наличие единого непостоянного URL-адреса, который используется в качестве замены для всех «не существующих» файлов JavaScript, который возвращает 0-байтовый ответ с HTTP-заголовками, указывающими UA на кэшируйте его до тех пор, пока коровы не вернутся домой, что должно свести на нет большинство штрафов на загрузку вашего сервера <-> после первого попадания (и это вряд ли должно навредить людям даже при наборе номера)

* Извлеченный урок: не помещайте ссылки script-src в голову, особенно для сторонних скриптов, размещенных вне вашей машины, потому что тогда вы можете иметь удовольствие от того, что клиенты смогут получить доступ к вашему веб-сайту, но риск, что страница будет неработоспособна из-за небольшого количества рекламных JS, которые были недоступны из-за некоторых странностей в Интернете. Даже если они уважаемая сторонняя организация.

1 голос
/ 20 мая 2010

Если ваш веб-сервер настроен на работу с ошибкой 404 («вы, возможно, ищете это» и т. Д.), То вы также вызываете ненужную нагрузку на сервер.

0 голосов
/ 23 мая 2010

Если вы используете asp.net, вы можете изучить использование пользовательских обработчиков (ASHX-файлов). Вот пример:

public class JavascriptHandler : IHttpHandler {

    public void ProcessRequest (HttpContext context) 
    {
      context.Response.ContentType = "text/plain";
      //Some code to check if javascript code exists
      string js = ""; 

      if(JavascriptExists())
      {
        js = GetJavascript();
      }
      context.Response.write(js);
    }
}

Тогда в вашем HTML-заголовке вы можете объявить файл, указывающий на пользовательский обработчик:

src="/js/javascripthandler.ashx"
0 голосов
/ 20 мая 2010

Если вы решите реализовать его таким образом, вы можете настроить веб-сервер так, чтобы, если указанный JS-файл не был найден, вместо 404 он мог вернуть перенаправление (301) в пустой / стандартный JS-файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...