Point-Free telah mengeluarkan SQLiteData , perpustakaan Swift baharu yang membawa sinkronisasi CloudKit ke pangkalan data SQLite sambil meletakkan dirinya sebagai alternatif yang lebih pantas kepada SwiftData milik Apple . Perpustakaan ini telah mencetuskan perbincangan yang ketara dalam komuniti pembangun, terutamanya mengenai dakwaan prestasinya dan keputusan seni binanya.
Penanda Aras Prestasi Menunjukkan Keputusan Bercampur
SQLiteData mendakwa prestasi yang unggul berbanding penyelesaian sedia ada, tetapi komuniti telah membangkitkan persoalan mengenai penanda aras ini. Perpustakaan ini menggunakan makro Swift untuk menjana antara muka berprestasi tinggi pada masa pembinaan, mengelakkan pendekatan Codable yang lebih perlahan yang banyak perpustakaan SQLite bergantung kepadanya. Walau bagaimanapun, pembangun menyedari paradoks yang menarik: SQLiteData sebenarnya menggunakan GRDB di bawah hud, namun mendakwa mengatasi prestasinya dalam penanda aras.
Perbezaan prestasi bergantung kepada pendekatan pelaksanaan. Walaupun GRDB menggalakkan Codable untuk kemudahan, yang mengakses nilai pangkalan data mengikut nama lajur melalui pelbagai lapisan, SQLiteData menggunakan perpustakaan StructuredQueries untuk mengakses nilai mengikut kedudukan. Pilihan seni bina ini menghasilkan prestasi yang lebih pantas secara terukur, dengan penanda aras menunjukkan SQLiteData menyelesaikan tugas dalam 8.5 saat berbanding pendekatan Codable GRDB pada 53.3 saat.
Nota: GRDB adalah kit alat SQLite yang popular untuk aplikasi Swift . Codable adalah protokol Apple untuk mengekod dan menyahkod data, walaupun ia boleh menjadi lebih perlahan daripada kaedah akses pangkalan data langsung.
Perbandingan Penanda Aras Prestasi (Tempoh dalam saat)
Perpustakaan | Pendekatan | Tempoh |
---|---|---|
SQLite (raw) | Dijana oleh Enlighter | 7.183 |
Lighter | Penjanaan statik | 8.059 |
SQLiteData | Dijana-makro | 8.511 |
GRDB | Penyahkodan manual | 18.819 |
SQLite.swift | Penyahkodan manual | 27.994 |
SQLite.swift | Codable | 43.261 |
GRDB | Codable | 53.326 |
Integrasi CloudKit Mengisi Jurang Pasaran
Ciri yang paling menarik bagi ramai pembangun nampaknya adalah sinkronisasi CloudKit , yang telah ketara tidak hadir daripada ekosistem SQLite . Ahli komuniti menyerlahkan bahawa keupayaan ini tidak wujud dalam sebarang bentuk yang diselenggara sebelum SQLiteData , dengan percubaan sebelumnya seperti Harmony dan SQLiteChangesetSync sama ada eksperimen atau ditinggalkan.
Integrasi ini menangani keperluan sebenar untuk pembangun yang ingin menyimpan data pengguna dalam ekosistem Apple dan bukannya menguruskan pelayan sinkronisasi mereka sendiri. Perpustakaan ini mengendalikan penyelesaian konflik menggunakan strategi tulis terakhir menang yang digunakan secara terperinci pada peringkat atribut, yang pembangun nyatakan berfungsi dengan baik untuk kebanyakan aplikasi bukan kolaboratif.
Kebimbangan Penggunaan Pembangun dan Alternatif
Komuniti menunjukkan reaksi bercampur untuk menggunakan perpustakaan pihak ketiga yang lain, terutamanya memandangkan sejarah perpustakaan iOS popular yang akhirnya menjadi usang. Sesetengah pembangun mempersoalkan sama ada berbaloi untuk mempelajari alat baharu apabila SwiftData milik Apple mungkin akhirnya matang untuk memenuhi keperluan yang sama.
Walau bagaimanapun, penyokong menunjukkan batasan praktikal dengan tawaran semasa Apple . SwiftData tidak mempunyai ciri utama seperti sokongan tugas latar belakang, mempunyai isu prestasi dengan set data besar, dan tidak berfungsi dengan baik di luar paparan SwiftUI . Untuk pembangun yang sudah menggunakan SQLite melalui GRDB , SQLiteData menawarkan laluan untuk menambah sinkronisasi CloudKit tanpa perubahan seni bina utama.
Tanpa itu, satu-satunya alternatif saya adalah SwiftData atau CoreData , dengan kelemahan yang teruk.
Keserasian ke belakang perpustakaan kepada iOS 13 juga menarik minat pembangun yang belum boleh memerlukan versi iOS terkini untuk aplikasi mereka.
Perbandingan Ciri-Ciri Utama
Kelebihan SQLiteData:
- Penyegerakan dan perkongsian CloudKit
- Keserasian iOS 13+
- Pengoptimuman prestasi berasaskan makro Swift
- Sokongan pertanyaan SQL terus melalui makro sql
- Keserasian tugas latar belakang
Batasan SwiftData:
- iOS 17+ sahaja (indeks memerlukan iOS 18+)
- Isu prestasi dengan set data yang besar
- Terhad kepada penggunaan paparan SwiftUI
- Tiada sokongan perkongsian CloudKit
- Kebergantungan pada kitaran kemas kini tahunan
Seni Bina Teknikal dan Prospek Masa Depan
SQLiteData mengambil pendekatan pragmatik dengan membina atas asas yang terbukti dan bukannya mencipta semula segala-galanya. Ia memanfaatkan GRDB untuk operasi SQLite sambil menambah pengoptimuman prestasi dan integrasi CloudKit sendiri. Pembangun telah menunjukkan mereka mungkin menyokong penyesuai SQLite lain pada masa depan, mencadangkan seni bina yang fleksibel.
Untuk pembangun yang mencari alternatif, komuniti membincangkan beberapa pilihan termasuk penggunaan GRDB mentah, Lighter (yang menjana ikatan daripada skema SQLite ), dan menunggu penambahbaikan SwiftData . Setiap pendekatan melibatkan pertukaran antara prestasi, ciri dan pertimbangan penyelenggaraan jangka panjang.
Keluaran ini mewakili penambahan yang ketara kepada ekosistem Swift , terutamanya untuk pembangun yang memerlukan kedua-dua prestasi SQLite dan keupayaan sinkronisasi CloudKit . Sama ada ia mendapat penggunaan meluas berkemungkinan bergantung kepada seberapa cepat Apple menangani batasan semasa SwiftData dan sama ada komuniti pembangunan iOS menerima satu lagi lapisan abstraksi ke atas keperluan kegigihan data mereka.
Rujukan: SQLiteData