Next.js Script Optimization (next/script) Sinhala Guide - Performance Tips
ආයුබෝවන් යාළුවනේ! කොහොමද ඉතින්? අද අපි කතා කරන්න යන්නේ Next.js project එකක performance එක වැඩි දියුණු කරගන්න පුළුවන් ඉතා වැදගත් tool එකක් ගැන: ඒ තමයි next/script component එක.
අපි හැමෝම දන්නවා, වෙබ් අඩවියක වේගය කියන්නේ අද කාලේ ගොඩක් වැදගත් දෙයක් කියලා. Google එකේ Search Engine Optimization (SEO) වලට වගේම, අපේ user ලාට හොඳ user experience (UX) එකක් දෙන්නත් වෙබ්සයිට් එක fast වෙන එක අත්යවශ්යයි. සමහර වෙලාවට, අපේ වෙබ්සයිට් එකට Google Analytics, Stripe, Ads, Chat widgets වගේ third-party scripts එකතු කරද්දී, මේවා නිසා වෙබ්සයිට් එකේ වේගය අඩාල වෙන්න පුළුවන්. අන්න ඒ වගේ තත්ත්වයකදී, Next.js වල තියෙන next/script අපේ ජීවිතේට මාර පහසුවක් ගේනවා!
මේ tutorial එකෙන් අපි බලමු:
next/scriptකියන්නේ මොකක්ද සහ ඒක සාමාන්ය<script>tag එකට වඩා වෙනස් වෙන්නේ කොහොමද කියලා.- Scripts load කරන විවිධ strategies (
beforeInteractive,afterInteractive,lazyOnload) මොනවාද සහ ඒවා භාවිතා කරන්නේ කොහොමද කියලා. - ප්රායෝගික උදාහරණයක් විදිහට, Google Analytics එක
next/scriptභාවිතා කරලා අපේ Next.js project එකට එකතු කරන්නේ කොහොමද කියලා. - Scripts load වෙන හැටි verify කරගන්න සහ ගැටලු විසඳාගන්න (troubleshooting) පුළුවන් විදිහ.
- හොඳම භාවිතයන් (best practices) සහ පොදු ගැටලු.
හරි, එහෙනම් වැඩේට බහිමු!
1. Next.js වල next/script කියන්නේ මොකක්ද?
සාමාන්යයෙන් අපි වෙබ්සයිට් එකකට JavaScript script එකක් එකතු කරන්නේ HTML <script> tag එක භාවිතා කරලානේ. නමුත් මේ සාමාන්ය script tags වල තියෙන ප්රධානම ගැටලුව තමයි, ඒවා බොහෝ විට වෙබ්සයිට් එක load වෙන එක block කරනවා. ඒ කියන්නේ, browser එක script එක load කරලා execute කරනකම්, පිටුවේ අනිත් content render කරන එක නවත්වනවා. මේ නිසා Largest Contentful Paint (LCP) සහ First Input Delay (FID) වගේ core web vitals වලට අහිතකර විදිහට බලපානවා.
Next.js මේකට විසඳුමක් විදිහට next/script component එක හඳුන්වා දීලා තියෙනවා. මේක සාමාන්ය <script> tag එකේ advanced version එකක් වගේ. next/script භාවිතා කරාම Next.js automatically මේ scripts load කරන එක optimize කරනවා. ඒ කියන්නේ, browser එකේ main thread එක block නොකර, user experience එකට අවම බලපෑමක් ඇති වෙන විදිහට මේ scripts load කරන්න Next.js උදව් කරනවා. මේක Next.js වල තියෙන built-in performance features වල තවත් එක් වැදගත් කොටසක්.
next/script භාවිතා කරන්නේ මෙහෙමයි:
import Script from 'next/script';
function MyPage() {
return (
<div>
<h1>Welcome to My Page</h1>
{/* සාමාන්ය script tag එකක් වගේම තමයි, නමුත් next/script! */}
<Script src="https://example.com/my-script.js" />
</div>
);
}
export default MyPage;
දැන් බලමු මේ scripts load කරන විවිධ strategies මොනවාද කියලා.
2. Script Loading Strategies: strategy prop එකෙන් වැඩ ගන්න හැටි
next/script වල තියෙන ප්රධානම සහ බලගතුම feature එක තමයි strategy prop එක. මේකෙන් අපිට කියන්න පුළුවන් script එකක් load වෙන්න ඕන කොයි වෙලාවටද කියලා. මේකෙන් තමයි performance එකට ලොකු වෙනසක් කරන්න පුළුවන් වෙන්නේ. ප්රධාන strategies 3ක් තියෙනවා:
2.1. beforeInteractive
මේ strategy එක භාවිතා කරන්නේ වෙබ් පිටුව interactive (එනම්, user ට click කරන්න, form submit කරන්න වගේ දේවල් කරන්න පුළුවන් වෙන්න) කලින් load වෙන්න ඕන scripts සඳහායි. මේ scripts Next.js page එක hydration වෙන්න කලින්, server side එකේදී pre-load වෙනවා. මේ නිසා critical scripts සඳහා මේක ගොඩක් වැදගත්. උදාහරණයක් විදිහට, Google Tag Manager වගේ analytics scripts, හෝ user interactive වෙන්න කලින්ම data capture කරන්න ඕන scripts වලට මේක පාවිච්චි කරන්න පුළුවන්.
සැලකිය යුතුයි: මේක page එකේ initial render එක block කරන්න පුළුවන්. ඒ නිසා, මේ strategy එක පාවිච්චි කරන්න ඕන, script එකේ content එක critical නම් විතරයි.
<Script
src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX"
strategy="beforeInteractive"
/>
2.2. afterInteractive
මේක තමයි default strategy එක. සාමාන්යයෙන් අපේ third-party scripts වලින් 90% කටත් වඩා මේ strategy එක ගැලපෙනවා. afterInteractive කියන්නේ වෙබ් පිටුව interactive (hydration) වුනාට පස්සේ, නමුත් browser එක idle වෙන්න කලින්, script එක load කරන්න කියලා.
මේකෙන් වෙන්නේ, වෙබ් පිටුවේ ප්රධාන content එක ඉක්මනින්ම user ට දර්ශනය වෙන්න සලස්වලා, අනිත් scripts (analytics, ads, etc.) ටික පස්සේ load කරන එක. මේ නිසා First Input Delay (FID) වගේ metrics වලට හොඳ බලපෑමක් ඇති වෙනවා. බොහෝ analytics scripts, social media plugins, comment systems වගේ දේවල් වලට මේක කදිමයි.
<Script
src="https://connect.facebook.net/en_US/sdk.js"
strategy="afterInteractive"
/>
2.3. lazyOnload
lazyOnload strategy එක භාවිතා කරන්නේ, වෙබ් පිටුව සම්පූර්ණයෙන්ම load වෙලා, browser එක idle වෙලා, නැත්නම් script එක තියෙන component එක user ගේ viewport එකට එන වෙලාවට විතරක් script එක load කරන්නයි. මේක ගොඩක්ම ප්රයෝජනවත් වෙන්නේ ගොඩක් බර (heavy) scripts සඳහා, නැත්නම් page එකේ පහළට scroll කරද්දී විතරක් අවශ්ය වෙන scripts සඳහායි. උදාහරණයක් විදිහට, chat widgets, consent banners, video players වගේ ඒවා.
මේකෙන් වෙබ්සයිට් එකේ initial load time එකට කිසිම බලපෑමක් වෙන්නේ නැති නිසා, performance එකට විශාල වාසියක් ලැබෙනවා.
<Script
src="https://platform.twitter.com/widgets.js"
strategy="lazyOnload"
/>
සාරාංශයක් විදිහට:
beforeInteractive: page එක interactive වෙන්න කලින් (critical scripts).afterInteractive: page එක interactive වුනාට පස්සේ, idle වෙන්න කලින් (most common scripts).lazyOnload: page එක load වෙලා, browser idle වෙලාවට, හෝ viewport එකට එද්දී (non-critical, heavy scripts).
3. ප්රායෝගික උදාහරණයක්: Google Analytics එකතු කරමු
දැන් අපි බලමු කොහොමද Google Analytics (GA) එක next/script භාවිතා කරලා අපේ Next.js project එකට එකතු කරන්නේ කියලා. අපි මේ සඳහා afterInteractive strategy එක භාවිතා කරමු, මොකද GA script එක initial page render එක block නොකර, user interactive වුනාට පස්සේ load වෙන එක performance එකට හොඳයි.
3.1. GA Measurement ID එක ලබා ගැනීම
මුලින්ම ඔයාලා Google Analytics ගිණුමක් හදලා, ඒකෙන් Measurement ID (G-XXXXXXX) එක ලබා ගන්න ඕන. ඒක කොහොමද කරන්නේ කියලා දැනටමත් දන්නවා ඇති කියලා හිතනවා. ඒ ID එක අපි .env.local file එකක environment variable එකක් විදිහට save කරගනිමු, මොකද ඒක production build වලට විතරක් නෙවෙයි, development වලදීත් පාවිච්චි කරන්න පුළුවන් වෙන්න ඕන.
ඔබේ project root folder එකේ .env.local කියන file එක හදලා, මේ code එක paste කරන්න:
NEXT_PUBLIC_GA_ID=G-YOUR_MEASUREMENT_ID
G-YOUR_MEASUREMENT_ID කියන එකට ඔයාගේ ඇත්ත GA Measurement ID එක ආදේශ කරන්න. මතක තියාගන්න, Next.js වල client-side එකේදී access කරන්න පුළුවන් environment variables වලට NEXT_PUBLIC_ prefix එක අනිවාර්යයි.
3.2. next/script භාවිතා කරලා GA එකතු කිරීම
දැන් අපි _app.js file එක modify කරමු (ඔබට pages/_app.js file එකක් නැත්නම් හදාගන්න). මේ file එකේ script එක දැම්මම, අපේ වෙබ්සයිට් එකේ හැම page එකකටම GA script එක automatically load වෙනවා.
// pages/_app.js
import Script from 'next/script';
import '../styles/globals.css'; // ඔබේ global styles මෙතනට
function MyApp({ Component, pageProps }) {
return (
<>
{/* Google Analytics Global Site Tag (gtag.js) */}
<Script
strategy="afterInteractive"
src={`https://www.googletagmanager.com/gtag/js?id=${process.env.NEXT_PUBLIC_GA_ID}`}
/>
{/* Google Analytics initialization script */}
<Script
id="google-analytics-init"
strategy="afterInteractive"
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${process.env.NEXT_PUBLIC_GA_ID}', {
page_path: window.location.pathname,
});
`,
}}
/>
<Component {...pageProps} />
</>
);
}
export default MyApp;
මෙතන මොකද වෙන්නේ කියලා ටිකක් පැහැදිලි කරමු:
- පළවෙනි
<Script>එක: මේකෙන් Google Analytics වලgtag.jslibrary එක load කරනවා. අපිstrategy="afterInteractive"භාවිතා කරනවා, ඒ නිසා page එක interactive වුනාට පස්සේ තමයි මේක load වෙන්නේ.srcattribute එකට අපි environment variable එකෙන් ලබාගත්ත GA ID එක භාවිතා කරනවා. - දෙවෙනි
<Script>එක: මේකෙන් Google Analytics initialize කරන actual JavaScript code එක contain කරනවා. අපි මෙතනid="google-analytics-init"එකක් දීලා තියෙනවා. මේidඑක script එකට අනන්ය නමක් දෙනවා, ඒකnext/scriptඑකට වැදගත් වෙනවා.dangerouslySetInnerHTMLකියන prop එක භාවිතා කරන්නේ HTML වලට කෙලින්ම JavaScript code එකක් embed කරන්නයි. මේක භයානකයි වගේ පෙනුනත් (ඒකයි නම), අපි විශ්වාසවන්ත sources වලින් එන code වලට මේක භාවිතා කරන්න පුළුවන්. මෙතනත් අපිafterInteractivestrategy එකම භාවිතා කරනවා.
දැන් ඔයාගේ Next.js project එක start කරලා බලන්න (npm run dev හෝ yarn dev). Google Analytics දැන් ඔබේ වෙබ්සයිට් එකට සාර්ථකව integrate වෙලා ඇති.
4. Loading Behavior එක Check කරමු (Review & Troubleshooting)
Script එකක් හරියට load වෙනවද නැද්ද කියලා check කරන එක ගොඩක් වැදගත්. මේක කරන්න අපිට browser එකේ Developer Tools භාවිතා කරන්න පුළුවන්. අපි බලමු කොහොමද Network Tab එක භාවිතා කරන්නේ කියලා.
- Developer Tools Open කරන්න: ඔබේ වෙබ්සයිට් එක browser එකේ open කරලා, F12 ඔබන්න, නැත්නම් right-click කරලා "Inspect" තෝරන්න.
- Network Tab එකට යන්න: Developer Tools වල තියෙන "Network" tab එක select කරන්න.
- Filter කරන්න: Network tab එකේ filter box එකේ "gtag" කියලා type කරන්න. එතකොට Google Analytics script එක විතරක් filter වෙලා පෙන්වයි.
- Script එකේ status එක බලන්න:
gtag.jsscript එක load වෙලාද කියලා බලන්න. ඒකේ status code එක 200 (OK) වෙන්න ඕන. - Timing සහ Initiator බලන්න: script එක load වුන වෙලාව සහ initiator (ඒ කියන්නේ script එක load වුනේ කොහෙන්ද) බලන්න.
afterInteractivestrategy එකේදී, මේ script එක page එකේ අනිත් resources load වුනාට පස්සේ load වෙනවා කියලා පෙනෙයි.
පොදු ගැටලු සහ විසඳුම්:
- Script එක load වෙන්නේම නැත්නම්:
srcpath එක නිවැරදිද කියලා check කරන්න.- Environment variable එක (
NEXT_PUBLIC_GA_ID) හරියට set කරලාද කියලා බලන්න. project එක restart කරන්නත් අමතක කරන්න එපා. - Browser එකේ cache එක clear කරලා බලන්න.
- Developer Console එකේ errors තියෙනවද කියලා බලන්න.
- Script එක ඕනෑවට වඩා ඉක්මනින් හෝ පසුව load වෙනවා නම්:
strategyprop එක නිවැරදිද කියලා බලන්න. සමහර වෙලාවටbeforeInteractiveදාන්න ඕන එකකටafterInteractiveදාලා වෙන්න පුළුවන්.
- Script එකේ functionality වැඩ කරන්නේ නැත්නම්:
- Script එක load වුනාට පස්සේ execute වෙන code එකේ මොකක් හරි error එකක් තියෙන්න පුළුවන්.
dangerouslySetInnerHTMLඑක ඇතුළේ තියෙන code එක හොඳින් review කරන්න. - තව script එකක් එක්ක conflict වෙනවාද කියලා බලන්න.
- Script එක load වුනාට පස්සේ execute වෙන code එකේ මොකක් හරි error එකක් තියෙන්න පුළුවන්.
5. හොඳම Practices සහ පොදු ගැටලු (Best Practices & Common Issues)
next/script භාවිතා කරද්දී මතක තියාගන්න ඕන හොඳම practices සහ පොදු ගැටලු කිහිපයක් මෙන්න:
Best Practices:
- හැම third-party script එකකටම
next/scriptභාවිතා කරන්න: සාමාන්ය<script>tags භාවිතා කරනවා වෙනුවට, හැම වෙලාවෙමnext/scriptභාවිතා කරන්න පුරුදු වෙන්න. මේකෙන් Next.js වල built-in optimization වලින් උපරිම ප්රයෝජන ගන්න පුළුවන්. - නියමිත
strategyඑක තෝරන්න: script එකේ වැදගත්කම සහ user experience එකට බලපාන විදිහ අනුව නිවැරදිstrategyඑක තෝරන්න. අනවශ්ය විදිහටbeforeInteractiveභාවිතා කිරීමෙන් වළකින්න. idattribute එක භාවිතා කරන්න: ඔබdangerouslySetInnerHTMLභාවිතා කරනවා නම්, හෝ එකම script එක multiple times load වෙනවා නම් (Next.js මේක automatically de-duplicate කරනවා, ඒත්),idattribute එකක් දෙන එක හොඳයි.- Environment variables භාවිතා කරන්න: API keys, Measurement IDs වගේ sensitive data හෝ third-party IDs environment variables (
.env.local) වල save කරලා,process.env.NEXT_PUBLIC_YOUR_VARවිදිහට access කරන්න. - Test කරන්න: ඔබේ වෙබ්සයිට් එක वेगवेगळ्या browsers සහ devices වල test කරලා බලන්න. Script එක load වෙන විදිහ සහ performance එක වෙනස් වෙන්න පුළුවන්.
Common Issues:
- වැරදි
strategyඑකක් භාවිතා කිරීම:beforeInteractiveඑක අනවශ්ය විදිහට භාවිතා කිරීමෙන් initial page load එක block වෙලා performance අඩාල වෙන්න පුළුවන්.lazyOnloadඑකක් දාන්න ඕන තැනකafterInteractiveදැම්මොත්, user ට අවශ්ය නැති වෙලාවක script එක load වෙන්න පුළුවන්.
dangerouslySetInnerHTMLඅනිසි ලෙස භාවිතා කිරීම: මේක security risk එකක් වෙන්න පුළුවන්. විශ්වාසවන්ත sources වලින් එන code වලට විතරක් මේක භාවිතා කරන්න.- Scripts page transitions වලින් පස්සේ වැඩ නොකිරීම: සමහර legacy scripts, Next.js වගේ SPA (Single Page Application) frameworks වල page transitions වලින් පස්සේ හරියට initialize වෙන්නේ නැති වෙන්න පුළුවන්. මේ සඳහා script එකේ initialization logic එක page changes වලට react කරන විදිහට modify කරන්න සිද්ධ වෙන්න පුළුවන්. (උදා: router events වලට listen කරලා re-initialize කරන එක). නමුත්
_app.jsඑකේ දාන scripts බොහෝ විට මේ ගැටලුවෙන් තොරයි. - Blocking resources:
beforeInteractivestrategy එක ප්රවේශමෙන් භාවිතා කරන්න. මේකෙන් critical path එක block වෙලා Core Web Vitals වලට අහිතකර විදිහට බලපෑම් කරන්න පුළුවන්.
අවසන් වශයෙන්
ඉතින් යාළුවනේ, මේ tutorial එකෙන් next/script භාවිතා කරලා Next.js project එකක third-party scripts optimize කරන හැටි ගැන හොඳ අවබෝධයක් ලැබෙන්න ඇති කියලා මම හිතනවා. වෙබ් අඩවියක performance කියන්නේ අද කාලේ අත්යවශ්ය දෙයක්, ඒ නිසා මේ වගේ tools භාවිතා කරලා ඒක වැඩි දියුණු කරගන්න එක ගොඩක් වැදගත්.
ඔබේ project වලට next/script integrate කරලා බලන්න. strategy options එක්ක අත්හදා බලලා, ඔබේ වෙබ්සයිට් එකට හොඳම performance එක ලැබෙන විදිහ හොයාගන්න. මේ ගැන ඔයාලගේ අත්දැකීම් මොනවාද? මොනවා හරි ගැටලුවක් ආවොත් comment section එකේ අහන්න. අපි හැමෝටම උදව් කරගනිමු!
Next.js එක්ක තවදුරටත් ඉගෙන ගන්න, අලුත් දේවල් හදන්න මේක ඔයාලට උදව් වෙයි කියලා හිතනවා! ජයවේවා!