D. Prameswara
D. Prameswara Tukang ketik yang sedang belajar pemrograman #linux #android #vue #node.js

Tip dan trik untuk mempercepat akses Learndash


Tip dan trik untuk mempercepat akses Learndash
(Image credit: Learndash.com)

Learndash adalah sebuah alternatif aplikasi Learning Management System (LMS) yang menggunakan Wordpress sebagai platform utama. Learndash bukanlah sebuah aplikasi yang berdiri sendiri, melainkan berupa plugin di dalam Wordpress. Oleh karena itu, secara alami maka performa Learndash sangat bergantung dengan Wordpress itu sendiri. Hal ini dikarenakan secara teknis Learndash menggunakan hampir semua fitur/table bawaan Wordpress. Oleh karena itu, jika anda menggunakan Learndash untuk membangun LMS anda sendiri, maka secara default maka Anda kemungkinan besar akan mengalami masalah performa pada saat jumlah pengguna Learndash Anda bertambah banyak. Berikut ini adalah beberapa tip dan trik yang bisa dicoba untuk menjaga atau bahkan mempercepat performa Learndash Anda.

Catatan:

Tip dan trik ini hanya seputar aplikasi, tidak termasuk optimasi hardware atau jaringan.

0. Update Learndash dan Wordpress secara berkala

Seperti disebutkan di atas, Learndash sangat bergantung kepada Wordpress, oleh karena itu, tip yang paling sederhana dan mudah untuk menjaga performa Learndash adalah dengan melakukan update versi Wordpress dan Learndash secara berkala. Jika Anda khawatir untuk melakukan update Wordpress karena khawatir ada broken fitur, maka pastikan anda melakukan backup database dan file wordpress terlebih dahulu. Begitu juga dengan plugin Learndash, pastikan Anda melakukan update sesegera mungkin.

Tip dan trik untuk mempercepat akses Learndash

1. Nonaktifkan fitur komentar

Jika Anda tidak memerlukan fitur komentar, maka sangat disarankan untuk mematikan fitur komentar ini. Hal ini dikarenakan, komentar yang sangat banyak akan sangat memperlambat penampilan course beserta isinya. Anda dapat mematikan fitur komentar ini pada menu Settings > Discussions.

Tip dan trik untuk mempercepat akses Learndash

Kemudian un-centang pilihan  Allow people to submit comments on new posts. Pengaturan ini akan secara otomatis men-disabled fitur komentar pada post, course dan lain-lain yang akan dibuat kemudian.

Tip dan trik untuk mempercepat akses Learndash


Ingat, pengaturan ini adalah pengaturan standar yang bisa di-override pada pengaturan tiap post/course. Jadi pastikan Anda tidak meng-enabled fitur komentar pada saat Anda membuat course atau lesson atau yang lain.

2. Batasi fitur komentar

Jika Anda memang memerlukan fitur komentar ini, maka sebisa mungkin lakukan perubahan pengaturan untuk meminimalisir proses render komentar dalam halaman. Ingat, komentar ini bisa sangat banyak, sehingga jika dibiarkan maka akan memperlambat proses render suatu halaman.

2.1 Batasi jumlah komentar yang muncul disetiap halaman

Batasi jumlah komentar yang dimunculkan per-halaman, misalkan hanya 10 komentar saja. Pengaturan ini akan membuat komentar ditampilkan dalam bentuk paging. Dengan ini maka meskipun jumlah komentar suatu halaman sangat banyak, kecepatan render akan tetap stabil karena hanya akan menampilkan paling banyak 10 komentar saja tiap halaman.

Tip dan trik untuk mempercepat akses Learndash

2.2 Nonaktifkan nested comments

Nested comment adalah komentar yang di-reply, dan reply itu juga bisa di reply sehingga bentuknya bertingkat-tingkat. Meskipun jumlah komentar tiap halaman sudah dibatasi, akan tetapi pengaturan tersebut tidak perpengaruh pada nested comment. Artinya, meskipun misalkan komentar sudah di atur agar hanya muncul 10 komentar perhalaman, tetapi jika tiap komentar ada ribuan reply, maka ribuan reply ini akan tetap dimunculkan semua. Hal ini mengakibatkan proses render halaman menjadi sangat-sangat lambat. Untuk mematikan fitur nested comments ini, silahkan un-centang pilihan Enabled threaded (nested) comments.

Tip dan trik untuk mempercepat akses Learndash

2.3 Pindahkan komentar ke dalam platform lain

Jika Anda tetap ingin fitur komentar dan nested komentar tetap ada, maka alternatif lain adalah dengan menambahkan service terpisah khusus untuk komentar. Salah satu di antaranya adalah Disqus. Dengan menyediakan layanan komentar secara terpisah, maka Learndash Anda tidak akan mendapat beban tambahan karena segala yang berhubungan dengan komentar telah dipisahkan.

Tip dan trik untuk mempercepat akses Learndash


Untuk meng-install Disqus ke dalam Wordpress, silahkan menuju halaman Disqus Wordpress ini.

3. Pindahkan file konten dari lokal wp-content ke cloud

Pada saat Anda menyusun konten dalam course beserta isinya, maka Anda hampir pasti menambahkan banyak alustrasi atau bahkan video. Secara default, file-file tersebut akan masuk ke dalam folder lokal dimana Wordpress Anda diinstall, yaitu pada folder wp-content/upload. Pada saat peserta Learndash Anda sudah sangat banyak, kurang lebih ribuan user dalam satu waktu, maka akan semakin besar disk IO yang dibutuhkan. Dengan kata lain, makin banyak jumlah user yang meng-akses maka waktu yang dibutuhkan untuk meng-akses asset akan semakin besar. Oleh karena itu, jika memungkinkan, pindahkan file-file asset/media tersebut dari local disk ke cloud storage. Misalkan ke AWS S3, Google Cloud Storage

Dengan dipindahkan ke cloud storage, maka diharapkan akses filenya bisa lebih cepat, karena service-service tersebut sudah dilengkapi fitur cache atau bahkan cdn. Memang akan muncul biaya tambahkan untuk storage yang digunakan, akan tetapi berdasarkan pengalaman, biayanya masih sangat wajar dan layak jika dibandingkan dengan keuntungan yang didapat.

Untuk menyimpan file asset/media ke dalam cloud storage, Anda bisa menggunakan beberapa plugin yang sudah banyak tersedia. Beberapa diantaranya adalah WP-Stateless – Google Cloud Storage dan WP Offload Media Lite

Tip dan trik untuk mempercepat akses Learndash


Tip dan trik untuk mempercepat akses Learndash

4. Aktifkan cache

Cache secara sederhana adalah suatu tempat (biasanya dalam RAM/memory) yang digunakan untuk menyimpan data sementara dalam rentang waktu tertentu. Jadi, misalkan suatu halaman diakses, maka pertama kali halaman tersebut akan dimasukkan ke dalam cache, dan jika kemudian ada yang meng-aksesnya kembali, halaman tersebut tidak akan dirender ulang, melainkan diambil dari cache. Dengan ini maka akses halaman akan lebih cepat. 

Terdapat banyak plugin untuk melakukan caching, salah satunya adalah Redis Object Cache. Sesuai namanya, plugin tersebut menggunakan aplikasi Redis. Selain redis, Anda juga bisa menggunakan aplikasi cache yang lain, yang sesuai dengan kebutuhan Anda.

Tip dan trik untuk mempercepat akses Learndash


5. Buat filter untuk mempercepat penyimpanan Essay

Salah satu tipe pertanyaan di dalam Quiz Learndash adalah essay, atau isian bebas. Dengan tipe ini, maka peserta dibebaskan menuliskan jawaban mereka. Secara teknis, jawab-jawab peserta ini disimpan sebagai post dengan tipe essay. Inilah yang dikemudian hari menjadi masalah. Kita coba buat contoh sederhana sebagai berikut. Misalkan Anda seorang trainer, Anda membuat kuis akhir sesi dengan 10 pertanyaan isian bebas. Anggap saja ada 10.000 peserta ikut berpartisipasi, maka akan ada 10 x 10.000 = 100.000 essay yang akan tersimpan. Ini baru 1 angkatan, bayangkan jika ada 10 angkatan. Maka akan membengkak menjadi 10 x 100.000 = 1.000.000 essay. 

Dengan angka sebesar ini, hampir pasti akan muncul masalah lambatnya penyimpanan kuis. Pengalaman kami, setelah mencapai angka sekitar 100.000 essay, untuk menyimpan 1 record essay saja membutuhkan waktu sampai beberapa menit (hal ini tentu saja berbeda dilingkungan yang berbeda pula, tergantung spesifikasi mesin yang digunakan). Intinya performanya akan turun sangat tajam sampai tahap overload dan down. 

Penyebab turunnya performa penyimpanan essay ini adalah, lamanya proses yang diperlukan untuk men-generate slug di setiap record essay. Seperti yang sudah kita bahas di awal, Learndash menggunakan post untuk menyimpan essay. Dan secara default, setiap kali post dibuat, maka Wordpress akan mencoba men-generate slug dengan algoritma tertentu untuk menjamin slug yang dihasilkan adalah unique. Algoritma inilah yang menjadi masalah. Di dalam algoritma generate slug tersebut, ada proses query aggregate terhadap table post, dimana cost untuk melakukan query tersebut akan bertambah besar seiring dengan bertambahkan jumlah record. Lalu bagaimanakah solusinya ?

Untungnya Learndash menyediakan filter yang bisa digunakan untuk mem-bypass proses generate slug tersebut. Filter tersebut adalah : learndash_new_essay_submission_args. Informasi lebih lanjut tentang filter tersebut bisa dilihat di developers.learndash.com. Dengan menggunakan filter tersebut, kita dapat mengenerate slug dengan cara kita sendiri tanpa perlu melakukan query, dan dikarenakan slug sudah kita isi, maka wordpress akan mengabaikan pembuatan slug standar sehingga tidak akan ada lagi delay dalam proses simpan essay.

Cara paling mudah untuk menambahkan filter ke dalam Wordpress adalah dengan menambahkan function di dalam file function.php pada Theme yang digunakan. Cara yang lain adalah dengan membuat plugin sendiri, namum untuk saat ini, kita akan meng-edit file function.php dari theme karena lebih mudah dan cepat. Tetapi punya resiko tinggi, jika sampai salah maka bisa membuat Wordpress crash. Oleh karena itu, lakukan ini pada lingkungan devel terleih dahulu.

Silahkan masuk ke dalam menu Appearence > Theme Editor.

Tip dan trik untuk mempercepat akses Learndash


Kemudian pada bagian kanan atas, silahkan pilih theme yang Anda gunakan. Contoh, theme Astta. Kemudian tekan tombol select.

Tip dan trik untuk mempercepat akses Learndash


Maka daftar file dari theme yang Anda pilih akan muncul di panel sebelah kanan. Cari kemudian klik file function.php.

Tip dan trik untuk mempercepat akses Learndash


Pada editor file function.php tersebut, geser ke bagian paling bawah sebagai tempat kita untuk menambahkan filter. Tuliskan kode seperti di bawah ini.

add_filter(
	'learndash_new_essay_submission_args',
	function ($args) {		
		return $args;
	}
);
Filter learndash_new_essay_submission_args menerima input dan mengembalikan hasil berupa array of post parameter. Secara default, array input tersebut sudah berisi dengan data sebagai berikut: 

