【问题标题】:Dynamic routing performance in node.js with expressnode.js 中的动态路由性能与 express
【发布时间】:2013-02-24 15:47:47
【问题描述】:

我必须在快速应用程序中创建 /:username 类型的路由。我可以想到两种方法,我想知道哪种方式更优化性能。第一个是通过调用 db 来动态提供路由服务,如果用户名存在以提供所需的配置文件。第二个是创建一个函数,以便在创建用户时将其个人资料 url 硬编码到应用程序中,然后在删除用户时将其删除。这样,每当请求这种类型的 url 时,就不会调用数据库。所以问题是第二种情况下的性能问题是什么,如果有的话,每种情况的优缺点是什么,主要是性能方面的?

【问题讨论】:

  • 我认为如果您使用 /:userid/name 请求搜索某个 id,mongo 不会受到影响。您可以在会话中缓存在线用户,或者稍后在 redis 中说。

标签: performance node.js mongodb routing express


【解决方案1】:

做第一个。我不能谈论性能(但我觉得从长远来看第一个会更快),但是如果你的应用程序(不是说这会发生)像 Facebook 一样受欢迎,然后你有 1 000 000 000 会发生什么您的快速应用程序中的路线?即使尝试启动您的应用程序也会变得可笑。

数据库可以处理这个问题,如果您真的担心它,您可以保留已经检查过的用户名的缓存。首次检查时添加,删除用户名时删除。

我现在也想到了;无论如何,您是否不必执行几乎相同的查询来获取信息以填充配置文件?如果您建议在创建帐户时为每个配置文件创建静态页面,请不要这样做。这就是数据库的设计目的,因此以这种方式使用它们是非常安全的。

【讨论】:

  • 这也发生在我后来,我以任何一种方式查询数据...谢谢,我不知道它是怎么来的,但我真的想对性能发表意见,我认为你必须是对的...谢谢...
【解决方案2】:

我只是使用 /:username 并且我将它放在我的其他路线下方,因此它不会取代其他页面,例如 /login

如果该用户名没有用户,则我将他们重定向到主页。

使用猫鼬,你可以做这样的事情:

//app.js
app.get('/:username', routes.profile.get);

//route handler
User.findOne({ username: req.params.username}, function(err, owner){
  if ( !owner ) {
      req.flash('error', 'Woops, looks like that account doesn\'t exist.');
      res.redirect('/');
  }

  //do something with owner
});

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2022-01-04
    • 2022-01-24
    相关资源
    最近更新 更多