gpt4 book ai didi

elixir - Phoenix 这么慢?请帮助提高其性能

转载 作者:行者123 更新时间:2023-12-01 22:24:39 25 4
gpt4 key购买 nike

我学习 elixir 只是因为网上很多文章都 promise 它的响应时间小于一毫秒。我昨天构建了我的第一个应用程序,但我找不到它的性能比 Rails 更快。发生了什么事?

让我解释一下我的应用程序。它实现了 ecto-secure-password 包提供的基本认证机制:

defmodule HelloPhoenix.User do
use HelloPhoenix.Web, :model
use SecurePassword

schema "users" do
field :first_name, :string
field :last_name, :string
field :username, :string

has_secure_password
end
end

这是我的 Controller :

defmodule HelloPhoenix.SessionController do
use HelloPhoenix.Web, :controller

def create(conn, %{ "session" => %{ "username" => username, "password" => password }}) do
if user = HelloPhoenix.User.authenticate(HelloPhoenix.Repo.get_by(HelloPhoenix.User, username: username), password) do
conn
|> put_session(:user_id, user.id)
|> json(UserSerializer.run(user))
else
conn
|> put_status(422)
|> json(%{})
end
end
end

所以,我正在使用这些命令:

MIX_ENV=prod mix compile
MIX_ENV=prod mix phoenix.server

失败和成功身份验证的响应时间约为 130 毫秒,而此处的 Rails 响应时间约为 150 毫秒。我做错了什么?

最佳答案

它之所以“慢”是因为密码哈希函数(在本例中为 bcrypt)是故意慢的,以避免暴力攻击。我认为您不必为此担心,因为您只需要在用户登录时进行哈希处理,而不是在每次请求时都进行哈希处理。另一方面,攻击者每次尝试输入密码时都需要付出代价。

但是,建议在运行测试代码时减少轮次,因为在每次请求时都创建一个用户会减慢您的测试速度。缓慢的测试使开发人员不会经常运行它们,这并不好。

ecto-secure-password 使用 comeonin,因此,如果你想让它在测试环境中更快(不要在生产,因为它根本不安全),您可以将其配置为仅使用几轮。

将此附加到您的 config/test.exs:

config :comeonin, :bcrypt_log_rounds, 4
config :comeonin, :pbkdf2_rounds, 1

瞧,生产是安全的,同时您的测试仍然很快(我的测试从 15 秒缩短到 < 1 秒)。

关于elixir - Phoenix 这么慢?请帮助提高其性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36804638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com