簡體   English   中英

有關在Backbone中呈現列表的更好邏輯/性能的建議

[英]Advices for better logic/performance on rendering a list in Backbone

我真的是Web開發和Backbone的新手。 我想要一些建議,以提高我編寫的該程序的性能。 我試圖編寫類似於以下程序: React vs AngularJS vs KnockoutJS:性能比較

特別是,我想知道是否$( "#insideID" ).detach(); 是不是一個好策略。

這是我的代碼的一部分:

<script id="itemTemplate" type="text/template">
<%= name %>
</script>  

        $( document ).ready(function() {

            // Model
            var Item = Backbone.Model.extend({
            });

            // Collection
            var ItemsCollection = Backbone.Collection.extend({
                model: Item
            });


            // View for all elements
            var ItemsView = Backbone.View.extend({
                className: 'inside',
                id: 'insideID',

                render: function() {
                    this.collection.each(function(item) {
                        var itemView = new ItemView({ model: item });
                        this.$el.append(itemView.render().el);
                    }, this);

                    return this;
                }
            });

            // View for a single element
            var ItemView = Backbone.View.extend({
                tagName : 'span',

                template: _.template($('#itemTemplate').html() ),

                render: function() {
                    this.$el.html( this.template(this.model.toJSON()) );
                    return this;
                }
            });


            var runBackbone = document.getElementById("run-backbone");
            runBackbone.addEventListener("click", function() {

            var data = _buildData(); //It returns an array of strings

            date = new Date();

            $( "#insideID" ).detach();

            // It creates the collection
            var itemsCollection = new ItemsCollection;

            for (var i = 0; i < data.length; i++)
            {
                newItem = new Item ({name: data[i].label});
                itemsCollection.add(newItem);
            }

            var itemsView = new ItemsView({ collection: itemsCollection });
            $("#col-12").append(itemsView.render().el);

            runBackbone.innerHTML = (new Date() - date) + " ms";


            });

            });

在您的itemsView呈現方法中,不是將每個itemView附加到元素上,而是導致很多DOM重排,尤其是如果您的集合中有很多項目,則可以使用documentFragment作為僅附加一次的容器。

render: function() {
    this.$el.empty();

    var container = document.createDocumentFragment();

    this.collection.each(function(item) {
        var itemView = new ItemView({ model: item });
        container.appendChild(itemView.render().el);
    }, this);

    this.$el.append(container);
    return this;
} 

您可能想查看Marionette框架。 如果您的應用程序開始變得越來越大和復雜(例如,網格,布局,compositeViews等), 主干木偶 ,它將為您提供幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM