mirror of
				https://gitea.invidious.io/iv-org/shard-kemal.git
				synced 2024-08-15 00:53:36 +00:00 
			
		
		
		
	Cache http routes
This commit is contained in:
		
							parent
							
								
									e59cd646cd
								
							
						
					
					
						commit
						8fb028149b
					
				
					 2 changed files with 15 additions and 3 deletions
				
			
		|  | @ -5,10 +5,11 @@ module Kemal | |||
|     include HTTP::Handler | ||||
| 
 | ||||
|     INSTANCE = new | ||||
|     property routes | ||||
|     property routes, cached_routes | ||||
| 
 | ||||
|     def initialize | ||||
|       @routes = Radix::Tree(Route).new | ||||
|       @cached_routes = Hash(String, Radix::Result(Route)).new | ||||
|     end | ||||
| 
 | ||||
|     def call(context : HTTP::Server::Context) | ||||
|  | @ -22,9 +23,19 @@ module Kemal | |||
|       add_to_radix_tree("HEAD", path, Route.new("HEAD", path) { }) if method == "GET" | ||||
|     end | ||||
| 
 | ||||
|     # Check if a route is defined and returns the lookup | ||||
|     # Looks up the route from the Radix::Tree for the first time and caches to improve performance. | ||||
|     def lookup_route(verb : String, path : String) | ||||
|       @routes.find radix_path(verb, path) | ||||
|       lookup_path = radix_path(verb, path) | ||||
| 
 | ||||
|       if cached_route = @cached_routes[lookup_path]? | ||||
|         return cached_route | ||||
|       end | ||||
| 
 | ||||
|       route = @routes.find(lookup_path) | ||||
| 
 | ||||
|       @cached_routes[lookup_path] = route if route.found? | ||||
| 
 | ||||
|       route | ||||
|     end | ||||
| 
 | ||||
|     # Processes the route if it's a match. Otherwise renders 404. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue