Вътрешни и външни JavaСценарий: Научете с пример

⚡ Умно обобщение

Вътрешен и външен JavaСкриптът описва двете поддържани разположения за скриптов код в уеб проект. Тази статия сравнява двата подхода, показва работещи примери, обяснява правилното свързване с async и defer и посочва кога всяко разположение осигурява по-добра поддръжка и производителност.

  • 📄 Вътрешно разпределение: Code се намира между таговете на скрипта в HTML документа и се зарежда със страницата, която го притежава.
  • 🗂️ Външно разположение: Code се намира в отделен .js файл, посочен чрез атрибута src, така че много страници споделят един източник.
  • 🔗 Правило за свързване: Външен таг на скрипт винаги трябва да бъде затворен, а пътят към src се разрешава спрямо HTML документа, освен ако не е предоставен пълен път.
  • Контрол на зареждането: Атрибутът defer изпълнява файла след завършване на HTML парсинга, докато async го изпълнява веднага щом изтеглянето приключи.
  • ???? Предимство на кеширането: Външните файлове се кешират от браузъра веднъж и се използват повторно на всяка страница, която ги препраща.
  • 🧭 Критерий за избор: Запазете кратката, специфична за страницата, логика вътрешно, а споделената или дългата логика преместете във външен файл за по-лесно отстраняване на грешки.
  • 🚫 Вградени манипулатори: Обработчиците, базирани на атрибути, като например onclick, смесват маркирането с поведението и трябва да бъдат заменени от addEventListener.

Вътрешен и външен JavaСценарий

Какво представляват вътрешните и външните JavaСценарий?

Можете да използвате JavaСкрипт код по два начина.

  1. Можете или да включите JavaКод на скрипта вътрешно във вашия HTML документ себе си.
  2. Можете да запазите JavaКод на скрипта в отделен външен файл и след това посочете този файл от вашия HTML документ.

И двете разположения изпълняват абсолютно един и същ език и дават един и същ резултат в браузъра. Разликата е в това къде се съхранява изходният код, как браузърът го изтегля и колко лесно кодът може да бъде използван повторно и поддържан в уебсайта.

Какво е вътрешно JavaСценарий?

вътрешен JavaСкриптът е код, написан директно в чифт скриптови тагове в HTML файла. Браузърът чете маркировката отгоре надолу и когато достигне скриптовия таг, изпълнява операторите незабавно, без допълнителна мрежова заявка.

Досега използвахме Internal JS. Ето пример –

<html>
<head>
  <title>My First JavaScript code!!!</title>
  <script type="text/javascript">
    // Create a Date Object
    var day = new Date();
    // Use getDay function to obtain todays Day.
    // getDay() method returns the day of the week as a number like 0 for Sunday, 1 for Monday,….., 5
    // This value is stored in today variable
    var today = day.getDay();
    // To get the name of the day as Sunday, Monday or Saturday, we have created an array named weekday and stored the values
    var weekday = new Array(7);
    weekday[0]="Sunday";
    weekday[1]="Monday";
    weekday[2]="Tuesday";
    weekday[3]="Wednesday";
    weekday[4]="Thursday";
    weekday[5]="Friday";
    weekday[6]="Saturday";
    // weekday[today] will return the day of the week as we want
    document.write("Today is " + weekday[today] + ".");
  </script>
</head>
<body>
</body>
</html>

Изход:

Today is Wednesday.

Отпечатаният ден се променя със системния часовник на посетителя, защото getDay връща число от 0 за неделя до 6 за събота и това число се използва като индекс в масива за дни от седмицата.

Какво е външно JavaСценарий?

Планирате да показвате текущата дата и час на всички ваши уеб страници. Да предположим, че сте написали кода и сте го копирали във всички ваши уеб страници (например 100). Но по-късно искате да промените формата, в който се показва датата или часът. В този случай ще трябва да направите промени във всичките 100 уеб страници. Това ще бъде много времеемка и трудна задача.

Така че, запазете JavaСценарий код в нов файл с разширение .js. След това добавете ред код във всичките си уеб страници, който да сочи към вашия .js файл по следния начин:

<script type="text/javascript" src="currentdetails.js"></script>

ЗабележкаПредполага се, че .js файлът и всички ваши уеб страници са в една и съща папка. Ако external.js файлът е в различна папка, трябва да посочите пълния път до файла в атрибута src. Затварящият </script> Тагът е задължителен, въпреки че елементът няма съдържание, защото самозатварящият се скрипт таг не е валиден HTML код и останалата част от страницата ще бъде погълната от незавършения елемент.

