Di WordCamp Jakarta 2017  saya memiliki kesempatan untuk berbagi pengalaman penggunaan WordPress di lingkungan Enterprise. Sesaat setelah presentasi, beberapa audience yang hadir menanyakan hal-hal detail mengenai materi yang saya sampaikan tersebut. Blog post ini adalah upaya saya untuk mendetailkan materi presentasi tersebut.

Saat ini WordPress tidak hanya digunakan sebagai bloging platform, kode yang terbuka (opensource) dan penambahan fungsinya yang modular melalui konsep Themes dan Plugins menjadikan WordPress sebagai salah satu aplikasi web dengan pangsa pasar terbesar di dunia.  Kemudahan dan kecepatan implementasi (learning curve) yang luar biasa singkat membantu banyak pihak untuk membuat sebuah website.

Dengan mudah kita dapat menemukan implementasi WordPress untuk berbagai kebutuhan. Mulai dari penggunaan pribadi sampai dengan implementasi website kebutuhan bisnis, seperti website profile perusahaan, lowongan kerja, eCommerce sampai dengan portal portal berita kelas dunia seperti Time.Com dan Quartz.Com.

wp big brand.PNG

Kemudahan dan luasnya implementasi tersebut seringkali menimbulkan persepsi bahwa WordPress hanya untuk kalangan hobi atau pengerjaan websiye dengan kebutuhan yang minimal atau standar.

Bagaimana dengan kebutuhan yang kompleks seperti untuk menakomodasi model bisnis perusahaan besar ( enterprise ) ?

Untuk menjadikan WordPress dapat bekerja dengan baik dalam skala enterprise, dibutuhkan beberapa pengaturan yang biasanya tidak pernah disentuh oleh para pengguna WordPress biasa.

Pada umumnya, pengguna WordPress hanya mengenal ‘Themes’ untuk mengubah serta memperkaya tampilan dan ‘Plugins’ untuk menambah berbagai fitur dan kemampuan sebuah website agar sesuai dengan model atau solusi yang diinginkan.

Mu-Plugin dan Drop-in Plugins

Konsep Plugins mungkin yang menjadikan WordPress bisa sangat modular dan fleksibel sehingga  tingkat adaptasi WordPress menjadi sangat cepat dan masif. Saat ini 28% situs di dunia menggunakan WordPress.

Berdasarkan pengalaman membuat purwarupa website peruisahaan menggunakan WordPress selama 2 tahun lebih, pada akhirnya Themes dan Plugins tidak akan cukup dan seringkali malah membuat sebuah website sulit untuk mendapatkan performa terbaiknya.

Untuk menjadikan sebuah situs WordPress bisa mendapatkan skalabilitas, performa dan keamanan yang lebih baik sebenarnya bisa dilakuan dengan menggunakan / mengoptimalisasi fitur ‘mu-plugins’ dan ‘drop-in-plugins’.

Lalu, apa yand dimaksud dengan ‘mu-plugins’ dan ‘drop-in plugins’, apa bedanya dengan ‘reguler plugins’ ?

Biasanya, pengguna biasa hanya mengenal regular Plugins atau yang biasanya dikenal dengan nama Plugins. Untuk artikel ini kita sebut saja dengan istilah Plugins Reguler. Fitur ini dapat diakses dan dikelola secara langsung dan mudah melalui menu dashboard WordPress.

Instalasi , aktifasi dan pengaturan Plugins dapat dilakukan oleh siapapun yang memiliki hak akses Administrator.

Sedangkan berikut adalah penjelasan mengenai mu-plugins’ dan ‘drop-in plugins’,

Drop-in Plugins

Merupakan PHP files yang fungsinya dapat menggantikan beberapa fungsi utama (core) WordPress seperti koneksi ke database ( database connection ) dan tembolok (cache).

Lokasinya berada di /wp-content/[dropins-file-name].php

Beberapa contoh drop-in plugins yang cukup populer adalah advance-cache.php dan LudicrousDB.

LudicrousDB is an advanced database interface for WordPress that supports replication, fail-over, load balancing, and partitioning, based on Automattic’s HyperDB drop-in.

LudicrousDB can manage connections to a large number of databases. Queries are distributed to appropriate servers by mapping table names to datasets.

A dataset is defined as a group of tables that are located in the same database. There may be similarly-named databases containing different tables on different servers. There may also be many replicas of a database on different servers. The term “dataset” removes any ambiguity. Consider a dataset as a group of tables that can be mirrored on many servers.

