<!DOCTYPE html>
<html lang="id" xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Cache-Control" content="no-transform" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="applicable-device" content="pc,mobile" />
    <meta name="renderer" content="webkit" />
    <meta name="format-detection" content="telephone=no" />
    <!-- DNS prefetch for external resources -->
    <link rel="dns-prefetch" href="//fonts.googleapis.com" />
    <link rel="dns-prefetch" href="//www.google-analytics.com" />
    <!-- Preconnect to external domains -->
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><title>jalalive - Siaran langsung Serie A,jadwal siaran langsung serie a,siaran langsung serie a malam ini</title>
    <meta name="description" content="Jalalive adalah situs web yang memungkinkan Anda menonton siaran langsung sepak bola secara gratis. Anda dapat menyaksikan pertandingan langsung dari Liga Inggris, La Liga, dan Bundesliga, serta video sepak bola dalam resolusi HD yang terbaru." />
    <meta name="keywords" content="jalalive,Siaran langsung Serie A,jadwal siaran langsung serie a,siaran langsung serie a malam ini" />
    <link rel="shortcut icon" href="" type="image/x-icon">
    <meta name="baidu-site-verification" content="" />


    <link rel="preload" href="/t20_id/resource/css/style.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
    <noscript><link href="/t20_id/resource/css/style.css" rel="stylesheet"></noscript>
    <link rel="preload" href="/t20_id/resource/css/zhicwl-style.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
    <noscript><link href="/t20_id/resource/css/zhicwl-style.css" rel="stylesheet"></noscript>
    
    <!-- Inline CSS loading optimization -->
    <script>
        // Polyfill for CSS preload in older browsers
        !function(e){"use strict";var t=function(t,n,r){function o(e){if(i.body)return e();setTimeout(function(){o(e)})}function a(){d.addEventListener&&d.removeEventListener("load",a),d.media=r||"all"}var i=e.document,d=i.createElement("link");if(n)d.id=n;d.rel="stylesheet",d.href=t,d.media="only x",o(function(){i.head.appendChild(d)}),setTimeout(function(){d.addEventListener?d.addEventListener("load",a):d.attachEvent&&d.attachEvent("onload",a)});return d};"undefined"!=typeof module?module.exports=t:e.loadCSS=t}("undefined"!=typeof global?global:this);
    </script>
    <style>
        
        /* Loading optimization */
        img{max-width:100%;height:auto}
        img[data-src]{background:#f0f2f5;min-height:20px}
    </style>
</head>

<body>
    <!-- adSwitch Start-->
<script type="text/javascript" src="/common/jquery.min.js"></script>
<link href="/common/adSwitch.css" rel="stylesheet" media="screen" type="text/css">
<div class="container swiper" id="adSwitch">
<div class="swiper-wrapper">

</div>
<div class="swiper-pagination"></div>
</div>
<script type="text/javascript" src="/common/adSwitch.js"></script>
<!-- adSwitch End-->

    <div class="zc_head">
        <div class="wrapper">
            <div class="head_logo"><a href="/" style="font-size: 16px; font-weight: bold; color: #333; text-decoration: none;">jalalive</a></div>
            <ul class="head_nav">
                <li> <a href="/">Beranda </a> </li><li><a data-id="1" href="/live/sepak/" title="Sepak bola" target="_self">Sepak bola</a></li><li><a data-id="2" href="/live/basket/" title="Bola basket" target="_self">Bola basket</a></li><li><a data-id="3" href="/result/" title="Hasil pertandingan" target="_self">Hasil pertandingan</a></li><li><a data-id="4" href="/zt/" title="Pemilihan Topik" target="_self">Pemilihan Topik</a></li><li><a data-id="5" href="/news/" title="Berita Terkini" target="_self">Berita Terkini</a></li><li><a data-id="6" href="/channel/" title="Saluran TV" target="_self">Saluran TV</a></li><li><a data-id="7" href="/data/" title="Pangkalan data" target="_self">Pangkalan data</a></li><li><a data-id="8" href="/video/" title="Rekaman pertandingan" target="_self">Rekaman pertandingan</a></li><li><i id="navslip"></i></li>
            </ul>
            <div class="clear"></div>
        </div>
    </div>
 
    <div class="wrapper mt6">
        <div class="zc_league">
            <dl>
                <dt>Populer</dt>
                <dd><a href="/live/fifaworldcupqualificationuefa/" title="Kualifikasi Piala Dunia （ UEFA )" target="_self">Kualifikasi Piala Dunia （ UEFA )</a><a href="/live/engpremierleague/" title="Liga Utama Inggris" target="_self">Liga Utama Inggris</a><a href="/live/itaseriea/" title="Serie A" target="_self">Serie A</a><a href="/live/spalaliga/" title="La Liga" target="_self">La Liga</a><a href="/live/gerbundesliga/" title="Fußball-Bundesliga" target="_self">Fußball-Bundesliga</a><a href="/live/fraligue1/" title="Ligue 1" target="_self">Ligue 1</a><a href="/live/csl/" title="Liga Super Tiongkok" target="_self">Liga Super Tiongkok</a><a href="/live/jpnj1/" title="Liga J1 Jepang" target="_self">Liga J1 Jepang</a><a href="/live/jpnj2/" title="J2 League Jepang" target="_self">J2 League Jepang</a><a href="/live/kork1/" title="K League 1" target="_self">K League 1</a><a href="/live/kork2/" title="K League 2" target="_self">K League 2</a><a href="/live/ausaleague/" title="A-League Australia" target="_self">A-League Australia</a><a href="/live/idnliga1/" title="Indonesian Liga 1" target="_self">Indonesian Liga 1</a><a href="/live/nba/" title="Asosiasi Basket Nasional" target="_self">Asosiasi Basket Nasional</a><a href="/live/cba/" title="Asosiasi Bola Basket Tiongkok" target="_self">Asosiasi Bola Basket Tiongkok</a></dd>
                <div class="clear"></div>
            </dl>
        </div>
        <div class="zc_left">
            <div class="left_box">
                <h3 onclick="display('20151',0);" class="cp"  onkeypress="if(event.key==='Enter')display('20151',0);"><strong class="h">Siaran Langsung Pertandingan</strong> <span id="list_20151_span" aria-live="polite"></span><img alt="Expand match list" id="list_20151_img" src="/t20_id/resource/images/show_no.gif" width="16" height="16" loading="lazy" /></h3>
