I am using datatablejs on client side for displaying the database to client. I download the database from server initially using backbone indexeddb adapter and store it in indexedDB so as to support offline access to data. However, datatables take approx around 5 minutes to render 20,000 entries. This is my JS code:
render_data: function(entity_collection) {
//create table body in memory
tbody = $('<tbody>');
tbody.html('');
//iterate over the collection, fill row template with each object
//and append the row to table
entity_collection.each(function(model) {
tbody.append(this.row_template(model.toJSON()));
}, this);
//put table body in DOM
this.$('#list_table')
.append(tbody);
//initialize datatable lib on the table
this.$('#list_table')
.dataTable();
$("#loaderimg")
.hide();
$("#sort-helptext").show();
},
Table headers:
<script type="text/template" id="person_table_template">
<tr>
<th>Id</th>
<th>Name</th>
<th>Father Name</th>
<th>Village</th>
<th>Group</th>
<th></th>
</tr>
</script>
JSON which is converted to html:
Object {
age: 45,
father_name: "Jiyan Sah ",
gender: "F",
group: Object,
id: 10000000155392,
label: "Gangajali Devi (Sahila Rampur,Jiyan Sah )",
online_id: 10000000155392,
person_name: "Gangajali Devi ",
phone_no: "",
resource_uri: "/coco/api/v1/person/10000000155392/",
village: Object
}
Can anybody suggest about how to increase the performance of datatable?
Firstly, the is no need to append data on each iteration, you can do it once after loop.
var tmp_str = '';
entity_collection.each(function(model) {
tmp_str+=this.row_template(model.toJSON())
}, this);
tbody.append(tmp_str);
But to really speed-up the app i recommend you to change render way - now you render all data at once and have no information what part of information is watched but client. Lazy loading can help you - for eg. you render first 100 items, when page is scrolled to the bottom on the list you render + 100 and so on.
If you need some code help let me know.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With