Include в javascript »або (а) синхронна завантаження коду з файлу Попередня ↔ Наступна 02.09.15 7:58 • SkanerSoft • # 265939 • Хабрахабр • У чернетках • 36 • 6083 - такий же як Forbes, тільки краще. 1. Скористатися можливостями HTML і «додати» в новий елемент з тегом script: 2. Скористатися 3. Скористатися AJAX. Цей спосіб мене і зацікавив свого часу. У чому його перевага? У тому, що скрипт можна довантажити в будь-якому місці виконання програми на JS і він гарантовано виконається до того, як інтерпретатор перейде до обробки наступної команди. Створимо об'єкт js з одним властивістю «root», що позначає шлях до папки зі скриптами: Після цього додамо об'єкту властивість - modules, що є об'єктом, який зберігає стану підвантаженими скриптів: Тепер опишемо функцію самої подгрузки скрипта і виконання його: Так само допишемо функцію «loaded»: Тепер в будь-якому місці програми можна викликати і скрипт виконається, при цьому програма почекає виконання вашого скрипта, і тільки потім продовжить виконання. Завдяки «масиву» loaded скрипти, при циклічної залежності не будуть «вішати» систему, так як кожен скрипт виконається лише одного разу за час життя сторінки. Також ви можете прописати js.loaded () в будь-якому файлі, який довантажувати через. щоб він не виконувався через include. Це на той випадок, якщо потрібно зробити подгрузчік скриптів «по-швидкому». Також можна скористатися бібліотекою «RequireJS», яка виконує ті ж дії. Якщо результат виконання скрипта вам не потрібен прямо зараз, то завантаження можна виконати в асинхронному режимі, і сторінка не чекатиме, поки виконається ваш файл, а продовжить виконання наступних команд. Ваш файл виконається відразу, як тільки завантажиться. Сама функція include () буде виглядати слід. чином:Серйозно? У кого-то наприклад 100 КБ мініфіцірованних і gzip-нутих початкових кодів. Це не рахуючи файлів перекладів, шаблонів і css (ще кожен приблизно стільки ж). Разом пів-метра вийде не рахуючи бібліотек і даних. Це якщо все відразу тягнути вийде що сайт відкриється приблизно ніколи, тому що @ #% $ користувач ваш сайт який відкривається 5+ секунд. А на даний момент че-то відбувається на екрані вже через 250 мс, а потім дані плавно завантажуються на протязі 2-3 секунд після. Ще один випадок, коли хочеться тикнути в проект «гребанний сайт». Ви всерйоз пропонуєте. Ну в загальному вище написали вже це питання про завантаження. Принадність звичайної компонування тегами в тому, що она не вішати наглухо сторінку під час підвантаження вмісту. До того ж залишається актуальним найпростіше запитання: навіщо? Де можна застосовувати таку методику взагалі? Якщо у мене наприклад сторінки генеруються за допомогою того ж PHP, завдання з відбору скриптів для подгрузки я покладу на шаблонизатор (теги script). Для фронтенда веб-додатки необхідні бібліотеки так і так повинні довантажуватися. Так що тут знову теги. Форма зворотнього зв'язку, якщо є - тег в чанка форми. І тепер карта буде показуватися по російськи. Але якщо користувач змінює мову, то доводиться перевантажувати сторінку, тому що google api не передбачає зміну мови. Універсального способу щось вивантажити не існує. Наприклад, припустимо, що у вас скрипт ось такого виду: Як ви пропонуєте «скасувати» цю операцію, враховуючи, що попередній стан language. якщо воно було, вже зруйновано? Що стосується саме вашого випадку - спробуйте запхати карту в iframe. При зміні мови: 1. затіните існуючу карту і виведіть спиннер поверх; 2. створіть другий такий же iframe, але невидимий; 3. повісьте подія на window load в iframe, щоб загрузилось взагалі все - або зсередини iframe відправляйте повідомлення батьківському вікну через window.postMessage (); 4. почніть завантаження карти з правильною мовою; 5. по завершенню завантаження розмістіть другий iframe в точності на місці першого, і зробіть його видимим і рівнем вище, ніж початковий iframe; 6. видаліть попередній iframe; Таким чином, ви отримаєте зміна мови карти без перезавантаження всієї сторінки. Можливо, є інші способи ізолювати скрипт в браузері, але я не в курсі.