<ul id="match_wrapper" id="list_20151">
</ul>
<p class="zb-area_btn load_more" style="width: 100%; 
        border-radius: 5px;
        text-align: center;
        padding: .4rem;
        cursor: pointer;
        border: solid 1px #f6f6f6;
        color: #000;
        background: #fff;box-sizing: border-box;margin-top: 10px;display: none;">tampilkan lebih banyak pertandigan</p>
<script>

document.addEventListener('DOMContentLoaded', function() {
  // 仅需 DOM 结构加载完成时执行（无需等待图片等资源）
  console.log('DOM 加载完成');
  
  // 示例操作：快速初始化交互功能
  setupDropdownMenu();
});
    const setupDropdownMenu = ()=> {
        let controller = new AbortController();
        let loading = false;

        const tabs = document.createElement("div");
        const wrapper = document.getElementById("match_wrapper");
        const data = [];

        /**缓存 */
        const cache = new Map();

        /**
         * 更新方法
         * @param { AbortController } controller 控制器
         * @param { Record<string,unknown>[] } data 数据
         * @param { number } end 长度
         */
        const update = async (controller, data, end) => {
            console.log(controller, data, end, 'controller, data, end')
            loading = true;
            console.time("update");
            await new Promise((resolve) => window.requestAnimationFrame(resolve));

            const render = async (data) => {
                for (let i = 0; i < data.length; i++) {
                    const $item = data[i];
                    const $key = `${$item.sportId}_${$item.id}`;
                    const $item_el = (() => {
                        if (cache.has($key)) {
                            return cache.get($key);
                        } else {
                            /**@type {HTMLLIElement} */
                            const $item_el = new DOMParser().parseFromString(`
                                 <li id="m">
                                    <div class="tit"><em>${String($item.matchTs.getMonth() + 1).padStart(2, "0")}/${String($item.matchTs.getDate()).padStart(2, "0")} ${String($item.matchTs.getHours()).padStart(2, "0")}:${String($item.matchTs.getMinutes()).padStart(2, "0")}</em><a href="/${ $item.compUrl }"><strong class="">${ $item.comp }</strong></a><a class="title" href="/${ $item.router }"> ${ $item.home } VS ${ $item.away }</a><a href="/${ $item.router }" target="_blank" style="color:#A32929; font-weight: 800;">${ $item.buttonName }</a></div>
                                </li>
                            `, "text/html").body.children.item(0);
                            cache.set($key, $item_el);
                            return $item_el;
                        }
                    })();
if (controller.signal.aborted) break;
                    // 1. 修复 pageYOffset 兼容性（核心）
Object.defineProperty(window, "pageYOffset", { 
  get: () => document.documentElement.scrollTop || document.body.scrollTop 
});
                    if (controller.signal.aborted) break;
                    if ($item.isTop === 1) {
                        $item_el.classList.add("is_top");
                        for (const $el of wrapper.children) {
                            if ($el.classList.contains("is_top")) continue;
                            wrapper.insertBefore($item_el, $el);
                            break;
                        }
                    } else wrapper.appendChild($item_el);

                    await new Promise((resolve) => window.setTimeout(resolve, 0, void 0));
                    if (controller.signal.aborted) break;
                }
                return data.length
            }

            let start = 0;
            console.log(wrapper, 'wrapper')
            start += await render(data.slice(0, end)).then((length) => (wrapper.nextElementSibling.style.setProperty("display", (data.length > (start + length) ? "block" : "none")), length));

            controller.signal.addEventListener("abort", () => wrapper.nextElementSibling.style.setProperty("display", "none"), { once: true });
            wrapper.nextElementSibling.addEventListener("click", async ($event) => {
                $event.preventDefault();
                start += await render(data.slice(start, start + 200)).then((length) => (wrapper.nextElementSibling.style.setProperty("display", (data.length > (start + length) ? "block" : "none")), length));
            }, { signal: controller.signal });
            
        
            console.timeEnd("update");
            loading = false;
        }
        /**首次更新 => update() */
        const hot_id = [/*  */"competition_id=2&sport_id=1",/*  */"competition_id=82&sport_id=1",/*  */"competition_id=108&sport_id=1",/*  */"competition_id=120&sport_id=1",/*  */"competition_id=129&sport_id=1",/*  */"competition_id=142&sport_id=1",/*  */"competition_id=542&sport_id=1",/*  */"competition_id=567&sport_id=1",/*  */"competition_id=568&sport_id=1",/*  */"competition_id=581&sport_id=1",/*  */"competition_id=582&sport_id=1",/*  */"competition_id=590&sport_id=1",/*  */"competition_id=1788&sport_id=1",/*  */"competition_id=1&sport_id=2",/*  */"competition_id=3&sport_id=2",/*  */];
        const api_src = new URL("/getMatchListJsonp", location.origin);
        api_src.searchParams.set("days", "1");
        fetch(api_src).then((response) => response.json()).then(({ matchLiveList }) => {
            const list = [];
            for (let i = 0; i < matchLiveList.length; i++) list.push({ ...matchLiveList[i], matchTs: new Date(matchLiveList[i].matchTs * 1000) });
            list.sort((a, b) => a.matchTs.getTime() - b.matchTs.getTime());
            const contest_all = [];
            const contest_football = [];
            const contest_basketball = [];
            const contest_hot = [];
            for (let i = 0; i < list.length; i++) {
                if (list[i].sportId === 1) contest_football.push(list[i]);
                if (list[i].sportId === 2) contest_basketball.push(list[i]);
                if (hot_id.includes(`competition_id=${encodeURIComponent(list[i].competitionId)}&sport_id=${encodeURIComponent(list[i].sportId)}`)) contest_hot.push(list[i]);
            }

            data.unshift({ type: "3", list: contest_hot });
            data.unshift({ type: "2", list: contest_basketball });
            data.unshift({ type: "1", list: contest_football });
            data.unshift({ type: "0", list });

            ((item) => {
                for (let i = wrapper.children.length - 1; i >= 0; i--) wrapper.removeChild(wrapper.children[i]);
                const type = item instanceof HTMLElement ? item.getAttribute("data-type") : "0";
                for (let i = 0; i < data.length; i++) {
                    if (data[i]?.type === type) {
                        const list = data[i].list;
                        let end = 0;
                        if (list.length) {
                            const max = Math.min(...list.map((v) => v.matchTs.getTime())) + (3.6e+6 * 4);
                            while (list[end] && list[end].matchTs.getTime() <= max) end++;
                        }
                        update(controller, list, end);
                        break;
                    }
                }
            })(tabs?.querySelector(".match_filter_item.active"));
        });
    };