// essay args defaults
$essay_args = array(
    'post_title'   => 'judul pertanyaan',
    'post_status'  => 'not_graded',
    'post_type'    => 'sfwd-essays',
    'post_author'  => $user->ID,
    'post_content' => 'Konten essay'
}
Yang harus kita lakukan adalah, menambahkan item array bernama post_name atau slug jika tipe post yang akan disimpan adalah sfwd-essays. Slug ini kita buat sedemikian sehingga unique tanpa melakukan query data apapun. Salah satunya dengan cara menggabungkan id user, judul essay, waktu saat itu dan dengan nilai acak. Seperti contoh di bawah ini:

add_filter(
	'learndash_new_essay_submission_args',
	function ($args) {
		//hanya lakukan generate slug secara otomatis jika tipe nya adalah Essay
		if ($args['post_type'] == 'sfwd-essays') {
			// buat slug dengan gabungan 
			$slug = sanitize_title(sprintf(
				'%s-%s-%s-%s',
				$args['post_author'],
				$args['post_title'],
				time(),
				rand(1, 1000)
			));
			// isi  slug ke dalam array post_name
			$args['post_name'] = $slug;
		}
		return $args;
	}
);

Jangan lupa, panjang maksimal slug ini adalah 255 karakter, sehingga gabungan data di atas bisa melebihi 255 karakter. Oleh karena itu, perlu di-hash (misalkan dengan md5 yang akan menghasilan karakter hexadesimal sepanjang 32 karakter), seperti contoh di bawah.
add_filter(
	'learndash_new_essay_submission_args',
	function ($args) {
		//hanya lakukan generate slug secara otomatis jika tipe nya adalah Essay
		if ($args['post_type'] == 'sfwd-essays') {
			// buat slug dengan gabungan 
			$slug = md5(sanitize_title(sprintf(
					'%s-%s-%s-%s',
					$args['post_author'],
					$args['post_title'],
					time(),
					rand(1, 1000)
				))
			);
			// isi  slug ke dalam array post_name
			$args['post_name'] = $slug;
		}
		return $args;
	}
);

Dengan cara hash gabungan beberapa data di atas, boleh dibilang kemungkinan besar terjadi duplikasi slug sangatlkah kecil. Akan tetapi, Anda bisa juga menambahkan user id (post_author) di depan slug pada hasil akhir untuk lebih memastikan lagi slug yang dihasilkan adalah unique untuk semua user. Kurang lebih seperti inilah hasil akhir dari filter yang kita buat.
add_filter(
	'learndash_new_essay_submission_args',
	function ($args) {
		//hanya lakukan generate slug secara otomatis jika tipe nya adalah Essay
		if ($args['post_type'] == 'sfwd-essays') {
			// buat slug dengan gabungan 
			$slug = md5(sanitize_title(sprintf(
					'%s-%s-%s-%s',
					$args['post_author'],
					$args['post_title'],
					time(),
					rand(1, 1000)
				))
			);
			// isi  slug ke dalam array post_name
			$args['post_name'] = $args['post_author'] . '-' .$slug;
		}
		return $args;
	}
);

Silahkan tekan tombol Update file untuk menyimpan perubahan. Lalu silahkan coba mengerjakan kuis dengan pertanyaan tipe essay. Jika semuanya berjalan lancar, maka penyimpanan essay akan bertambah cepat, dan ditandai dengan format slug kurang lebih seperti gambar di bawah ini :

Tip dan trik untuk mempercepat akses Learndash


Inilah beberapa tip/trik untuk mempercepat akses Learndash yang bisa Anda pertimbangkan. Tentu saja tip/trik ini harus seimbang dengan kemampuan hardware yang Anda gunakan. Jika hardware Anda memang kurang mampu melayani sekian ribu user secara simultan, maka tentu saja trik di atas menjadi tidak berguna. Oleh karena itu pastikan Anda sudah meyiapkan hardware yang sesuai untuk melayani jumlah user yang banyak.

Sekian tip dan trik kali ini. Semoga yang sedikit ini bermanfaat.

Sumber :
D. Prameswara
D. Prameswara Tukang ketik yang sedang belajar pemrograman #linux #android #vue #node.js
Load comments