diff --git a/documentation/topics/compile_times.md b/documentation/topics/compile_times.md new file mode 100644 index 00000000..b7579e29 --- /dev/null +++ b/documentation/topics/compile_times.md @@ -0,0 +1,43 @@ +# Improving Compile Times + +In previous versions of Ash, the standard way to configure the list of resources for an Api module looked like this: + +```elixir +defmodule MyApp.MyApi do + use Ash.Api + + + resources do + resource MyApp.MyResource + ... + end +end +``` + +This caused many compilation dependency issues, causing slow compile times when changing single files, and could also potentially lead to deadlocks. + +The preferred way of doing this now looks like this: + +```elixir +# Define a registry module +defmodule MyApp.MyApi.Registry do + use Ash.Registry, + extensions: Ash.Registry.ResourceValidations + + registry do + entry MyApp.MyResource + ... + end +end + +defmodule MyApp.MyApi do + use Ash.Api, otp_app: :my_app +end + +# in `config/config.exs` + +config :my_app, MyApp.MyApi, + registry: MyApp.MyApi.Registry +``` + +This will prevent a bunch of cross-concern compile time dependencies, allowing for much faster compile times in general. \ No newline at end of file diff --git a/mix.exs b/mix.exs index 512aea38..6ce52d9b 100644 --- a/mix.exs +++ b/mix.exs @@ -85,6 +85,9 @@ defmodule Ash.MixProject do ], "documentation/topics/multitenancy.md": [ title: "Multitenancy" + ], + "documentation/topics/compile_times.md": [ + title: "Compile Times" ] ], groups_for_extras: [