</script><div class="clear"></div>
            </div>
        </div>
        <div class="zc_right">

            <div class="right_slide">
                <div class="slideVideo">
                    <ul class="hd">
                        <li>Rekomendasi Rekaman Putar Balik</li>
                    </ul>
                    <div class="bd">
                        <ul>
                            
                            <li><a href="/f4384342.html" class="hei" target="_blank" rel="noopener">2025-11-18 Piala Belarusia SmorgonFC VS FCTorpedoZhodino Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4337912.html" class="hei" target="_blank" rel="noopener">2025-10-02 MLS Berikutnya PL Cadangan San Jose Earthquakes VS VancouverWhitecapsReserve Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4359987.html" class="hei" target="_blank" rel="noopener">2025-09-26 Liga MX Femenil Meksiko MazatlanFCWomen VS Mariusz Rybicki Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4315039.html" class="hei" target="_blank" rel="noopener">2025-09-22 Liga Wanita K1 MungyeongSangmuWFC VS SejongSportstotoWFC Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4369469.html" class="hei" target="_blank" rel="noopener">2025-09-11 Kategori Utama A Millonarios VS DeportivoPasto Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4386312.html" class="hei" target="_blank" rel="noopener">2025-09-08 Piala Chili Olahraga Limache VS DeportesLaSerena Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4413456.html" class="hei" target="_blank" rel="noopener">2025-09-08 Liga Bolivia Copa Karlo Bartolec VS Javi Flores Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4254502.html" class="hei" target="_blank" rel="noopener">2025-09-07 MLS Amerika Serikat HoustonDynamo VS LosAngelesGalaxy Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4367257.html" class="hei" target="_blank" rel="noopener">2025-09-03 Divisi Primera Kosta Rika ADSanCarlos VS MunicipalPrezZeledn Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4412586.html" class="hei" target="_blank" rel="noopener">2025-09-02 Piala Denmark Jozef Pukaj VS Hillerod Fodbold Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4412590.html" class="hei" target="_blank" rel="noopener">2025-09-02 Piala Denmark Ledoje-SmorumFodbold VS Lyngby Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4412591.html" class="hei" target="_blank" rel="noopener">2025-09-02 Piala Denmark MarstalRise VS Aalborg Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4413501.html" class="hei" target="_blank" rel="noopener">2025-09-02 Piala Negara CAFA 2023 Oman VS Kyrgyzstan Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4415537.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga Wanita Negara Bagian Queensland Australia Mohamed Hamdaoui VS EasternSuburbsSCWomen Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4393397.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga Portugal U23 MaritimoU23 VS Gil Vicente U23 Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4360015.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga MX Femenil Meksiko SantosLagunaWomen VS Mariusz Rybicki Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4360014.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga MX Femenil Meksiko AtlasWomen VS MazatlanFCWomen Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4302702.html" class="hei" target="_blank" rel="noopener">2025-09-02 Serie B Brasil FerroviariaSP VS Cuiaba Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4274920.html" class="hei" target="_blank" rel="noopener">2025-09-02 Serie A Ekuador Delfin SC VS Libertad FC Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4255987.html" class="hei" target="_blank" rel="noopener">2025-09-02 Divisi Utama Argentina GimnasiaLaPlata VS Atletico Tucuman Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4361574.html" class="hei" target="_blank" rel="noopener">2025-09-02 Segunda Division Spanyol CDLeganes VS DeportivoLaCoruna Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4294399.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga Sepak Bola Kanada Armando Ortiz VS YorkUnitedFC Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4361572.html" class="hei" target="_blank" rel="noopener">2025-09-02 Segunda Division Spanyol Schmelzer, Marcel VS Eibar Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4346480.html" class="hei" target="_blank" rel="noopener">2025-09-02 Divisi 1 Denmark Esbjerg VS HerfolgeBoldklubKoge Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4352197.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga Leumit Israel HapoelAfula VS HapoelRishonLezion Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4352188.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga Leumit Israel Adrian VS HapoelRamatGan Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4352194.html" class="hei" target="_blank" rel="noopener">2025-09-02 Liga Leumit Israel Aleksandar Pešić VS KiryatYamSC Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4413508.html" class="hei" target="_blank" rel="noopener">2025-09-01 Piala Negara CAFA 2023 Tajikistan VS Dejan Sorgic Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4413507.html" class="hei" target="_blank" rel="noopener">2025-09-01 Piala Negara CAFA 2023 India VS Iran Rekaman Putar Balik</a></li>
                            
                            <li><a href="/f4315053.html" class="hei" target="_blank" rel="noopener">2025-09-01 Liga Wanita K1 SejongSportstotoWFC VS Dawid Kubowicz Rekaman Putar Balik</a></li>
                            
                        </ul>
                    </div>
                </div>
            </div>
            <div class="right_slide">
                <div class="slideVideo">
                    <ul class="hd">
                        <li>Populer Berita</li>
                    </ul>
                    <div class="bd">
                        <ul>
                            
                        </ul>
                    </div>
                </div>
            </div>
            
        </div>
        <div class="zc_right">
            <div class="right_slide">
                <h3><strong>Liga Populer</strong></h3>
                <div class="slideVideo">
                    <div class="bd" id=tags>
                        <div><a href="/live/fifaworldcupqualificationuefa/" title="Kualifikasi Piala Dunia （ UEFA )" target="_self">Kualifikasi Piala Dunia （ UEFA )</a><a href="/live/engpremierleague/" title="Liga Utama Inggris" target="_self">Liga Utama Inggris</a><a href="/live/itaseriea/" title="Serie A" target="_self">Serie A</a><a href="/live/spalaliga/" title="La Liga" target="_self">La Liga</a><a href="/live/gerbundesliga/" title="Fußball-Bundesliga" target="_self">Fußball-Bundesliga</a><a href="/live/fraligue1/" title="Ligue 1" target="_self">Ligue 1</a><a href="/live/csl/" title="Liga Super Tiongkok" target="_self">Liga Super Tiongkok</a><a href="/live/jpnj1/" title="Liga J1 Jepang" target="_self">Liga J1 Jepang</a><a href="/live/jpnj2/" title="J2 League Jepang" target="_self">J2 League Jepang</a><a href="/live/kork1/" title="K League 1" target="_self">K League 1</a><a href="/live/kork2/" title="K League 2" target="_self">K League 2</a><a href="/live/ausaleague/" title="A-League Australia" target="_self">A-League Australia</a><a href="/live/idnliga1/" title="Indonesian Liga 1" target="_self">Indonesian Liga 1</a><a href="/live/nba/" title="Asosiasi Basket Nasional" target="_self">Asosiasi Basket Nasional</a><a href="/live/cba/" title="Asosiasi Bola Basket Tiongkok" target="_self">Asosiasi Bola Basket Tiongkok</a></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="clear"></div>
    </div>
    <div class="clear"></div>
    <div class="zc_foot">
        <div class="wrapper">Copyright © 1999 - 2024 All Rights Reserved jalalive <a class="footer-desc" href="/sitemap.xml" target="_blank" style="text-decoration: underline; border: 1px solid transparent; padding: 1px 2px; border-radius: 2px;">Peta Situs</a>
