Тема: Просте питання main.js
Підкажіть новачку, конкатинований main.js може вміщувати скрипти від всіх html-сторінок чи кожна сторінка повинна мати свій загальний скрипт?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → JavaScript, TypeScript, ECMAScript → Просте питання main.js
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Підкажіть новачку, конкатинований main.js може вміщувати скрипти від всіх html-сторінок чи кожна сторінка повинна мати свій загальний скрипт?
Немає спеціальної назви файлу main.js. Тобто конкретно у вас він може бути, але в інших - не факт.
Я так розумію, ви хочете спитати, чи має сенс винести всі скрипти на сайті в один файл? Так, певний сенс є - якщо ви розраховуєте, що відвідувачі вашого сайту будуть переходити по кількох сторінках, а значна частина коду js спільна (якась бібліотека, той самий jquery, скажімо), то є сенс так зробити, особливо якщо його мініфікувати, а сервер налаштований стискати відповідь і радити кешувати цей файл надовго. Але тоді виникають інші проблеми:
- будь-яка зміна будь-якого скрипта на одній сторінці тягтиме за собою зміну всього main.js (а відтак - мініфікацію і перекешування);
- скрипти мають не заважати одне одному.
Якщо ви розумієте, як із цим впоратися - то звісно, виносьте все в один файл. І css також.
Дякую за відповідь.
В мене є проблема. В конкатинованому js файлі є спільні і не спільні скрипти з різних сторінок. Скрипти, котрі знаходятся нижче цього(див. нижче) в коді не працюють. Але тількі ті, котрі з інших сторінок. Спільні скрипти на сторінці works.html остаються робочими.
var newsbtn = document.querySelector('.work__list');
newsbtn.addEventListener('click', function (event) {
event.preventDefault();
newsbtn.classList.toggle('work__list--show');
});
Є аналогічний скрипт, тільки клас інший, на index.html котрий також припиняє роботу скриптів на інших html-сторінках окрім своєї.
Окремо всі скрипти працюють і не мають семантичних помилок. Елемент .work__list є в html на момент 'click'.
В консолі показані помилки з null тільки про тих скриптів, котрі належать іншим сторінкам, що є логічним.
Щось можете порадити?
Я бачу 1 вихід: всі скрипти, котрі не руйнують працю один одного конкатинувати і мініфікувати в загальний js файл. А ті що руйнівні - в окремих тримати. Скрипти дуже прості і сумно що їх потрібно по разним файлам розкидувати(
Питання перше. Цей фрагмент коду взятий з якоїсь функції чи прямо розташований у файлі? У другому випадку ви засмічуєте спільний простір імен. Загальна практика робити
(function(){
/*ваш код*/
})();
Скрипти, підготовані для конкатенації, не мають давати помилок на чужих сторінках. Перевіряйте значення на null перед подальшою роботою.
Ну і найголовніше: раз ви пишете, що
Елемент .work__list є в html на момент 'click'.
а не, скажімо, що цей елемент є на сторінці до виклику скрипта, то мені здається, що на момент виклику його не існує (це лише припущення, яке ваш допис не дає можливості спростувати), а отже, document.querySelector('.work__list') повертає null, на який жоден обробник, звісно, не вішається.
Розміщення коду в onload вирішує купу проблем.
ви уточніть - мова йде про http 1 чи http 2 ?
останній підтримує (тобто сучасні браузери) мультиплексування при завантаженні файлів,
відповідно потреба все збирати в один файл - відпала
точніше, це зайва і шкідлива робота на сьогодні
https://uk.wikipedia.org/wiki/HTTP#HTTP.2F2
2!! джва роки пройшло, відколи стандарт прийняли, люди!
навіть у вікіпедію встигли додати про це
Мультиплексування і розпаралелювання потоків в рамках одного TCP-з'єднання. Пакети різних потоків змішуються і, на відміну від конвеєрної передачі HTTP/1.1, не очікують закінчення відправлення запиту. Підтримка ефективної двобічної передачі даних. Можливість мультиплексування при зверненні до різних хостів, що дозволяє додатково прискорити одночасне завантаження веб-контенту з різних сайтів (у SPDY мультиплексування підтримується тільки для одного хоста);
і тд
прокидайтеся) чи ви все підтримуєте лайно мамонта IE6 ?
тим більше прокидайтеся!!
Про HTTP/2 треба не тільки браузер питати, а й веб-сервер. Гілка Apache 2.2 все ще підтримується, а вона не вміє HTTP/2.
Крім того, більше файлів все одно створює більше навантаження на веб-сервер, навіть у HTTP/2. Воно безумовно зменшилося, але варто було б провести бенчмарк, щоб подивитися, наскільки.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися