Js not: Логическое НЕ (!) — JavaScript

Remove unused JavaScript — Chrome Developers

Remove unused JavaScript

Published on

Translated to: Español, Pусский

Table of contents

  • How the unused JavaScript audit fails
  • How to remove unused JavaScript
    • Detect unused JavaScript
    • Build tool for support for removing unused code
  • Stack-specific guidance
    • Angular
    • Drupal
    • Joomla
    • Magento
    • React
    • Vue
    • WordPress
  • Resources

Unused JavaScript can slow down your page load speed:

  • If the JavaScript is render-blocking, the browser must download, parse, compile, and evaluate the script before it can proceed with all of the other work that’s needed for rendering the page.
  • Even if the JavaScript is asynchronous (not render-blocking), the code competes for bandwidth with other resources while it’s downloading, which has significant performance implications. Sending unused code over the network is also wasteful for mobile users who don’t have unlimited data plans.

# How the unused JavaScript audit fails

Lighthouse flags every JavaScript file with more than 20 kibibytes of unused code:

Click a value in the URL column to open the script’s source code in a new tab.

See the Lighthouse performance scoring post to learn how your page’s overall performance score is calculated.

# How to remove unused JavaScript

# Detect unused JavaScript

The Coverage tab in Chrome DevTools can give you a line-by-line breakdown of unused code.

The Coverage class in Puppeteer can help you automate the process of detecting unused code and extracting used code.

# Build tool for support for removing unused code

Check out the following Tooling.Report tests to find out if your bundler supports features that make it easier to avoid or remove unused code:

  • Code Splitting
  • Unused Code Elimination
  • Unused Imported Code

# Stack-specific guidance

# Angular

If you are using Angular CLI, include source maps in your production build to inspect your bundles.

# Drupal

Consider removing unused JavaScript assets and only attach the needed Drupal libraries to the relevant page or component in a page. See the Defining a library for details.

# Joomla

Consider reducing, or switching, the number of Joomla extensions loading unused JavaScript in your page.

# Magento

Disable Magento’s built-in JavaScript bundling.

# React

If you are not server-side rendering, split your JavaScript bundles with React.lazy(). Otherwise, code-split using a third-party library such as loadable-components.

# Vue

If you are not server-side rendering and using the Vue router, split the bundles by lazy loading routes.

# WordPress

Consider reducing, or switching, the number of WordPress plugins loading unused JavaScript in your page.

# Resources

  • Source code for the Remove unused code audit
  • Remove unused code
  • Adding interactivity with JavaScript
  • Code Splitting
  • Dead Code Elimination
  • Dead Imported Code
  • Find Unused JavaScript And CSS Code With The Coverage Tab In Chrome DevTools
  • class: Coverage

Updated on • Improve article

ошибок JavaScript — пользовательский интерфейс Telerik для Blazor

На этой странице представлены решения для распространенных ошибок JavaScript, с которыми вы можете столкнуться при работе с пользовательским интерфейсом Telerik для компонентов Blazor.

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

  • Не удалось найти «TelerikBlazor.getLocationHost» («TelerikBlazor» не определен).
  • Microsoft.JSInterop.JSException: не удалось найти «TelerikBlazor» в «окне».

Если вы получаете такие ошибки, причина может быть:

  • Файл JS Interop отсутствует или указан неверный URL-адрес
  • Атрибут defer приводит к тому, что сценарий загружается и выполняется слишком поздно
  • Инфраструктура Blazor инициализируется слишком рано
  • TypeScript экспортирует обходной путь перерыв Telerik Blazor

Отсутствует файл

Вы можете проверить, так ли это, проверив вкладку «Сеть» в консоли браузера, чтобы убедиться, что она успешно возвращается. Существует несколько распространенных причин отсутствия файла JS Interop: 9.0003

  • В приложении отсутствуют ссылки на необходимые активы.

  • Настройка сети блокирует доступ к облаку и, следовательно, к нашей CDN. Если это так, у вас есть два варианта:

    • Обсудите с вашими сетевыми администраторами возможность разрешить нашу CDN.
    • Используйте статические ресурсы из папки приложения, чтобы избежать перехода в облако.
  • Приложение было обновлено с пробной версии до коммерческой лицензии, но пути к файлу не было. Подробнее см. в разделе «Обновление пробной версии до коммерческой».

  • Статические активы не включены в серверный проект, или среда размещения не работает с ними должным образом. Вам необходимо убедиться, что статические ресурсы доступны после сборки и на сервере развертывания — они находятся в локальном кэше NuGet по пути, аналогичному

    C:\Users\\.nuget\packages\telerik.ui .for.blazor\<версия>\staticwebassets . Также возможно, что хостинг-сервер не поддерживает статические активы или имеет проблемы с ними, и вам может потребоваться подтвердить это у хостинг-провайдера или протестировать простой пакет со статическим активом, чтобы увидеть, будет ли он возвращен.

    • Очистка кеша NuGet с последующим запуском Clean и Rebuild для решения может решить проблему, если что-то пойдет не так с получением пакета NuGet. В случае, если Clean не очищает папки bin и obj , вы также можете удалить их вручную до Rebuild .
  • Во время развертывания возникает проблема. Дополнительные сведения см. в статье «Устранение неполадок при развертывании».