Това е кодът, който поставяте в currentdetails.js:

var currentDate = new Date();
var day = currentDate.getDate();
var month = currentDate.getMonth() + 1;
var monthName;

var hours = currentDate.getHours();
var mins = currentDate.getMinutes();
var secs = currentDate.getSeconds();
var strToAppend;
if (hours >12 )
{
	hours1 = "0" + (hours - 12);
strToAppend = "PM";
}
else if (hours <12)
{
	hours1 = "0" + hours;
	strToAppend = "AM";
}
else
{
	hours1 = hours;
	strToAppend = "PM";
}

if(mins<10)
mins = "0" + mins;
if (secs<10)
	secs = "0" + secs;

switch (month)
{
	case 1:
		monthName = "January";
		break;
	case 2:
		monthName = "February";
		break;
	case 3:
		monthName = "March";
		break;
	case 4:
		monthName = "April";
		break;
	case 5:
		monthName = "May";
		break;
	case 6:
		monthName = "June";
		break;
	case 7:
		monthName = "July";
		break;
	case 8:
		monthName = "August";
		break;
	case 9:
		monthName = "September";
		break;
	case 10:
		monthName = "October";
		break;
	case 11:
		monthName = "November";
		break;
	case 12:
		monthName = "December";
		break;
}

var year = currentDate.getFullYear();
var myString;
myString = "Today is " + day +  " - " + monthName + " - " + year + ".<br />Current time is " + hours1 + ":" + mins + ":" + secs + " " + strToAppend + ".";
document.write(myString);

Това е вашият файл currentdetails.js. Не се притеснявайте, ако видите дълги редове код. Скоро ще се научите да програмирате. Направете промени в HTML документа си по следния начин:

<html>
	<head>
	   <title>My External JavaScript Code!!!</title>
	   <script type="text/javascript" src="currentdetails.js">
	   </script>
	</head>
	<body>
	</body>
</html>

⚠️ Предупреждение: Старият скрипт по-горе поставя нула преди всеки час, така че 11 сутринта се показва като 011. Той също така присвоява hours1 без да се декларира, което създава имплицитна глобална променлива и хвърля грешка в строг режим. Коригираната версия по-долу поправя и двата дефекта.

Съвременното пренаписване на същия файл е по-кратко, декларира всяка променлива и допълва стойностите правилно:

// currentdetails.js - corrected modern version
const now = new Date();

const months = ["January", "February", "March", "April", "May", "June",
                "July", "August", "September", "October", "November", "December"];

const hours24 = now.getHours();
const suffix  = hours24 >= 12 ? "PM" : "AM";
const hours12 = String(hours24 % 12 || 12).padStart(2, "0");
const mins    = String(now.getMinutes()).padStart(2, "0");
const secs    = String(now.getSeconds()).padStart(2, "0");

const message = "Today is " + now.getDate() + " - " + months[now.getMonth()] +
                " - " + now.getFullYear() + ". Current time is " +
                hours12 + ":" + mins + ":" + secs + " " + suffix + ".";

document.getElementById("stamp").textContent = message;

Изходен изход:

Today is 29 - July - 2026. Current time is 09:05:07 AM.

Как да свържете външен JavaПравилно зареждане на скриптовия файл

Три детайла решават дали даден външен файл изобщо ще се зареди: пътят, записан в атрибута src, позицията на тага на скрипта в документа и приложеният към него атрибут за зареждане.

Пътищата се разрешават спрямо HTML документа, освен ако не е предоставена водеща наклонена черта или пълен адрес.

src стойност Значение Решава да
currentdetails.js Същата папка като HTML страницата /pages/currentdetails.js
js/currentdetails.js Подпапка на текущата папка /pages/js/currentdetails.js
../currentdetails.js Една папка над текущата /currentdetails.js
/assets/js/currentdetails.js Абсолютен път от корена на сайта /assets/js/currentdetails.js

Атрибутът loading контролира кога браузърът спира да анализира HTML, за да изпълни файла. Таблицата по-долу обобщава трите налични поведения.

Атрибут Изтегли Момент на изпълнение Поръчката е запазена
None Блокира HTML парсинга Веднага след изтеглянето Да
отлага Паралелно с парсинга След като документът бъде анализиран Да
асинхронен Паралелно с парсинга Веднага щом изтеглянето приключи Не
<!-- Recommended for scripts that read the DOM -->
<script src="js/currentdetails.js" defer></script>

