Выполнение Javascript в условных операторах

window.onresize = window.onload = function(){
  if(window.innerWidth < 480){
    document.getElementById('alert').onclick = function(){
      alert('<480');
    };
    //large amounts of code
  }
  if(window.innerWidth >= 480){
    document.getElementById('alert').onclick = function(){
      alert('>=480');
    };
    //large amounts of code
  }
}
<button id="alert">Alert</button>

Ответ 1

Да, весь код будет проанализирован

И нет, не весь код будет обработан/выполнен.

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

Означает, что если условие истинно/ложно в функции load load/resize, свойство onclick будет установлено/перезаписано соответствующим образом.

Существует различие между присваиванием и объявлением

назначение:

assigned = function(){ console.log("blabla") }

декларация:

function declared(){ console.log("blablabla")}

объявления функций будут hoisted (то, что вы описываете "анализируется и хранится в памяти до фактического выполнения" ), поэтому:

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

и как примечание, никогда пытайтесь отлаживать js с помощью alert() потому что он остановит все выполнение, если вы не взаимодействуете со всплывающим окном. Это означает, что если ваше предупреждение срабатывает при ширине > 479, и по какой-то причине ваша ширина становится меньше 480 (например, изменение ориентации на устройстве), ваше назначение не произойдет!!!

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

<script>
  var startTime = new Date().getTime();
</script>

// your stuff 

<script>
  console.log(new Date().getTime() - startTime)
</script>

Ответ 2

Производительность двигателей JS отличается как для синхронизации, так и для асинхронного вызова. Если это ansync, да, это будет быстрее и вызвано, только если какие-либо условия будут выполнены иначе, он будет проигнорирован, но код должен иметь логику/условия, чтобы не возникало каких-либо ошибок времени выполнения js. пример - узкое место или одновременное срабатывание двух асинхронных вызовов, в которых ответ зависит друг от друга.

InShort- синхронный код выполняется в последовательности - каждый оператор ожидает завершения предыдущей инструкции перед выполнением. Асинхронный код не должен ждать - ваша программа может продолжать работать.

Это полностью зависит от требований/решений. Если в вашем использовании JS существует много асинхронных вызовов - https://github.com/caolan/async

Ответ 3

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

Итак, даже если у вас много кода или какой-либо бесконечный цикл в блоке, который не выполняется (например, ваш первый блок if не будет какой-либо разницы в производительности. Только проблема заключается в том, что вы обслуживаете его с веб-страницы в сети, то из-за размера файла (если его так много) вы можете получить разницу. Вы можете проверить это, отлаживая ваш код с помощью инструментов chrome dev или firebug. Просто поставьте точку отладки в первом блоке кода, а затем вы сможете ее просмотреть.

Ответ 4

Вы спросили:

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

Я бы добавил бесконечный цикл и запустил его, чтобы увидеть, есть ли эффект, например:

window.onresize = window.onload = function(){
  if(window.innerWidth < 480){
    while(true){
        console.log("abc");
    }
    //large amounts of code
  }
  if(window.innerWidth >= 480){
    document.getElementById('alert').onclick = function(){
      alert('>=480');
    };
    //large amounts of code
  }
}