Атрибут отсрочки

Иногда на файл взаимодействия JS ссылаются правильно и он успешно возвращается, но иногда возникает ошибка. Это указывает на проблему синхронизации (например, низкая производительность машины или медленная сеть), из-за которой скрипт загружается и анализируется слишком поздно, после того, как он понадобится.

Решение:

  1. Удалите атрибут defer тега
     <голова>
        
    <голова>
    <тело>   
     

    Автоматический запуск Blazor

    Если удаление атрибута defer выше не помогает, вы можете отключить автоматическую инициализацию Blazor на стороне клиента.

    TypeScript

    По умолчанию TypeScript приводит к скомпилированному коду, которому требуется объект для экспорта , который по умолчанию недоступен в Blazor, поэтому он выдает ошибку. Обычный обходной путь для этого (определение пустого объекта exports ) вызывает ошибки в файлах Telerik JS Interop. Вы можете прочитать больше об ошибках и решениях в статье базы знаний Telerik Blazor об ошибках экспорта TypeScript.

    В сообщении об ошибке может упоминаться метод инициализации компонента или функции, например:

    • Ошибка: Microsoft.JSInterop.JSException: не удалось найти «initGrid» в «window.TelerikBlazor».
    • Ошибка: не удалось найти «TelerikBlazorPopup» в «окне».
    • Ошибка: не удалось найти «TelerikBlazor.columnResizableSetColumns» («columnResizableSetColumns» не определено).
    • Любая ошибка, относящаяся к компоненту или функции Telerik, которую невозможно найти в коде JS.

    Такая ошибка означает, что версия файла сценария telerik-blazor.js не соответствует версии пакета NuGet. В результате сценарий не включает все компоненты, функции или правильные имена методов.

    Если вы используете нашу CDN для загрузки файла сценария, убедитесь, что URL-адрес файла соответствует версии пакета.

    Если вы загружаете скрипт как локальный файл из папки wwwroot , то замените файл. Дополнительные сведения см. в статье Процесс обновления.

    Еще одна распространенная причина — кеширование браузера, если файл поступает из статических ресурсов NuGet или из локальной папки. Очистите кеш браузера или выполните принудительное обновление страницы, чтобы исправить это. Настоящий сервер должен смотреть на дату изменения этих файлов и полностью обслуживать их после обновления, поэтому в производственной среде этого не должно происходить, но сервер разработки, скорее всего, вернет ответ «не изменено» даже после обновления. файл обновился.

    В сообщении об ошибке также может упоминаться removeEventListener вместо addEventListener .

    Есть две известные причины этой ошибки JavaScript.

    Один связан с пользовательским интерфейсом для обновления Blazor в проектах WebAssembly (WASM)

    . См. статью TypeError: невозможно прочитать свойства null (чтение «addEventListener») .

    Другой возможной причиной является состояние гонки во время быстрого многократного воссоздания компонентов или быстрой навигации. Если это произойдет, наш код JavaScript может попытаться получить доступ к элементу DOM, которого больше не существует. Решение состоит в том, чтобы избежать быстрого дублирования обновления пользовательского интерфейса, например:

    • Не вызывать StateHasChanged() внутри методов EventCallback (например, обработчики нажатия кнопки). В таких случаях Blazor автоматически выполняет StateHasChanged() .
    • Регулировать поведение пользователя, чтобы последующая быстрая навигация была невозможна.

    Полное сообщение об исключении: System.Collections.Generic.KeyNotFoundException: данный ключ inputElementValue отсутствует в словаре.

    Эта ошибка указывает на то, что приложение использует старую или неправильную версию файла telerik-blazor. js , например, после обновления версии компонента.

    В IE вы можете получить ошибки, подобные Объект не поддерживает свойство или метод 'assign' или ошибки, связанные с другими современными функциями JS, которые не поддерживаются в IE. Причина в том, что мы используем современный код, который может не работать в IE — это не один из поддерживаемых нами браузеров, и WebAssembly в любом случае не работает на нем, поэтому современные приложения Blazor все равно не будут работать в IE.

    Поиск и устранение неисправностей | Wiki.js

    Причина: Скорее всего, вы используете обратный прокси-сервер, такой как nginx или apache.

    Решение : Увеличьте конфигурацию обратного прокси-сервера для загрузки файлов.

    Причина: CloudFlare выполняет некоторые «оптимизации» некоторых файлов во время доставки. Это нарушает сигнатуры целостности файлов, которые затем блокируются браузером.

    Решение : В панели инструментов Cloudflare для вашего сайта создайте новое правило страницы. Введите корневой путь в следующем формате: wiki.yourdomain.com/* и добавьте следующие настройки:

    • Auto Minify : Снимите все
    • Мираж : Выкл.
    • Ракетный погрузчик : Выкл.

    Сохранить и развернуть.

    Причина : Wiki.js нельзя использовать или установить во вложенной папке.

    Решение

    : Вместо этого используйте поддомен (например, wiki.yourcompany.com ).

    Причина : некоторые установки Linux препятствуют привязке Node.js к портам в нижнем диапазоне (например, < 1024) . Это происходит, если вы установили такой порт, как 80, в config.yml.

    Решение A : Разрешить процессу узла безопасный доступ к запрошенному порту:

     # Ubuntu / Debian
    sudo apt-get установить libcap2-bin
    sudo setcap cap_net_bind_service=+ep `readlink -f \`какой узел\``
     

    Решение B : Создайте правило перенаправления портов: (в приведенном ниже примере необходимо установить порт 3000 в config. yml)

     sudo iptables -t nat -A PREROUTING -i eth0 -p tcp - -dport 80 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 3000
     

    Решение C : Используйте веб-сервер перед Wiki.js. Например, используйте nginx для прослушивания порта 80/443 и проксируйте все запросы к Wiki.js, работающим на более высоком порту

    (например, 3000) .

    Причина : Другая программа уже прослушивает этот порт.

    Решение : Используйте другой порт для Wiki.js или найдите приложения, которые могут использовать этот порт (веб-серверы, http-приложения и т. д.), и остановите их.

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

    Разрешение : Просто перезагрузите страницу еще раз. Если ошибка по-прежнему возникает через некоторое время, проверьте журналы вашего сервера на наличие ошибки, препятствующей полной инициализации Wiki.js.

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

    Вам необходимо зарегистрировать обратный звонок через window.boot.register(evt, clb) вместо этого, где инициирующим событием является page-ready , например:

     window.boot.register('page-ready', () => {
        // код для выполнения
    })
     

    Теперь ваш код будет выполняться после загрузки страницы и готовности экземпляра Vue.

    Серьезно? Это программное обеспечение предоставляется вам совершенно бесплатно. Волонтеры вложили в этот проект тысячи часов своего времени. Мы считаем, что небольшое упоминание в футере — это очень маленькая просьба взамен...

    Если вы не можете загрузить сайт из-за ошибки сертификата SSL, вы можете вручную отключить перенаправление SSL.

    В базе данных в таблице settings необходимо установить для свойства sslRedir значение false для ключа сервера .
    Перезапустите Wiki.js, чтобы загрузить новые настройки.

    При запуске PostgreSQL внутри контейнера докеров (например, официальный образ DigitalOcean/AWS) вы можете выполнить следующие команды:

     docker exec db psql -U wiki -d wiki -c "УДАЛИТЬ ИЗ настроек WHERE key = 'server'; "
    докер перезапустить вики
     

    Единственный способ изменить пароль без доступа к веб-интерфейсу — через базу данных. Используйте такой инструмент, как pgAdmin (postgres) , DBeaver (mysql, mariadb) , SQL Management Studio (mssql) или DB Browser для SQLite .

    Подключитесь к своей базе данных, перейдите к таблице пользователей и найдите своего пользователя.

    Отредактируйте столбец пароля и вставьте новое значение в формате bcrypt . Вы можете использовать такой инструмент, как https://bcrypt-generator.com/, чтобы сгенерировать его. Количество раундов должно быть 12 .

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

    При запуске PostgreSQL внутри док-контейнера (например, официального образа DigitalOcean/AWS) выполните следующие действия:

    1. Используйте такой инструмент, как https://bcrypt-generator. com/, чтобы сгенерировать хэш bcrypt нужного вам пароля. Количество раундов должно быть 12 .
    2. Подключитесь к своей машине/дроплету через SSH.
    3. Выполните следующую команду, заменив HASH-PASSWORD на хэш, сгенерированный на шаге 1, а YOUR-EMAIL на адрес электронной почты учетной записи, которую вы хотите сбросить:
     docker exec db psql -U wiki -d wiki -c «ОБНОВЛЕНИЕ пользователей УСТАНОВИТЕ пароль =« ХЕШ-ПАРОЛЬ », ГДЕ электронная почта =« ВАШ-ЭЛЕКТРОННАЯ ПОЧТА »;»
     

    Причина : Вы не установили URL сайта в области администрирования .

    Решение : В области администратора в разделе Общие установите URL-адрес сайта .

    Причина : Пользователь, используемый Wiki.js для подключения к базе данных, должен использовать mysql_native_password . Более новый метод caching_sha2_password , представленный в MySQL 8.0, еще не поддерживается в Node.js. Поддержка будет добавлена, когда функциональность станет доступной в драйверах Node.js.

    Разрешение : Вы можете изменить существующего пользователя, чтобы использовать mysql_native_password использование:

     ИЗМЕНЕНИЕ ПОЛЬЗОВАТЕЛЯ 'root'@'localhost' ИДЕНТИФИКИРОВАНО С помощью mysql_native_password BY 'password';
     

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

    Если вы являетесь единственным редактором / доверяете своим редакторам, вы можете отключить эту функцию в Область администрирования , под Рендеринг > HTML > Безопасность > Очистка HTML .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *