Довольно часто пользователи могут наблюдать ситуацию, когда в браузере (IE) появляется сообщение об ошибке сценария. Если ситуация носит единичный характер, то не стоит беспокоится, но когда подобные ошибки стают регулярными, то стоит задуматься о характере данной проблемы.
Ошибка сценария в Internet Explorer, как правило, вызывается неправильной обработкой браузером кода HTML-страницы, наличием временных интернет-файлов, параметрами учетной записи, а также многими другими причинами, о которых и пойдет речь в данном материале. Также будет рассмотрено методы решения данной проблемы.
Прежде чем приступить к общепринятым методам диагностики проблем с Internet Explorer, которые вызывают ошибки сценария, необходимо убедиться в том, что ошибка возникает не только на одном конкретном сайте, а сразу на нескольких веб-страницах. Также нужно проверить веб-страницу, на которой возникла данная проблема под другой учетной записью, на другом браузере и на другом компьютере. Это позволит сузить круг поиска причины возникновения ошибки и исключить или подтвердить гипотезу о том, что сообщения появляются как следствие наличия на ПК некоторых файлов или настроек
Блокирование Internet Explorer активных сценариев, ActiveX и JavaАктивные сценарии, элементы ActiveX и Java влияют на способ формирования и отображения информации на сайте и могут быть реальной причиной ранее описанной проблемы, если они заблокированы на ПК пользователя. Для того чтобы убедиться, что ошибки сценария возникают именно по этой причине необходимо просто выполнить сброс параметров безопасности браузера. Чтобы это осуществить следуйте следующим рекомендациям.
- Откройте Internet Explorer 11
- Сервис
- В окне перейдите на вкладку Безопасность
- Далее нажмите кнопку По умолчанию , а потом кнопку ОК
Каждый раз при открытии какой-либо веб-страницы, браузер Internet Explorer сохраняет на ПК локальную копию этой интернет-страницы в так называемые временные файлы. Когда таких файлов стает слишком много и размер папки, содержащей их достигает нескольких гигабайт, могут возникнуть проблемы с отображением веб-страницы, а именно появиться сообщение об ошибке сценария. Регулярная очистка папки с временными файлами может помочь устранить данную проблему.
Для удаления временных интернет файлов выполните следующую последовательность действий.
- Откройте Internet Explorer 11
- В верхнем углу браузера (справа) нажмите иконку Сервис в виде шестерни (или комбинацию клавиш Alt+X). Затем в открывшимся меню выберите пункт
- В окне перейдите на вкладку Общие
- В разделе Журнал браузера нажмите кнопку Удалить…
- В окне Удаление истории обзора поставьте флажки возле пунктов Временные файлы Интернета и веб-сайтов , Файлы cookie и данные веб-сайтов , Журнал
- Нажмите кнопку Удалить
Ошибки сценария возможны через работу антивирусной программы, когда она блокирует активные сценарии, элементы ActiveX и Java на странице или папки для сохранения временных файлов браузера. В таком случае необходимо обратится к документации по установленному антивирусному продукту и отключить сканирование папок для сохранения временных интернет-файлов, а также блокировку интерактивных объектов.
Неправильная обработка кода HTML-страницыПроявляется, как правило, на одном каком-то конкретном сайте и говорит о том, что код страницы полностью не адаптирован для работы с Internet Explorer. В этом случае, лучше всего отключить отладку скриптов в браузере. Для этого выполните следующие действия.
- Откройте Internet Explorer 11
- В верхнем углу браузера (справа) нажмите иконку Сервис в виде шестерни (или комбинацию клавиш Alt+X). Затем в открывшимся меню выберите пункт
- В окне перейдите на вкладку Дополнительно
- Далее снимите флажок с пункта Показывать уведомление о каждой ошибке сценария и нажмите кнопку ОК .
Это перечень наиболее частых причин, которые вызывают ошибки сценария в Internet Explorer, поэтому если Вам надоели подобные сообщения, уделите немного внимания и решите проблему раз и навсегда.
Написать HTML - здорово, но как понять, где ошибка, когда что-то не работает? В этой статье описаны несколько инструментов, которые помогают искать и исправлять ошибки в HTML.
Отладка - это не страшноВо время написания какого-нибудь кода, обычно все идет хорошо, пока не появляется тот момент, когда вы совершаете ошибку. Итак, ваш код не работает, или работает не так, как вы задумывали. Если вы попытаетесь скомпилировать неработающую программу на языке Rust , компилятор укажет на ошибку:
В данном случае, сообщение об ошибке понять относительно просто - "unterminated double quote string". Если вы внимательно посмотрите на println!(Hello, world!"); , то заметите, что здесь отсутсвует двойная кавычка. Разумеется, сообщения об ошибках могут становиться куда более сложными для понимания по мере роста вашего кода, и даже самые простые случаи могут показаться пугающими для тех, кто ничего не знает о Rust.
Но не бойтесь отладки! Чтобы комфортно писать и отлаживать любой код, нужно понимать язык и его инструменты.
HTML и отладкаHTML не так сложен к пониманию, как Rust. HTML не компилируется в какую-либо другую форму перед тем, как браузер проанализирует это и покажет результат (он является интерпретируемым, а не компилируемым). Синтаксис HTML элементов намного понятнее, чем у "настоящих языков программирования", таких как Rust, JavaScript , или Python . Способ, которым браузеры читают HTML более толерантен , чем у языков программирования, интерпретирующих свой код строже. Это одновременно и плохо, и хорошо.
Толерантный кодТак что же означает толерантный? В общих чертах, когда вы напортачили в коде, есть два типа ошибок, с которыми вы столкнетесь:
- Синтаксические ошибки (Syntax errors) : Это ошибки в правильности написания, как это было выше, в примере с Rust. Такие обычно легко исправлять, в той мере, в какой вы знакомы с синтаксисом языка и знаете, что означают сообщения об ошибках.
- Логические ошибки (Logic errors) : Это ошибки, появляющиеся в том случае, если синтаксис корректен, но код не выполняет своего предназначения, то есть программа выполняется неверно. Такие исправлять сложнее, чем синтаксические, поскольку не выводится сообщений, указывающих место, где вы ошиблись.
HTML не страдает от синтаксических ошибок, потому что браузер читает код толерантно, в том смысле, что страницы могут отображаться даже если синтаксические ошибки присутсвуют. Браузеры имеют встроенные правила по интерпретации неверно написанной разметки, и вы можете запустить что-либо, даже если вы имели в виду другое. Это может стать настоящей проблемой!
На заметку : HTML читается толерантно, потому что когда веб только появился, было решено позволить людям публиковать контент даже при условии некорректностей в коде, так как это куда более важно, чем уверенность в абсолютно верном синтаксисе. Веб не был бы сейчас так популярен, если бы относился к новичкам строго.
Активное обучение: Знакомство с толерантным кодомВремя изучить природу толерантного кода в HTML.
What causes errors in HTML?
- Unclosed elements: If an element is not closed properly, then its effect can spread to areas you didn"t intend
- Badly nested elements: Nesting elements properly is also very important for code behaving correctly. strong strong emphasised? what is this?
- Unclosed attributes: Another common source of HTML problems. Let"s look at an example: не закрыт, и сообщение указывает прямо на открывающий тег.
- "End tag strong violates nesting rules": Элемент неправильно вложен - на этом уровне нет парного открывающего тега.
- "End of file reached when inside an attribute value. Ignoring tag": Загадочное сообщение. Дело в том, что где-то (скорее всего, в конце документа) неправильно прописано свойство элемента, и конец файла оказался внутри этого свойства. В браузере не видно ссылки - скорее всего, проблема рядом с ней.
- "End of file seen and there were open elements": Файл закончился, но некоторые элементы не закрыты. Сообщение указывает на конец файла, в данном случае не закрыт элемент
example: " + variable);
}
else {
alert(variable);
}
}
О каком-либо профилировании речи, конечно, не велось совсем.
При таком подходе даже информация об объекте console производит революцию.
Специфика клиентской стороны веб-приложения требует отладки кода во всех популярных браузерах. Конечно, чаще всего хватает и отладки в Internet Explorer"е и любом нормальном другом браузере, но мы рассмотрим все варианты.
Mozilla Firefox Наверно, именно Firefox можно назвать пионером отладки клиентского кода. Долгое время его указывали как браузер, наиболее подходящий для разработки, а все благодаря расширению Firebug , которое содержит, наверно, все нужные возможности, кроме валидации HTML кода.Так же, начиная с версии 4, появилась встроенная Веб-консоль, которая реализует часть функций вкладки «Консоль» и «Сеть» Firebug"а, а так же некоторые возможности по отладке CSS.
Начиная с версии 6, появился Простой редактор JavaScript, который так же реализует одну из функций Firebug"а, и позволяет писать и выполнять код прямо в браузере.
Начиная с версии 10 появился Инспектор страниц, который позволяет изучать HTML код и CSS свойства, то есть, реализует функции вкладки «HTML».
За валидацию HTML кода как правило отвечает расширение Html Validator . Как раз его иконку, указывающую на количество ошибок на главной странице сайта habrahabr.ru, можно видеть в правом нижнем углу браузера на картинке с Инспектором страниц.
Так же, пользуясь случаем, укажу, что для этого браузера есть множество расширений, позволяющих облегчить жизнь, о чем на Хабре уже была соответствующая .
Google Chrome и Safari Эти браузеры, основанные на WebKit, обладают встроенным инструментом разработки Web Inspector, который очень хорошо развит и реализует практически те же функции, что и Firebug. При этом, надо отдать ему должное, он не замедляет работы браузера, что водится за «старшим братом».В Chrome он может быть вызван по нажатию клавиш Ctrl+Shift+I или просто по F12 . В Safari он хорошо спрятан, и для его использования нужно включить возможности разработки в настройках браузера. Позже инструменты разработчика станут доступными из пункта «Разработка» главного меню или по сочетанию клавиш Ctrl+Alt+I .
Для валидации HTML кода так же нужно устанавливать сторонние расширения. К примеру, для Chrome, это может быть Validity . Для Safari пока не удалось подобрать ничего подходящего.
Opera Opera так же имеет встроенный инструмент для разработчиков, который называется «Opera Dragonfly», и может быть вызван в любой момент по сочетанию клавиш Ctrl+Shift+I . Он похож на то, что нам представляет WebKit, и имеет подобные возможности и плюсы, хотя, на мой лично взгляд, менее удобен.Отладка и профилирование серверного кодаXdebug Как мы договорились в начале, мы рассматриваем случай, когда на сервере используется PHP. Тут «классическим» методом отладки являются echo , print_r и var_dump , но есть так же и средство для отладки, как в лучших домах - Xdebug . Лично для меня, в связи со спецификой обучения в институте, это выглядело «прямо как в Delphi».Расширение xdebug позволяет как минимум прогонять код по шагам и просматривать значения переменных, что поднимает программирование на PHP на новый уровень. О тонкостях работы с xdebug была соответствующая . XDebug обычно доступен в репозиториях GNU/Linux, в Windows его так же не слишком сложно установить, скопировав dll файл.
При использовании этого расширения, с сервера на компьютер разработчика поступает входящее соединение (по умолчанию на порт 9000), которое он должен обработать. Для этого необходимо соответствующим образом настроить свою IDE.
Кстати говоря, использование IDE так же является непременным условием движения вперед. Некоторые программисты считают, что разницу между программированием в блокноте с подсветкой кода и в IDE можно увидеть только на крупных проектах, но лично я придерживаюсь мнения, что разница видна даже на программе «Hello world!» - одна автоподстановка имен и аргументов стандартных функций чего стоит.
XHProfО расширении Да, xdebug предоставляет возможности по профилированию, но разработка Facebook"а для этих целей, XHProf , лично мне больше нравится. Я, сказать честно, не проводил никаких тестов, но считается, что данное расширение гораздо лучше подходит для production-серверов и для профилирования при реальных нагрузках.Установка К сожалению, это расширение не входит ни в какие репозитории. Оно входит в PECL, но по какой-то причине его установка штатным путем часто вызывает проблемы. По этой причине приходится проводить установку из исходников.# Получаем исходники wget http://pecl.php.net/get/xhprof-0.9.2.tgz # Распаковываем исходники tar -xvf xhprof-0.9.2.tgz # Переходим в каталог, где содержится код расширения cd xhprof-0.9.2/extension/ # Проводим компиляцию и тест phpize ./configure make make test # Проводим установку цивилизованно checkinstall
Файл конфигурации xhprof.ini предоставляет нам примерно такие возможности:
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so
; Каталог для логов
xhprof.output_dir="/var/log/xhprof/"Приведем пример профилирования. В код приложения нужно включить следующие элементы:
// Начало скрипта, включаем профилирование // как нагрузки на процессор, так и на память xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); /* * Основной код приложения */ // Конец скрипта, завершаем профилирование, // записываем результат в лог $xhprofData = xhprof_disable(); include_once XHPROF_DIR."/xhprof_lib/utils/xhprof_lib.php"; include_once XHPROF_DIR."/xhprof_lib/utils/xhprof_runs.php"; $xhprofRuns = new XHProfRuns_Default(); $namespace = "some-unique-name"; $runId = $xhprofRuns->save_run($xhprofData, $namespace); echo "\n";
Здесь константа XHPROF_DIR указывает на каталог, куда мы распаковали скачанный архив.Для анализа результатов нужен тот самый веб-интерфейс. Его можно взять в каталоге $XHPROF_DIR/xhprof_html/ - условно обозначим его так. К примеру, мы расположили его в доступном веб-серверу месте, и он доступен по адресу example.com/system/xhprof/ , тогда для анализа результата работы нам нужно обратиться к нему следующим образом:
Example.com/system/xhprof/?run=%runId%&source=%namespace%
Мы получим подобный результат:
Профилирование можно включать в код приложения на постоянной основе или, например, сделать так, чтобы оно запускалось случайно с определенной вероятностью или по наличию определенного условия. Например, так:
$needProfiler = (mt_rand(0, 100) < 10 or isset($_COOKIE["xhprof"])); if ($needProfiler) xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
Профилирование SQL запросов Как правило, именно работа с базой данных является узким местом в приложении. По этой причине рекомендуется проводить профилирование запросов. К примеру, рассмотрим часть класса, являющегося оберткой вокруг функций расширения mysql. Да, я знаю, что это расширение не очень любят и желают ему смерти не меньше, чем старому-доброму IE6. Я не призываю его использовать, просто именно такой класс есть у меня под рукой.
В таком случае можно, имея жалобы от клиентов или подозрения, обратиться к результатам профилирования за определенный временной промежуток. С помощью параметра namespace можно определить, какая именно часть приложения (какой скрипт, контроллер, экшн) профилировались./** * Запрос * @param string $sql Запрос * @param array $params Параметры * @param string $query Скомпилированный запрос * @return array Результат */ public function query($sql, array $params = array(), &$query = "") { $start = microtime(TRUE); // Проведение запроса, включая "защиту" параметров $stop = microtime(TRUE); $time = $stop - $start; $this->_addProfilerData($sql, $time); // Возврат результата } private function _addProfilerData($query, $time) { if (is_array(self::$profilerData)) { self::$profilerData = array("query" => $query, "time" => $time); } } public function __destruct() { if (is_array(self::$profilerData)) { $this->_writeProfilerData(); self::$profilerData = FALSE; } // Отключение от БД } private function _writeProfilerData() { $values = array(); foreach (self::$profilerData as $row) { $query = mysql_real_escape_string($row["query"], $this->con); $time = (float)$row["time"]; $hash = crc32($row["query"]); $values = "($hash, "$query", $time)"; } if ($values) { $strValues = implode(", ", $values); $sql = "INSERT DELAYED INTO `profiler_queries` (`query_hash`, `query`, `work_time`) VALUES $strValues"; @mysql_query($sql, $this->con); } }
Заключение Статья получилась достаточно большой. Возможно, здесь я прошелся по верхам и затронул темы, которые уже затрагивались, но если бы я в свое время прочитал что-то подобное - статью, где вся информация собрана вместе и даны полезные ссылки, это оказало бы мне неоценимую помощь. Я надеюсь, что и моя статья поможет кому-нибудь на пути к просветлению.
Здесь данные профилирования запросов хранятся в таблице profiler_queries . Эта таблица может иметь тип MyISAM или Archive, так как они предоставляют возможность совершать отложенные вставки, что не создает излишней задержки ответа при профилировании. Так же для лучшего поиска запросов в таблице лучше создать столбец типа INT , куда будет писаться crc32-хеш запроса, по которому нужно создать индекс.Во время работы в интернете браузер Internet Explorer может выдавать сообщения о том, что страница содержит ошибки и может отображаться неправильно. Рассмотрим несколько способов исправления этой проблемы.
Инструкция - Если нет видимых трудностей в работе браузера кроме периодически появляющейся ошибки, можно попробовать отключить отладку скриптов, чтобы сообщение больше не появлялось (если ошибка появляется не на одном, а сразу на нескольких сайтах, перейдите к следующему шагу). В меню «Сервис» откройте пункт «Свойства обозревателя», выберите вкладку «Дополнительно» и отметьте флажком «Запретить отладку сценариев». Если вам нужно отключить оповещение обо всех ошибках, снимите флажок для пункта «Показывать уведомление о каждой ошибке сценария».
- Попробуйте открыть сайт, при просмотре которого возникает ошибка, из другой учетной записи или с другого компьютера, чтобы узнать является ли проблема локальной. Если ошибка появляется, скорее всего, она вызвана неверным кодом веб-страницы. В таком случае можно отключить отладку сценариев, следуя инструкции в предыдущем шаге. Если при просмотре сайта с использованием другого компьютера или учетной записи проблема исчезает, перейдите к следующему шагу.
- Возможно, браузер Internet Explorer в момент просмотра страниц не блокирует активные сценарии, Java и ActiveX, которые определяют отображение сведений на странице. Чтобы исправить проблему, необходимо сбросить параметры безопасности браузера. Для этого в меню «Сервис» выберите пункт «Свойства обозревателя» и перейдите на вкладку «Безопасность». Нажмите кнопку «По умолчанию», а затем «ОК». Если после повторного запуска страницы, на которой возникала ошибка, проблема остается, попробуйте следующий способ.
- Как известно, браузер хранит временные файлы и копии страниц в отдельной папке, для последующего к ним обращения. Если размеры папки становятся слишком большими, могут возникнуть ошибки при отображении некоторых страниц. Проблему можно решить, периодически очищая папку с временными файлами. Для этого откройте диалоговое окно «Свойства обозревателя» из меню «Сервис». На вкладке «Общие» в группе «История» нажмите кнопку «Удалить». Установите флажки для пунктов «Временные файлы интернета», «Куки-файлы», «Журнал», «Данные веб-форм» и нажмите «ОК».