Как узнать, действительно ли используется определенный код javascript?
Я делаю некоторые работы по очистке JavaScript в устаревшем проекте и пытаюсь избавиться от избыточных библиотек JS. Я сделал все очевидные (те, которые вообще не являются ссылками ниоткуда). Но есть ряд JS-файлов, которые включены во все страницы (через плитки).
Как я могу узнать, действительно ли они используются, не проходя через содержимое каждого и искать каждую функцию в них? Есть ли более умный / простой способ сделать это? Это java на основе / Весенний проект, если это поможет кстати.
4 ответов
Я думаю, что нет простого способа.
вы можете удалить ссылку на скрипт, запустить свой сайт с включенным отладчиком браузера и посмотреть, есть ли ошибка "функция не найдена".
но вам придется протестировать все функции вашего сайта...
Edit:
теперь есть функция в Chrome dev tools, которая может сделать это для ты:
https://developers.google.com/web/updates/2017/04/devtools-release-notes
1) Откройте командное меню. 2) начните вводить покрытие и выберите Показать покрытие.
одно из последних обновлений инструментов Chrome dev теперь включает вкладку покрытия JS и CSS, которая позволяет вам видеть неиспользуемый код.
https://developers.google.com/web/updates/2017/04/devtools-release-notes
1) Open the Command Menu.
2) Start typing Coverage and select Show Coverage.
Я бы предложил использовать шпионов для этой задачи. Они используются в TDD для проверки, вызываются ли функции, чтобы можно было утверждать, если вызовы действительно происходят.
Если Вам повезет, эти библиотеки JS инициализируются в конструкторе или каким-либо другим способом, если это так, я бы предложил вам шпионить за этими функциями init.
Если нет, вы можете шпионить за всеми функциями, но это больно, особенно если у вас есть большие библиотеки, в этом случае я бы предложил пойти по одному один.
в прошлом я использовал Жасмин или Синон.JS для этой задачи, следует пример:
it('should be able to login', function () {
spyOn(authobj, 'isEmpty');
authobj.login('abc', 'abc');
expect(authobj.isEmpty).toHaveBeenCalled();
});
Как только у вас есть настройки шпионов на правильные функции, то это должно быть просто вопрос проверки, вызваны ли они или нет, вы можете сделать вызов mixpanel (первый пример, который приходит на ум) с некоторой информацией об этом, так что позже вы можете увидеть, какие функции называются, а какие нет.
вы также можете попробовать purifycss.
$ npm install -g purify-css
purifycss <css> <content> [option]
Options:
-m, --min Minify CSS [boolean] [default: false]
-o, --out Filepath to write purified css to [string]
-i, --info Logs info on how much css was removed
[boolean] [default: false]
-r, --rejected Logs the CSS rules that were removed
[boolean] [default: false]
-w, --whitelist List of classes that should not be removed
[array] [default: []]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]