<!-- Recommended for independent third party scripts -->
<script src="js/analytics.js" async></script>

<!-- Modern module syntax, deferred by default -->
<script type="module" src="js/app.js"></script>

💡 Съвет: - type="text/javascript" Атрибутът е незадължителен в HTML5 и може да бъде пропуснат. Запазете го само когато поддържа много стари браузъри или го заменете с type="module" при използване на оператори за импортиране и експортиране.

Вътрешен срещу външен JavaСценарий: Ключови разлики

Сравнението по-долу поставя двете позиции едно до друго въз основа на факторите, които обикновено определят избора.

фактор вътрешен JavaСценарий Външен JavaСценарий
Място за съхранение Вътре в HTML файла Отделен файл с разширение .js
Повторно използване на различни страници Изисква копиране на всяка страница Един файл, цитиран от всяка страница
Кеширане на браузъра Изтегля се отново с всяка страница Кеширано веднъж и използвано повторно
Усилия за поддръжка Високо, когато кодът е споделен Ниско, един файл за редактиране
Допълнителна HTTP заявка Не Да, по един на файл
Отстраняване на грешки По-трудно в дълъг HTML файл По-лесно с ясни имена на файлове и номера на редове
Най-подходящ за Кратка логика, специфична за страницата Споделени библиотеки и дълги скриптове

Кога да използвате вътрешни и външни JavaСценарий Code?

Ако имате само няколко реда код, който е специфичен за определена уеб страница, тогава е по-добре да запазите своя JavaКод на скрипта вътрешно във вашия HTML документ.

От друга страна, ако вашият JavaСкрипт код се използва в много уеб страници, тогава трябва да помислите за keeping вашия код в отделен файл. В този случай, ако желаете да направите някои промени в кода си, трябва да промените само един файл, което улеснява поддръжката на кода. Ако кодът ви е твърде дълъг, тогава е по-добре да го съхранявате в отделен файл. Това помага за лесното отстраняване на грешки.

Практическо правило за начинаещи е праг от приблизително десет реда. Всичко по-кратко и специфично за страницата може да остане вътрешно, докато всичко по-дълго или споделено принадлежи на външен файл.

В редица JavaСкрипт и защо трябва да се избягва

Трето разположение съществува в по-стари страници, където кодът е написан директно в HTML атрибут. Въпреки че все още се изпълнява, той смесва структура с поведение и не може да бъде кеширан, използван повторно или обхванат от строга политика за сигурност на съдържанието.

<!-- Inline handler: works, but avoid it -->
<button onclick="alert('Clicked')">Click me</button>

<!-- Preferred: behaviour attached from a script -->
<button id="greet">Click me</button>

<script>
  document.getElementById("greet").addEventListener("click", () => {
      alert("Clicked");
  });
</script>

След като се почувствате комфортно с поставянето на скриптове, продължете с JavaМетоди за масиви от скриптове, проучване цикли в JavaСценарийи работете чрез практически JavaПримери за скриптов кодВъншните файлове също така улесняват значително управлението на логиката на съхранението на браузъра, като например бисквитки в JavaСценарий.

Въпроси и Отговори

Поставете го точно преди затварящия таг body или в head с атрибута defer. И двете опции позволяват HTML кодът да се рендира първи, така че елементите да съществуват по време на изпълнението на кода.

Да. Добавете по един скриптов таг на файл. Без асинхронност браузърът ги изпълнява в реда, в който се появяват, така че поставете файловете, които дефинират споделени функции, преди файловете, които ги извикват.

Обичайните причини са грешен път към src, липсващ таг на затварящ скрипт или име на файл с различна главна буква. Отворете мрежовия панел на браузъра и потърсете отговор 404.

Само при първото посещение, когато е направена още една заявка. След това файлът се извлича от кеша на браузъра, което обикновено е по-бързо от повтарянето на един и същ код във всяка страница.

Повечето асистенти връщат един HTML файл с вътрешни тагове за скриптове, защото той се изпълнява без настройка. Поискайте изрично отделен .js файл, когато ви е необходима структура, готова за работа.

Външните файлове с атрибут async са подходящи за AI джаджи на трети страни, като например чатботове, защото се зареждат независимо и никога не блокират рендирането на околната страница.

Обобщете тази публикация с: