Времена запроса из веб-приложения, но хорошо работают от студии управления

Элемент, который вы пытались найти, не был в DOM , когда ваш скрипт работал.

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

Рассмотрим следующую разметку; сценарий # 1 не находит

, а сценарий # 2 преуспевает:


test div

Итак, что вы должны делать? У вас есть несколько вариантов:


Вариант 1: Переместите свой скрипт

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


  
  

Примечание: размещение скриптов внизу как правило, считается лучшей практикой .


Вариант 2: jQuery's ready()

Отмените свой сценарий до тех пор, пока DOM не будет полностью проанализирован, используя ready() :



Примечание. Вы можете просто привязать к DOMContentLoaded или window.onload, но у каждого есть свои оговорки. jQuery ready() предоставляет гибридное решение.


Вариант 3: Делегирование событий

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

blockquote>

Когда элемент вызывает событие (при условии, что это bubbling g6], и ничто не останавливает его распространение), каждый родитель в родословной этого элемента также получает событие. Это позволяет нам привязать обработчик к существующему элементу и примерным событиям, когда они пузырятся от его потомков ... даже те, которые добавлены после присоединения обработчика. Все, что нам нужно сделать, это проверить событие, чтобы узнать, был ли он поднят нужным элементом и, если да, запустите наш код.

jQuery on() выполняет эту логику для нас. Мы просто предоставляем имя события, селектор для желаемого потомка и обработчик событий:



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


Вариант 4: Атрибут defer

Используйте атрибут defer в

Для справки, вот код из этого внешнего скрипта :

document.getElementById("test").addEventListener("click", function(e){
   console.log("clicked: %o", this); 
});

Примечание: атрибут defer, безусловно, кажется , как волшебная пуля , но важно знать об оговорках ... 1. defer может использоваться только для внешних скриптов, т. е. для тех, у кого есть атрибут src. 2. знать о поддержке браузера , то есть: ошибка реализации в IE & lt; 10

28
задан Matt 25 November 2014 в 20:46
поделиться

7 ответов

Это - то, что я изучил так далеко от своего исследования.

.NET отправляет в настройках подключения, которые не являются тем же как, что Вы получаете, когда Вы входите в систему студии управления. Вот то, что Вы видите, осуществляете ли Вы сниффинг соединения с профилировщиком SQL:

-- network protocol: TCP/IP  
set quoted_identifier off  
set arithabort off  
set numeric_roundabort off  
set ansi_warnings on  
set ansi_padding on  
set ansi_nulls off  
set concat_null_yields_null on  
set cursor_close_on_commit off  
set implicit_transactions off  
set language us_english  
set dateformat mdy  
set datefirst 7  
set transaction isolation level read committed  

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

Для этого случая, я попробовал каждую установку индивидуально, после разъединения и повторного подключения, и нашел что, изменившись arithabort от прочь до на уменьшенном проблемный запрос от 90 секунд до 1 секунды.

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

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

там что-то еще об установке arithabort, которая могла бы заставить запрос работать медленно в некоторых случаях?

решение казалось простым: Просто поместите набор arithabort на в верхнюю часть хранимой процедуры. Но это могло привести к противоположной проблеме: измените параметры запроса, и внезапно это работает быстрее с 'прочь', чем 'на'.

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

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

27
ответ дан Bigwave 28 November 2019 в 03:38
поделиться

У меня были подобные проблемы. Попытка установить с опцией "WITH RECOMPILE" на sproc создает, чтобы вынудить систему повторно вычислить план выполнения каждый раз, когда это называют. Иногда Процессор запросов запутывается в сложных хранимых процедурах с большим ветвлением или операторами выбора и просто вытягивает действительно субоптимальный план выполнения. Если это, будет казаться, "решит" проблему, необходимо будет, вероятно, проверить, что статистические данные актуальны и/или ломают sproc.

можно также подтвердить это путем профилирования sproc. При выполнении его от SQL Studio Managment как IO выдерживает сравнение с тем, когда Вы представляете его из приложения ASP.NET. Если они очень много, это просто укрепляет то свое получение по запросу плохого плана выполнения.

6
ответ дан Brian Adams 28 November 2019 в 03:38
поделиться

Вы включили ASP.NET, прослеживающий уже? У меня был экземпляр, где это не была сама хранимая процедура SQL, которая была проблемой, это было то, что процедура возвратила 5 000 строк, и приложение пыталось создать связанный с данными ListItems с теми 5 000 объектов, который вызывал проблему.

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

2
ответ дан Dillie-O 28 November 2019 в 03:38
поделиться

проверьте это на поле подготовки сначала, изменитесь, оно на уровне сервера для SQL-сервера

объявляет, что @option интервал

установил @option = @@ опции | 64

должностное лицо sp_configure 'пользовательские опции', @option

РЕКОНФИГУРИРОВАЛ

1
ответ дан SQLMenace 28 November 2019 в 03:38
поделиться

Та же проблема, что у меня была с службами отчетов SQL. Попробуйте проверить тип переменных, я отправлял переменные другого типа в SQL, например, отправлял varchar туда, где он должен быть целым числом, или что-то в этом роде. После того, как я синхронизировал типы переменных в Reporting Service и в хранимых процедурах на SQL, я решил проблему.

1
ответ дан Lea Cohen 28 November 2019 в 03:38
поделиться

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

0
ответ дан tbreffni 28 November 2019 в 03:38
поделиться

Попытайтесь изменить значение тайм-аута SelectCommand:

DataAdapter.SelectCommand.CommandTimeout = 120;
-1
ответ дан GateKiller 28 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

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