Ang Time-to-Interactive (TTI) ay isang sukatan ng pagganap na sumusukat sa oras mula sa simula ng pag-load ng pahina hanggang sa sandaling ang pangunahing nilalaman nito ay naging interaktibo. Sa mga mobile application, ang TTI ay itinuturing na isa sa mga pangunahing tagapagpahiwatig ng UX, dahil ang gumagamit ay hindi maaaring makipag-ugnayan sa interface hangga't hindi kumpleto ang pagsisimula ng UI. Ayon sa datos ng Google Web Dev, 2025, ang TTI ay dapat na mas mababa sa 3.8 segundo para sa magandang karanasan ng gumagamit sa mga mobile device.
Mga pangunahing punto
Time-to-Interactive ay isang sukatan ng pagganap na nagtatala ng sandali kung kailan ang pahina o application ay handa na para sa buong pakikipag-ugnayan sa gumagamit. Sa konteksto ng web, ang TTI ay tinukoy bilang oras mula sa simula ng nabigasyon hanggang sa sandaling matugunan ang tatlong kondisyon: ang pahina ay nagpakita ng kapaki-pakinabang na nilalaman (First Contentful Paint), ang pangunahing thread ay libre nang hindi bababa sa 5 segundo at lahat ng tagapakinig ng kaganapan ay naitala. Sa mga mobile app, ang TTI ay ang oras mula sa paglunsad ng Activity hanggang sa kumpletong pagsisimula ng UI, kapag ang lahat ng estado ay na-load, ang mga animation ay na-configure at ang gumagamit ay maaaring mag-click sa anumang pindutan nang walang pagkaantala.
Ang sukatan ay lalong mahalaga para sa mga app kung saan ang unang pakikipag-ugnayan ay kritikal — mga screen ng pag-login, paghahanap, pag-order. Kung ang TTI ay lumampas sa 5 segundo, ang gumagamit ay nakikita ang app bilang “nagyelo” at maaaring isara ito. Ayon sa datos ng Google (Web Vitals Report, 2025), ang mga pahina na may TTI na mas mababa sa 3.8 segundo ay nagpapakita ng 24% na mas maraming conversion kaysa sa mga pahina na may TTI na higit sa 7 segundo. Ang pagkakaiba ay nararamdaman kahit sa 500 ms — ang mga pananaliksik ng Amazon ay nagpapakita ng 1% na pagkawala ng kita para sa bawat 100 ms ng pagkaantala.
Ang algorithm para sa pagkalkula ng TTI ay tinukoy sa W3C specification at ipinatupad sa tool na Lighthouse. Ang pagkalkula ay nagsisimula sa First Contentful Paint (FCP) — ang sandali kung kailan na-render ng browser ang unang pixel ng nilalaman. Pagkatapos, ang algorithm ay naghahanap ng “window ng katahimikan” — isang agwat ng oras na 5 segundo kung saan walang mga gawain na mas mahaba sa 50 ms sa pangunahing thread. Ang TTI ay naitala sa huling gawain bago ang window na ito. Kung ang window ng katahimikan ay hindi natagpuan sa loob ng 15 segundo, ang TTI ay itinuturing na katumbas ng oras ng huling mahabang gawain. Ginagarantiyahan ng algorithm na ito na ang TTI ay sumasalamin sa tunay na kahandaan para sa pakikipag-ugnayan, hindi lamang sa sandali ng pag-render.
Sa mga mobile app (Android/iOS) walang eksaktong katulad ng W3C specification, ngunit pareho ang konsepto. Ang TTI ay maaaring masukat sa pamamagitan ng pagtatala ng timestamp sa onResume (simula ng paglunsad) at sa callback ng unang frame kapag ang lahat ng asynchronous na operasyon ay natapos na. Ang Firebase Performance library ay nagbibigay-daan sa pagtukoy ng custom na trace na may simula at pagtatapos ng interactive na session ng gumagamit. Halimbawa, startTrace(”tti”) sa Application.onCreate at stopTrace() pagkatapos makumpleto ang pagsisimula ng lahat ng SDK at pag-render ng unang frame.
Ang code sa Kotlin ay nagpapakita ng pagsukat ng TTI sa pamamagitan ng Firebase Performance. Ang trace ay nagsisimula sa Application.onCreate at humihinto pagkatapos ng unang reportFullyDrawn.
class App : Application() {
private var ttiTrace: Trace? = null
override fun onCreate() {
super.onCreate()
ttiTrace = Firebase.performance
.newTrace("tti")
ttiTrace?.start()
}
fun stopTtiTrace() {
ttiTrace?.stop()
ttiTrace = null
}
}
Sa ecosystem ng Core Web Vitals mayroong ilang mga sukatan at ang TTI ay madalas na napagkakamalang First Contentful Paint (FCP) at Largest Contentful Paint (LCP). Ang FCP ay ang oras ng pag-render ng unang pixel ng nilalaman, na hindi ginagarantiyahan ang interaktibidad. Ang LCP ay ang oras ng pag-render ng pinakamalaking elemento ng nilalaman (imahe, bloke ng teksto). Ang TTI naman ay sumusukat hindi sa pag-render, kundi sa kahandaan para sa pakikipag-ugnayan. Ang pagkakaiba ay kritikal: ang FCP ay maaaring 1.2 segundo, ngunit kung ang pangunahing thread ay hinarang ng pag-load ng JS bundle, ang TTI ay maaaring umabot ng 8 segundo.
First Input Delay (FID) ay sumusukat sa pagkaantala sa pagitan ng unang aksyon ng gumagamit at sandali kung kailan nagsimulang iproseso ng browser ang kaganapan. Ang FID ay ang “kalidad ng interaktibidad”, habang ang TTI ay ang “oras hanggang sa interaktibidad”. Kung ipinapakita ng TTI kung ilang segundo ang interface ay naging responsive, ipinapakita ng FID kung gaano ito naging responsive. Ang magandang TTI na walang magandang FID ay imposible, dahil kung ang pangunahing thread ay hinarang, ang TTI ay magiging mataas at ang FID — bawat pakikipag-ugnayan ay maaantala. Sa mga mobile app, ang katulad ng FID ay Touch Latency — ang pagkaantala sa pagitan ng pagpindot sa screen at reaksyon ng UI.
| Sukatan | Ano ang sinusukat | Halaga ng target | Platform |
|---|---|---|---|
| FCP | Unang pixel ng nilalaman | < 1.8 s | Web |
| LCP | Pinakamalaking elemento | < 2.5 s | Web |
| TTI | Kahandaan para sa pakikipag-ugnayan | < 3.8 s | Web + native |
| FID | Pagkaantala ng unang input | < 100 ms | Web |
Sa mga native mobile app, ang konsepto ng TTI ay hindi gaanong naka-standardize tulad ng sa web, ngunit ang kahalagahan nito ay hindi mas mababa. Sa Android, ang TTI ay ang oras mula sa pag-click sa icon ng app hanggang sa sandali kung kailan ang UI ay ganap na interaktibo: ang RecyclerView ay nag-scroll, ang mga pindutan ay tumutugon sa pagpindot, ang mga animation ay gumagana nang walang sagabal. Para sa pagsukat ng TTI sa Android, ginagamit ang kumbinasyon ng reportFullyDrawn (API 29+) at FrameMetricsAggregator. Ang reportFullyDrawn ay isang tawag na ginagawa ng app sa sandali kung kailan itinuturing ng developer na handa na ang UI. Itinatala ng system ang sandaling ito at isinasama ito sa ulat ng Android Vitals.
Sa iOS, ang katulad ng TTI ay ang mga sukatan na Time to First Frame at Time to Responsive. Ang MetricKit ay nangongolekta ng datos ng oras ng paglunsad na hinati sa mga yugto — pag-load ng executable file, pagsisimula ng mga framework, pag-render ng unang frame. Inirerekomenda ng Apple na ang Time to First Frame ay hindi lalampas sa 400 ms at ang buong interaktibidad ay makamit sa loob ng 2 segundo. Kung ang app ay nagpapakita ng placeholder screen at pagkatapos ay nag-load ng nilalaman, ang TTI ay kinakalkula hindi batay sa unang frame, kundi batay sa sandali kung kailan ang aktwal na nilalaman ay handa para sa pakikipag-ugnayan.
Ang code sa Kotlin ay sumusubaybay sa unang interaktibong frame gamit ang FrameMetricsAggregator. Ang callback ay naa-activate pagkatapos makumpleto ang unang frame na sinimulan ng gumagamit.
class TtiTracker(private val activity: Activity) {
private val metrics = FrameMetricsAggregator()
private var startTime = 0L
fun onStart() {
startTime = System.nanoTime()
metrics.add(activity.window)
}
fun onFirstFrame() {
val ttiMs = (System.nanoTime() - startTime) / 1_000_000
Log.d("TTI", "Oras hanggang sa interaktibidad: $ttiMs ms")
metrics.reset()
}
}
Ang pag-optimize ng TTI ay may kasamang tatlong direksyon: pagbawas ng dami ng trabaho sa pangunahing thread, pagkaantala ng pag-load ng mga hindi kritikal na bahagi, at progresibong pag-render. Ang unang direksyon — pag-minimize ng mga synchronous na operasyon: pagpapalit ng SharedPreferences ng DataStore, paglipat ng pagsisimula ng SDK sa background thread, lazy loading ng Dagger/Hilt modules. Ang pangalawa — pagkaantala ng pag-load: mga screen na hindi nakikita sa pagsisimula (bottom sheets, dialog, tab) ay dapat na simulan pagkatapos ng unang frame. Ang pangatlo — progresibong pag-render: unang magpakita ng skeleton screen, pagkatapos ay unti-unting mag-load ng nilalaman.
Sa Android, ang epektibong paraan ay ang paggamit ng App Startup library na may pagraranggo ng mga initializer. Halimbawa, ang initializer ng Firebase Analytics ay maaaring gawing opsyonal at ang pagpapatupad nito ay maaaring maantala ng 2 segundo pagkatapos ng pagsisimula. Sa iOS, ang katulad ay Initialization Dependencies na may bandila na lazy. Para sa web, ang mga pangunahing pamamaraan ay code splitting (paghahati ng bundle), tree shaking (pag-alis ng patay na code), preload/preconnect para sa mga kritikal na mapagkukunan at defer para sa hindi humaharang na JS. Ang Google Lighthouse ay nagbibigay ng mga tiyak na rekomendasyon: “Eliminate render-blocking resources” at “Defer offscreen images” ay direktang nakakaapekto sa TTI.
Halimbawa ng paghahati ng bundle sa React Native gamit ang React.lazy at Suspense. Ang component na HeavyScreen ay naglo-load lamang kapag ang gumagamit ay nag-navigate sa screen na ito, na nagpapababa ng TTI ng paunang screen.
import React, { lazy, Suspense } from 'react';
const HeavyScreen = lazy(() =>
import('./screens/HeavyScreen')
);
const App = () => (
<Suspense fallback={<Loading />}>
<HeavyScreen />
</Suspense>
);
Para sa pagsukat ng TTI mayroong ilang mga kasangkapan na nagkakaiba ayon sa platform at lalim ng pagsusuri. Sa web, ang pangunahing kasangkapan ay Lighthouse sa Chrome DevTools. Ang Lighthouse ay nagpapatakbo ng pag-audit at nagpapakita ng TTI sa millisecond, pati na rin nagbibigay ng mga tiyak na rekomendasyon para sa pagpapabuti. Para sa patuloy na pagsubaybay, ginagamit ang PageSpeed Insights (Google) — nangongolekta ito ng datos mula sa Chrome User Experience Report (CrUX) mula sa mga totoong gumagamit. Sa mga native app, ang TTI ay sinusukat sa pamamagitan ng Android Vitals (Google Play Console) at MetricKit (Apple).
Para sa pagsubaybay sa produksyon, ang Firebase Performance Monitoring (custom traces), Datadog RUM (Real User Monitoring) at Sentry Performance ay popular. Ang mga kasangkapang ito ay hindi lamang nagpapakita ng TTI, kundi nagbibigay-daan din sa pagsubaybay ng ugnayan sa pagitan ng TTI at mga sukatan ng negosyo — conversion, churn, tagal ng session. Inirerekomenda na magtakda ng mga halaga ng threshold: < 3.8 s — mabuti, 3.8–7 s — nangangailangan ng pagpapabuti, > 7 s — kritikal. Para sa mga native app, ang mga threshold ay mas mahigpit: < 2 s — mabuti, 2–5 s — katamtaman, > 5 s — kritikal, dahil ang mga gumagamit ng mobile app ay hindi gaanong mapagparaya sa mga pagkaantala.
Halimbawa ng configuration ng Lighthouse CI para sa awtomatikong pagsusuri ng TTI sa pipeline ng CI/CD. Kapag lumampas sa threshold na 3.8 segundo, ang build ay minarkahan ng babala.
// lighthouserc.js
module.exports = {
ci: {
assert: {
assertions: {
'interactive': ['warn', {
maxNumericValue: 3800
}],
'first-contentful-paint': ['error', {
maxNumericValue: 1800
}]
}
},
collect: {
startServerCommand: 'npm start',
url: ['http://localhost:3000'],
numberOfRuns: 3
}
}
};
Mga madalas na itanong
FCP (First Contentful Paint) ay nagtatala ng sandali ng pag-render ng unang pixel ng nilalaman. TTI — ang sandali kung kailan ang UI ay handa para sa pakikipag-ugnayan. Sa pagitan ng mga ito ay maaaring may 3–5 segundong pagkakaiba kung ang pangunahing thread ay hinarang.
Para sa web, ang target na halaga ng TTI ay mas mababa sa 3.8 segundo. Para sa mga native mobile app, ang threshold ay mas mahigpit — mas mababa sa 2 segundo. Ang mga halaga sa itaas ng 7 segundo ay nangangailangan ng agarang pag-optimize.
Sa Android, gamitin ang reportFullyDrawn (API 29+) kasama ng FrameMetricsAggregator. Para sa pagsubaybay sa produksyon, ikonekta ang Firebase Performance na may custom na trace ”tti”.
Oo, ang TTI ay hindi direktang nakakaapekto sa SEO sa pamamagitan ng Core Web Vitals. Ginagamit ng Google ang LCP, FID at CLS bilang direktang mga factor ng pagraranggo, ngunit ang TTI ay may ugnayan sa kanila at nakakaapekto sa mga sukatan ng pag-uugali (oras sa pahina, bounce rate).
Lighthouse, PageSpeed Insights, WebPageTest — para sa web. Firebase Performance, Android Vitals, MetricKit — para sa mga native app.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din