Это очень распространенная проблема, с которой мы сталкиваемся, борясь с «таинствами» JavaScript.
Давайте начнем с простой функции JavaScript:
function foo(){
// do something
return 'wohoo';
}
let bar = foo(); // bar is 'wohoo' here
Это простой синхронный вызов функции (где каждая строка кода выполняется одна за другой в последовательность), и результат будет таким же, как ожидалось.
Теперь добавим немного завихрения, введя небольшую задержку в нашей функции, чтобы все строки кода не выполнялись последовательно. Таким образом, он будет эмулировать асинхронное поведение функции:
function foo(){
setTimeout( ()=>{
return 'wohoo';
}, 1000 )
}
let bar = foo() // bar is undefined here
Итак, вы идете, эта задержка просто сломала функциональность, которую мы ожидали! Но что именно произошло? Ну, на самом деле это довольно логично, если вы посмотрите на код. функция foo()
после выполнения ничего не возвращает (таким образом, возвращаемое значение равно undefined
), но оно запускает таймер, который выполняет функцию после 1s, чтобы вернуть «wohoo». Но, как вы можете видеть, значение, присвоенное бару, является немедленно возвращенным материалом из foo (), а не что-либо еще, что приходит позже.
Итак, как мы решаем эту проблему?
Давайте попросим нашу функцию для ОБЕЩАНИЯ. Обещание действительно о том, что это означает: это означает, что функция гарантирует, что вы предоставите любой результат, который он получит в будущем. поэтому давайте посмотрим на это в нашей маленькой проблеме выше:
function foo(){
return new Promise( (resolve, reject) => { // I want foo() to PROMISE me something
setTimeout ( function(){
// promise is RESOLVED , when exececution reaches this line of code
resolve('wohoo')// After 1 second, RESOLVE the promise with value 'wohoo'
}, 1000 )
})
}
let bar ;
foo().then( res => {
bar = res;
console.log(bar) // will print 'wohoo'
});
Таким образом, резюме - для решения асинхронных функций, таких как вызовы на основе ajax и т. д., вы можете использовать обещание resolve
значение (которое вы намерены вернуть). Таким образом, короче говоря, вы разрешаете значение вместо возврата в асинхронных функциях.
Неиспользованное использование не влияет на производительность вашего приложения во время выполнения.
Это может повлиять на производительность среды IDE и общей фазы компиляции. Причина в том, что он создает дополнительное пространство имен, в котором должно выполняться разрешение имен. Однако они, как правило, незначительны и не должны иметь заметного влияния на ваш опыт IDE для большинства сценариев.
Это также может повлиять на производительность оценки выражений в отладчике по тем же причинам.
Нет, это просто стиль стиля компиляции / кодирования. .NET-файлы используют полные имена под капотом.
Следующая ссылка Хорошо читайте, почему удалить неиспользуемые ссылки объясняет, как полезно удалять неиспользуемые ссылки из приложения.
Ниже приведены некоторые выдержки из ссылки :
CLR
неиспользуемых ссылочных модулей во время выполнения. Это означает, что вы сократите время запуска вашего приложения, так как требуется время для загрузки каждого модуля и избегает наличия метаданных загрузки компилятора, которые никогда не будут использоваться. Вы можете обнаружить, что в зависимости от размера каждой библиотеки время запуска заметно уменьшается. Это не означает, что ваше приложение будет быстрее после загрузки, но может быть очень удобно знать, что время запуска может быть уменьшено. System.Drawing
и System.Web.UI.WebControls
, вы можете обнаружить, что возникают конфликты при попытке ссылаться на класс Image
. Если вы используете директивы в своем классе, которые соответствуют этим ссылкам, компилятор не может определить, какие из них использовать. Если вы регулярно используете автозаполнение при разработке, удаление неиспользуемых пространств имен уменьшит количество значений автозаполнения в текстовом редакторе по мере ввода. Нет, при компиляции программы выполняется несколько процессов. Когда компилятор начнет искать ссылки (классы, методы), он будет использовать только те, которые используются в коде. Директива using указывает только компилятору, где искать. Многие неиспользуемые операторы могут иметь проблемы с производительностью, но только во время компиляции. Во время выполнения весь внешний код правильно связан или включен как часть двоичного файла.
Код, который не выполняется, не влияет на производительность программы.
Не влияет на скорость выполнения, но может быть некоторое влияние на скорость компиляции / intellisense, поскольку для поиска подходящего класса существует больше потенциальных пространств имен. Я не стал бы слишком беспокоиться об этом, но вы можете использовать пункт меню «Упорядочить использование» для удаления и сортировки операторов using.