perf: replace string concatenation with list join and add normalized headers map in html, http, jinja, json, markdown modules
Optimize string building in decodeUtf8_, slugify, parseRaw_, processCode_, and processBold_ by accumulating parts in a list and joining once, avoiding repeated string allocation. In HttpResponse constructor, precompute a normalized headers map for O(1) case-insensitive header lookups instead of linear scan. Simplify Json.stringify indent generation using string repetition operator.
This commit is contained in:
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "html" for Html
|
||||
|
||||
var long = "A" * 10000
|
||||
var result = Html.slugify(long)
|
||||
System.print(result.count) // expect: 10000
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "http" for HttpResponse
|
||||
|
||||
var headers = {}
|
||||
for (i in 0...100) {
|
||||
headers["Header-%(i)"] = "value%(i)"
|
||||
}
|
||||
var resp = HttpResponse.new_(200, "OK", headers, "")
|
||||
System.print(resp.header("header-50")) // expect: value50
|
||||
System.print(resp.header("HEADER-99")) // expect: value99
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "markdown" for Markdown
|
||||
|
||||
var text = "**bold** " * 100
|
||||
var result = Markdown.toHtml(text)
|
||||
System.print(result.contains("<strong>")) // expect: true
|
||||
Vendored
+42
@@ -0,0 +1,42 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "scheduler" for Scheduler
|
||||
import "timer" for Timer
|
||||
|
||||
var results = []
|
||||
var completed = 0
|
||||
|
||||
Scheduler.add {
|
||||
results.add("fiber1_start")
|
||||
Timer.sleep(1)
|
||||
results.add("fiber1_end")
|
||||
completed = completed + 1
|
||||
}
|
||||
|
||||
Scheduler.add {
|
||||
results.add("fiber2_start")
|
||||
Timer.sleep(1)
|
||||
results.add("fiber2_end")
|
||||
completed = completed + 1
|
||||
}
|
||||
|
||||
Scheduler.add {
|
||||
results.add("fiber3_start")
|
||||
Timer.sleep(1)
|
||||
results.add("fiber3_end")
|
||||
completed = completed + 1
|
||||
}
|
||||
|
||||
System.print(completed) // expect: 0
|
||||
System.print(results.count) // expect: 0
|
||||
|
||||
Timer.sleep(10)
|
||||
|
||||
System.print(completed) // expect: 3
|
||||
System.print(results.count) // expect: 6
|
||||
System.print(results.contains("fiber1_start")) // expect: true
|
||||
System.print(results.contains("fiber1_end")) // expect: true
|
||||
System.print(results.contains("fiber2_start")) // expect: true
|
||||
System.print(results.contains("fiber2_end")) // expect: true
|
||||
System.print(results.contains("fiber3_start")) // expect: true
|
||||
System.print(results.contains("fiber3_end")) // expect: true
|
||||
Vendored
+46
@@ -0,0 +1,46 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "scheduler" for Scheduler
|
||||
import "timer" for Timer
|
||||
|
||||
var results = []
|
||||
var errors = []
|
||||
|
||||
var handleSafe = Fn.new { |task|
|
||||
var fiber = Fiber.new {
|
||||
task.call()
|
||||
}
|
||||
var error = fiber.try()
|
||||
if (error != null) {
|
||||
errors.add(error)
|
||||
}
|
||||
}
|
||||
|
||||
Scheduler.add {
|
||||
handleSafe.call {
|
||||
results.add("good1")
|
||||
}
|
||||
}
|
||||
|
||||
Scheduler.add {
|
||||
handleSafe.call {
|
||||
Fiber.abort("intentional error")
|
||||
}
|
||||
}
|
||||
|
||||
Scheduler.add {
|
||||
handleSafe.call {
|
||||
results.add("good2")
|
||||
}
|
||||
}
|
||||
|
||||
System.print(results.count) // expect: 0
|
||||
System.print(errors.count) // expect: 0
|
||||
|
||||
Timer.sleep(10)
|
||||
|
||||
System.print(results.count) // expect: 2
|
||||
System.print(errors.count) // expect: 1
|
||||
System.print(results[0]) // expect: good1
|
||||
System.print(results[1]) // expect: good2
|
||||
System.print(errors[0]) // expect: intentional error
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "scheduler" for Scheduler
|
||||
import "timer" for Timer
|
||||
import "web" for SessionStore
|
||||
|
||||
var store = SessionStore.new()
|
||||
var results = []
|
||||
var taskCount = 5
|
||||
|
||||
for (i in 0...taskCount) {
|
||||
var index = i
|
||||
Scheduler.add {
|
||||
var session = store.create()
|
||||
session["task"] = index
|
||||
store.save(session)
|
||||
results.add({"id": session.id, "index": index})
|
||||
}
|
||||
}
|
||||
|
||||
System.print(results.count) // expect: 0
|
||||
|
||||
Timer.sleep(50)
|
||||
|
||||
System.print(results.count) // expect: 5
|
||||
|
||||
var uniqueIds = {}
|
||||
for (r in results) {
|
||||
uniqueIds[r["id"]] = true
|
||||
}
|
||||
System.print(uniqueIds.count) // expect: 5
|
||||
|
||||
var hasAll = true
|
||||
for (i in 0...5) {
|
||||
var found = false
|
||||
for (r in results) {
|
||||
if (r["index"] == i) found = true
|
||||
}
|
||||
if (!found) hasAll = false
|
||||
}
|
||||
System.print(hasAll) // expect: true
|
||||
Reference in New Issue
Block a user