Flutter Web Performansını Artırmak: Webview Optimizasyon Teknikleri

Flutter web'de webview kullanırken performans düşüşü yaşamak yaygın bir sorun. Özellikle ağır HTML/JavaScript içeriği yüklerken sayfanın donması, gecikmeli render ve yüksek bellek kullanımı ortaya çıkabiliyor. Bunları çözmek için stratejik bir yaklaşım gerekiyor.

İlk adım webview'ın cache mekanizmasını düzgün yapılandırmak. WebViewController'ı başlatırken cache ayarlarını aktif hale getir ve DOM işlemlerini minimize et.

1import 'package:webview_flutter/webview_flutter.dart';
2
3class OptimizedWebView extends StatefulWidget {
5_OptimizedWebViewState createState() => _OptimizedWebViewState();
6}
7
8class _OptimizedWebViewState extends State<OptimizedWebView> {
9late WebViewController _controller;
10
12void initState() {
13super.initState();
14_initializeWebView();
15}
16
17void _initializeWebView() {
18_controller = WebViewController()..setJavaScriptMode(JavaScriptMode.unrestricted)..setBackgroundColor(const Color(0xffffffff))..setNavigationDelegate(
19NavigationDelegate(
20onPageStarted: (String url) {
21print('Sayfa yükleniyor: $url');
22},
23onPageFinished: (String url) {
24print('Sayfa yüklendi: $url');
25},
26),
27);
28}
29
31Widget build(BuildContext context) {
32return WebViewWidget(controller: _controller);
33}
34}

İkinci önemli teknik lazy loading. Sayfanın ilk yüklemesinde tüm kaynakları çekme yerine, kullanıcı ihtiyaç duyduğunda yükle. HTML tarafında `loading="lazy"` özelliğini kullan.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1// HTML içeriğinde resim ve iframe'ler için
2const htmlContent = '''
3<html>
4<body>
5<img src="image1.jpg" loading="lazy" />
6<iframe src="content.html" loading="lazy"></iframe>
7<script>
8// DOM güncellemelerini batch yap
9const fragment = document.createDocumentFragment();
10for(let i = 0; i < 100; i++) {
11const el = document.createElement('div');
12el.textContent = 'Item ' + i;
13fragment.appendChild(el);
14}
15document.body.appendChild(fragment);
16</script>
17</body>
18</html>
19''';
20
21_controller.loadHtmlString(htmlContent);

Üçüncü adım JavaScript yürütme optimizasyonu. Ağır hesaplamalar veya DOM işlemleri yapıyorsan, bunları Web Worker'a taşı veya asenkron hale getir.

1// Webview'da performans izleme
2_controller.runJavaScript('''
3const observer = new PerformanceObserver((list) => {
4for (const entry of list.getEntries()) {
5console.log('Render süresi: ' + entry.duration + 'ms');
6}
7});
8observer.observe({entryTypes: ['measure', 'navigation']});
9''');

Dört ana optimizasyon noktası daha var: (1) CSS ve JavaScript dosyalarını minify et, (2) görüntüleri WebP formatında sun, (3) gerekmeyenleri DOM'dan kaldır, (4) webview'ı hot reload sırasında yeniden başlatma. Sık yapılan hata, her setState() çağrısında webview'ı reload etmek. Bunun yerine durum yönetimi için Provider veya GetX kullan ve sadece gerekli verileri JavaScript tarafına gönder.

Bu teknikleri birleştirdiğinde webview performansı önemli ölçüde iyileşir ve kullanıcı deneyimi çok daha akıcı hale gelir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz