第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

最佳實(shí)踐之代碼優(yōu)化和技巧

最佳实践之代码优化和技巧

公众号:famiup

优化Meteor方法的执行效率-异步执行

Meteor 提供了两种简单易于使用的异步化代码的方法,可以非常方便的优化我们的代码,他们分别是 Meteor.defer(func) 和 this.unblock(),这两中方法我更新喜欢 this.unblock(),因为它在释放主线程的同时,并没有改变你的程序流程,还是会按着代码的顺序执行,该返回的时候还是会返回代码执行的结果,unblock只是将后面的代码以非堵塞形式执行。
Meteor.defer(func),提供了超轻量级的异步方法,可以将任何代码包装在defer中,将他们编程异步执行。

if (Meteor.isServer) {
  Meteor.methods({
    'addStatus': function (status) {
      Meteor.defer(function () {
        console.log('sending emails');
      });
      console.log("status added")
    },

    'wait': function () {
      this.unblock();
      console.log('wait started');
      Meteor._sleepForMs(3000);
      console.log('wait is over');
      return 100;
    }
  });
}

if (Meteor.isClient) {
  Meteor.call('wait');
  Meteor.call('addStatus', 'this is my status message');
}

上面的代码执行结果会是这样,仔细感受他们之间的差异:

wait started
status added
sending emails
wait is over

订阅更少的数据

每次页面加载时间消耗很大一部分来自于订阅数据,特别是当数据量慢慢变大之后,订阅数据将是影响app执行的重要因素。使用 limit 可以控制订阅数据的数量,通过 fields 过滤订阅数据的字段。
limit 可以作为订阅的必选项。
在表设计里有特别大的字段是,或者在完成功能后优化不必要的字段时,使用 fields 过滤和确定需要的字段。

Meteor.publish('getRecentWikis', function () {
  var options = {
    sort: {date: -1},
    limit: 50,
    fields: {topic:1, content: 1}
  };
  return Wiki.find({}, options);
});

没有数据直接返回订阅

订阅中不能使用findOne,因为findOne返回的是对象,而find返回的是指针,find().fetch() 返回的是对象数组。所以在订阅时必须返回指针。或者订阅状态。

Meteor.publish('lists.private', function() {
  if (!this.userId) {
    return this.ready();
  }

  return Lists.find({
    userId: this.userId
  }, {
    fields: Lists.publicFields
  });
});

通过转化器,减少内容

在订阅是可以使用 transform 方法预处理数据字段的内容,进一步减少和优化订阅的数据。

Meteor.publish('getRecentWikis', function (limit) {
  limit = limit || 10;

  var options = {
    sort: {date: -1},
    limit: limit,
    fields: {topic:1, content: 1},
    transform: function (wiki) {
      var newWiki = {
        topic: wiki.topic,
        summary: wiki.content.substring(0, 100)
      };

      return newWiki;
    }
  };
  return Wiki.find({}, options);
});

联合订阅

使用 reywood:publish-composite 组件可以让订阅的数据返回向关系的数据,简化了订阅数据的复杂度,Meteor.publishComposite 方法支持嵌套式的调用可以实现类似SQL里联合查询的效果,publish-composite 是 Meteor 重要的组件。

meteor add reywood:publish-composite
Meteor.publishComposite("productByCompany", function(id) {
        return {
            find: function() {
                return Company.find();
            },
            children: [{
                find: function(company) {
                    return Product.find({
                        companyid: company._id
                    });
                },
            }, {
                find: function(company) {
                    return Column.find({
                        companyid: company._id
                    });
                },
            }, ]
        }
    })

缓存订阅数据

通过 meteorhacks:subs-manager 组件可以将每个页面订阅的数据缓冲,这样可以进一步加速和优化页面的加载速度。

meteor add meteorhacks:subs-manager
var subscriptions = new SubsManager();
subscriptions.subscribe('singlePost', 'id1');

Tracker.autorun(function() {
  if(subscriptions.ready()) {
    // all the subscriptions are ready to use.
  }
});

更快的加载

页面加载 meteorhacks:fast-render 组件。

meteorhacks:fast-render
FastRender.debugger.showLogs();
FastRender.debugger.hideLogs();

FastRender.debugger.blockDDP();
FastRender.debugger.unblockDDP();

FastRender.debugger.disableFR();
FastRender.debugger.enableFR();
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消