Belajar NativePHP - Performance Tuning
Episode 23 of 28

Belajar NativePHP - Performance Tuning

Mengoptimalkan performa aplikasi NativePHP: startup/boot time, memori runtime PHP, opcache mobile config, baseline profile Android, render performa native components v4, serta profiling dengan Instruments (iOS) dan Android Profiler.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 22 kita mengamankan data di perangkat, pada episode ini kita optimalkan performa aplikasi. Startup time yang lambat, memory leak, dan render yang stuttering adalah musuh UX mobile. User mengharapkan aplikasi native terasa cepat dan responsif — dan dengan tuning yang tepat, NativePHP bisa mencapai standar tersebut.

Performance tuning di NativePHP mencakup tiga lapisan: PHP runtime, native shell, dan komponen UI.

Startup/Boot Time

Startup time adalah waktu dari tap ikon aplikasi sampai UI siap digunakan. Di NativePHP, boot time terdiri dari:

  1. Native shell launch (~100-300ms)
  2. PHP runtime start (~200-500ms)
  3. Laravel bootstrap (~300-800ms)
  4. First render (~100-300ms)

Total target: di bawah 2 detik untuk cold start.

Optimasi Laravel Bootstrap

Optimasi service provider
<?php
 
namespace App\Providers;
 
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        // Lazy load service yang tidak dibutuhkan saat boot
        $this->app->singleton(SomeHeavyService::class, function ($app) {
            return new SomeHeavyService();
        });
    }
}

Caching Configuration

Cache configuration untuk production
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache

Caching configuration mengurangi waktu bootstrap karena Laravel tidak perlu membaca dan parse file config/route/view setiap boot.

Opcache Mobile

PHP opcache menyimpan bytecode yang sudah dikompilasi — menghindari parsing ulang PHP source setiap execution. Di mobile, opcache bisa dikonfigurasi untuk efisiensi:

Optimal opcache config untuk mobile
<?php
 
// php.ini untuk NativePHP production
opcache.enable=1
opcache.memory_consumption=64      // 64MB (hemat untuk mobile)
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0      // Production: jangan check timestamps
opcache.revalidate_freq=0
opcache.save_comments=0

validate_timestamps=0 sangat penting di mobile — opcache tidak akan mengecek apakah file berubah, yang menghemat I/O dan CPU.

Baseline Profile (Android)

Android Baseline Profile mengoptimalkan compilation aplikasi — kode yang sering dipakai di-compile ke native code oleh ART runtime:

Generate baseline profile
// Jalankan di Android Studio Profiler
// Record baseline profile selama startup dan navigasi utama
// Output: baseline-prof.txt
resources/native/android/app/build.gradle.kts
android {
    buildTypes {
        release {
            // Apply baseline profile
            profileable {
                enabled = true
            }
        }
    }
}

Baseline profile mengurangi cold start time di Android sebesar 20-40% karena kode kritis sudah di-compile sebelum user menjalankannya.

Render Performance (v4 SuperNative)

Di v4 SuperNative, rendering SwiftUI/Jetpack Compose jauh lebih cepat dari WebView. Tapi ada beberapa optimasi:

Lazy Loading List

Lazy list untuk performa
<x-native.lazy-list :items="$largeDataset" :buffer-size="20">
    <x-slot name="item" let="$item">
        <x-native.list-item :title="$item->title" />
    </x-slot>
</x-native.lazy-list>

Lazy list hanya render item yang terlihat di layar — hemat memori dan CPU untuk dataset besar.

Image Caching

Image caching untuk performa
<x-native.image
    src="{{ $imageUrl }}"
    :cache="true"
    :placeholder="true"
    placeholder-color="#e5e7eb"
/>

Image caching menghindari download ulang gambar yang sama, dan placeholder menampilkan warna solid sementara gambar dimuat.

Profiling

iOS: Instruments

Profile dengan Instruments
# Build dengan debug symbols
php artisan native:build ios --debug
 
# Buka Instruments dari Xcode
# Product → Profile (Cmd+I)

Fokus di:

  • Time Profiler: CPU usage per function
  • Allocations: memory usage
  • Energy Log: baterai consumption

Android: Android Profiler

Profile dengan Android Studio
# Buka proyek di Android Studio
# Run → Profile 'app'
# Android Profiler terbuka dengan CPU, Memory, Network, Energy

Fokus di:

  • CPU Profiler: method execution time
  • Memory Profiler: allocation tracking
  • Energy Profiler: wakelock dan alarm usage

Metrics yang Diukur

MetricTargetTool
Cold start< 2 detikInstruments / Profiler
Memory usage< 200MBMemory Profiler
FPS60 fps stabilGPU Profiler
Battery drain< 5% per jam active useEnergy Profiler
Network latency< 200ms averageNetwork Profiler

Tip

Ukur performa di perangkat terendah yang didukung (iPhone SE untuk iOS, device low-end untuk Android). Jika performa baik di device rendah, device tinggi akan lebih cepat.

Penutup

Inti yang harus dibawa pulang:

  • Startup time: cache config + lazy loading mengurangi cold start di bawah 2 detik.
  • Opcache mobile: validate_timestamps=0 dan memory yang terbatas hemat I/O.
  • Baseline Profile Android: mengurangi cold start 20-40% via ART compilation.
  • Lazy list dan image caching: hemat memori dan CPU untuk UI.
  • Profiling: Instruments (iOS) dan Android Profiler untuk identifikasi bottleneck.

Di episode 24 selanjutnya, kita akan membahas Monitoring & Error Tracking — crash reporting native, error tracking PHP, log shipping dari device, release health, dan alerting. Sampai jumpa di episode 24!

Belajar NativePHP - Performance Tuning | Belajar NativePHP