</div>
<div style="width: 100%; display: flex; justify-content: center; align-items: center; gap: 10px; margin-top: 10px;">
    
    <p><a target="_blank" rel="" href="https://indobet88.art/" title="indobet88" style="text-decoration: underline; border: 1px solid transparent; padding: 2px 4px; border-radius: 3px;">indobet88</a></p>
    
  </div>
    </div>
    <div class="zc_right_fixed">
        <a href="#" class="top" onclick="document.documentElement.scrollTop=0;document.body.scrollTop=0;return false;" rel="nofollow">Atas</a>
    </div>

    
        <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-QBFRPFJRKZ"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-QBFRPFJRKZ');
</script>
    
    
    
    
    

<style>
    .zc_foot a:hover, 
    .zc_foot a:focus {
        text-decoration: underline !important;
        border-color: currentColor !important;
        outline: 2px solid currentColor;
        outline-offset: 2px;
    }
</style>

    
    <!-- Load critical JS inline -->
    <script>
        // Critical display function (inline for immediate availability)
        var display = function(id, plus) {
            const imgElement = document.getElementById("list_" + id + "_img");
            const listElement = document.getElementById("list_" + id);
            const spanElement = document.getElementById("list_" + id + "_span");
            
            if (!imgElement || !listElement) return;
            
            const img = imgElement.src;
            const isdata = listElement.innerHTML.trim() ? 1 : 0;
            
            if (plus == 0) {
                const isHidden = listElement.style.display === "none";
                if (isHidden) {
                    if (isdata == 0) {
                        listElement.innerHTML = '<li><p style="text-align:center">membuka</p></li>';
                    }
                    listElement.style.display = "";
                    imgElement.src = img.replace(/_yes\.gif/, '_no.gif');
                    spanElement.innerHTML = "";
                } else {
                    listElement.style.display = "none";
                    imgElement.src = img.replace(/_no.gif/, '_yes.gif');
                    spanElement.innerHTML = '[membuka]';
                }
            }
        };
    </script>
    
    <!-- Load non-critical JS asynchronously -->
    <script>
        // Load scripts only when needed
        function loadScript(src, callback) {
            const script = document.createElement('script');
            script.src = src;
            script.async = true;
            if (callback) script.onload = callback;
            document.head.appendChild(script);
        }
        
        // Load optimized lightweight JS
        loadScript('/t20_id/resource/js/optimized.js');
        
        // Load jQuery only if needed for legacy functionality
        let jqueryLoaded = false;
        function ensureJQuery(callback) {
            if (typeof jQuery !== 'undefined') {
                callback();
            } else if (!jqueryLoaded) {
                jqueryLoaded = true;
                loadScript('/t20_id/resource/js/jquery.min.js', function() {
                    loadScript('/t20_id/resource/js/common.js', callback);
                });
            }
        }
        
        // Use intersection observer for better performance
        if ('IntersectionObserver' in window) {
            const observer = new IntersectionObserver((entries) => {
                entries.forEach(entry => {
                    if (entry.isIntersecting && entry.target.dataset.src) {
                        const img = entry.target;
                        img.src = img.dataset.src;
                        observer.unobserve(img);
                    }
                });
            });
            
            document.addEventListener('DOMContentLoaded', () => {
                document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));
            });
        }
    </script>
</body>
</html>