Configuring LudicrousDB involves defining databases and datasets. Defining a database involves specifying the server connection details, the dataset it contains, and its capabilities and priorities for reading and writing. Defining a dataset involves specifying its exact table names or registering one or more callback functions that translate table names to datasets.

Dengan LudicroudDB yang membaca konfigurasi beberapa database MariaDB yang dibuat master-master menggunakan Galera Cluster, WordPress dapat mengenali multiple database dan melakukan prioritas server database mana untuk write, mana untuk read.

Berikut contoh koneksi database menggunakan array , tinggal tambahkan saja array-array lainnya untuk koneksi ke database lain. Dua koneksi pertama untuk read, lalu koneksi (array) ketiga untuk write.

Perlu menjadi catatan penting, sinkronisasi antara database server tidak dilakukan oleh WordPress atau Plugin LudicrousDB, tetapi dilakukan oleh Galera Cluster yang diaktifkan di MariaDB.

Must-use (Mu)  Plugins

Plugins reguler itu seperti pisau bermata dua, bisa sangat memudahkan dalam mencari solusi tetapi kemudahan itu seringkali membawa dampak buruk ke performa WordPress.

Makin banyak Plugins yang aktif, beban server menjadi lebih berat dan waktu pemrosesan juga menjadi semakin lama.

Hal ini karena WordPress membaca dan mengeksekusi seluruh Plugins yang aktif untuk tiap page yang direquest oleh pengguna biasa maupun request-request aneh yang dilakukan berbagai ‘bot’ seperti bot mesin pencari sampai dengan bot iseng yang biasanya mencari celah kemanan WordPress.

Bila developernya malas atau ‘kotor’ dalam membuat kode pemrograman, seringkali fungsi yang tidak dibutuhkan juga ikut dieksekusi di berbagai halaman yang sebenarnya tidak membutuhkan fungsi tersebut.

Dengan Must-use (Mu) Plugins , kita sebenarnya memiliki peluang untuk mengendalikan Plugins apa saja yang dibutuhkan sesuai dengan kondisi yang diinginkan.

Tidak perlu lagi semua Plugins dijalankan disetiap page request

Must-use (Mu) Plugins memiliki karakteristik sebagai berikut

  • Berlaku di WordPress Single dan Multisite
  • Lokasinya berada di … /wp-content/mu-plugins/my-first-mu-plugins.php
  • Selalu aktif karena otomatis aktif ketika berkas .php sudah diupload
  • Dieksekusi sebelum Plugins reguler dieksekusi.
  • Tidak bisa dinonaktifkan

worpress mu plugins sample

Berikut adalah contoh sederhana implementasi must-use plugins dengan nama file terimakasih.php.

Didalam berkas tersebut ada sebuah ‘filter’untuk menampilkan kata ‘Terima Kasih’ pada seluruh halaman post WordPress.

Hemm sepertinya nggak ada yang spesial ya dengan contoh diatas, bisa dilakukan oleh Plugin reguler.

Sebentar…, contoh berikutnya sedikit lebih kompleks tetapi sangat berguna untuk menjaga dan meningkatkan performa WordPress.

Tengok kembali diparagraf awal, makin banyak Plugin reguler, dapat menurunkan performa WordPress.

Berikut adalah implementasi must-use plugins untuk mematikan plugin reguler “Contact Form 7” di halaman-halaman yang memang tidak membutuhkan fungsi plugin tersebut.

Plugin “Contact Form 7” hanya akan akktif di halaman dengan slug ‘/contact/’ saja, sedangkan di halaman lain plugin tersebut akan diunregister alias tidak akan diload alias mati.

Walaupun sepertinya sepele, dampak metode ini sangat luar biasa untuk meningkatkan performa loading halaman-halaman WordPress.

Bayangkan bila pada sebuah halaman kita dapat mematikan 15 dari 20 Plugin yang aktif!

Untuk mendapatkan contoh-contoh lain penggunaan metode ini, silahkan menggunakan mesin pencari dengan bantuan keyword ‘WordPress disable plugin‘ atau ‘WordPress options_active_plugin‘.

Untuk mengunduh materi presentasi ini  bisa mengunjungi tautan di situs slideshare. Semua berkas materi sudah diunggah oleh rekan-rekan di Automattic.

Terimakasih pada para penyelenggara WordCamp Jakarta 2017, Automattic, organizer, volunteer, speaker, community dan participant.

wordcamp jakarta closing

 

Leave A Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.