Developer Python Memperdebatkan Ketergantungan Node.js dan Klaim Performa py-pglite

BigGo Editorial Team
Developer Python Memperdebatkan Ketergantungan Node.js dan Klaim Performa py-pglite

Sebuah library testing Python baru yang disebut py-pglite telah memicu diskusi hangat di komunitas developer tentang pendekatannya terhadap pengujian database. Library ini menjanjikan untuk membawa fitur lengkap PostgreSQL ke dalam pengujian Python melalui PGlite, sebuah versi PostgreSQL yang dikompilasi dengan WebAssembly dan berjalan di Node.js. Namun, komunitas mempertanyakan apakah pendekatan ini benar-benar memenuhi janjinya tentang kesederhanaan dan performa.

Klaim Performa Dipertanyakan

Marketing library ini menekankan performa yang sangat cepat melalui PostgreSQL in-memory, tetapi developer mempertanyakan klaim tersebut. Para kritikus menunjukkan bahwa WebAssembly yang berjalan di dalam Node.js tidak mungkin mengungguli kode PostgreSQL native yang telah dioptimalkan selama puluhan tahun. Lapisan abstraksi tambahan - Python memanggil Node.js yang menjalankan WebAssembly - menimbulkan pertanyaan apakah setup ini benar-benar bisa lebih cepat daripada alternatif yang sudah mapan seperti TestContainers atau instance PostgreSQL native.

Beberapa anggota komunitas telah membagikan pengalaman mereka dengan TestContainers, melaporkan waktu eksekusi tes yang tampak kompetitif dengan janji py-pglite. Seorang developer mencatat bahwa tes berbasis TestContainers mereka dengan PostgreSQL hanya membutuhkan waktu 30 detik lebih lama daripada tes SQLite, menunjukkan bahwa kesenjangan performa mungkin tidak sebesar yang diklaim py-pglite.

Perbandingan Performa ( TestContainers vs SQLite ):

  • Pengujian SQLite dengan Python 3.9: 3m 41s
  • Pengujian PostgreSQL dengan TestContainers: 4m 11s
  • Selisih: Hanya 30 detik lebih lambat untuk kompatibilitas PostgreSQL penuh

Dilema Ketergantungan Node.js

Mungkin aspek paling kontroversial dari py-pglite adalah ketergantungannya pada Node.js dan manajemen paket npm otomatis. Library ini mengiklankan tidak perlu instalasi PostgreSQL sebagai selling point, tetapi developer dengan cepat mencatat ironinya: Node.js sendiri berukuran 63MB dibandingkan dengan PostgreSQL yang 32MB. Hal ini telah menimbulkan pertanyaan apakah trade-off ketergantungan ini masuk akal.

Saya tidak bisa membayangkan wasm yang berjalan di dalam nodejs lebih cepat daripada kode native yang telah dioptimalkan selama puluhan tahun. postgres berukuran 32MB, nodejs berukuran 63MB.

Yang lebih mengkhawatirkan bagi banyak developer adalah instalasi otomatis dependensi npm oleh library ini saat runtime. Perilaku ini, yang diaktifkan secara default, telah menimbulkan kekhawatiran tentang kompatibilitas dengan setup Node.js yang sudah ada dan tools security scanning. Meskipun fitur ini dapat dinonaktifkan, kurangnya dokumentasi yang jelas tentang pengelolaan dependensi Node.js secara manual telah membuat frustrasi calon pengguna.

Perbandingan Ukuran:

  • PostgreSQL : 32MB
  • Node.js : 63MB
  • py-pglite memerlukan Node.js 18+ dan Python 3.10+

Solusi Alternatif Mendapat Perhatian

Diskusi ini telah menyoroti beberapa alternatif matang yang sudah berhasil digunakan developer. TestContainers muncul sebagai pilihan populer, menawarkan instance PostgreSQL asli dalam container Docker dengan overhead setup minimal. Developer lain menyebutkan pytest-docker-compose dan solusi embedded-postgres yang sama sekali menghindari ketergantungan Node.js.

Beberapa anggota komunitas mengeksplorasi pendekatan yang lebih ambisius, seperti mengkompilasi PostgreSQL langsung ke dalam ekstensi Python atau menggunakan runtime WASI untuk menghilangkan kebutuhan Node.js. Diskusi ini menunjukkan bahwa meskipun py-pglite mengatasi kebutuhan nyata, komunitas melihat ruang untuk perbaikan dalam pendekatan implementasi.

Melihat ke Depan

Meskipun ada kritik, py-pglite telah menghasilkan minat yang genuine untuk upayanya menyederhanakan pengujian PostgreSQL di Python. Penulis library telah mengakui feedback dan menguraikan rencana untuk versi mendatang yang dapat mengatasi beberapa keterbatasan saat ini, termasuk dukungan potensial untuk binary native dan manajemen dependensi yang lebih baik.

Perdebatan ini mencerminkan tantangan yang lebih luas dalam ekosistem Python: menyeimbangkan kenyamanan dengan performa dan manajemen dependensi. Meskipun py-pglite mungkin bukan solusi sempurna, ini telah memicu diskusi berharga tentang strategi pengujian dan menyoroti kebutuhan berkelanjutan untuk tools pengujian database yang lebih baik dalam pengembangan Python.

Referensi: py-pglite