Skip to content

Commit a906a6b

Browse files
added simple benchmark logic
1 parent 0483799 commit a906a6b

File tree

9 files changed

+233
-9
lines changed

9 files changed

+233
-9
lines changed

.gitignore

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
.DS_Store
2-
/.build
3-
/Packages
4-
xcuserdata/
5-
DerivedData/
2+
.build
3+
Packages
4+
xcuserdata
5+
DerivedData
66
.swiftpm
77
.netrc
88
.vscode
9-
Package.resolved
9+
Package.resolved
10+
__BenchmarkBoilerplate.d
11+
__BenchmarkBoilerplate.o
12+
__BenchmarkBoilerplate.swiftdeps

Benchmarks/.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
.DS_Store
2+
/.build
3+
/Packages
4+
xcuserdata/
5+
DerivedData/
6+
.swiftpm
7+
.swiftpm
8+
.netrc
9+
.vscode
10+
Package.resolved
11+
__BenchmarkBoilerplate.d
12+
__BenchmarkBoilerplate.o
13+
__BenchmarkBoilerplate.swiftdeps
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//
2+
// main.swift
3+
//
4+
//
5+
// Created by Evan Anderson on 10/5/24.
6+
//
7+
8+
import Benchmark
9+
import TestSwiftHTMLKit
10+
import TestElementary
11+
import TestSwiftHTMLPF
12+
13+
let benchmarks = {
14+
Benchmark.defaultConfiguration = .init(metrics: .all)
15+
16+
let swifthtmlkit:SwiftHTMLKitTests = SwiftHTMLKitTests()
17+
Benchmark("SwiftHTMLKit simpleHTML()") {
18+
for _ in $0.scaledIterations {
19+
blackHole(swifthtmlkit.simpleHTML())
20+
}
21+
}
22+
23+
let elementary:ElementaryTests = ElementaryTests()
24+
Benchmark("Elementary simpleHTML()") {
25+
for _ in $0.scaledIterations {
26+
blackHole(elementary.simpleHTML())
27+
}
28+
}
29+
30+
/*let renderer:Renderer = Renderer.init()
31+
Benchmark("VaporHTMLKit create single html") {
32+
for _ in $0.scaledIterations {
33+
blackHole(renderer.render(view: VaporHTMLKitTests.SimpleHTML()))
34+
}
35+
}*/
36+
37+
let swifthtml:SwiftHTMLPFTests = SwiftHTMLPFTests()
38+
Benchmark("SwiftHtml singleHTML()") {
39+
for _ in $0.scaledIterations {
40+
blackHole(swifthtml.simpleHTML())
41+
}
42+
}
43+
}
44+
45+
/*struct VaporHTMLKitTests {
46+
struct SimpleHTML : some VaporHTMLKit.View {
47+
var body : Content {
48+
Html {
49+
Body {
50+
Heading1 { "Swift HTML Benchmarks" }
51+
}
52+
}
53+
}
54+
}
55+
}*/
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// Elementary.swift
3+
//
4+
//
5+
// Created by Evan Anderson on 10/5/24.
6+
//
7+
8+
import Utilities
9+
import Elementary
10+
11+
package struct ElementaryTests : HTMLGenerator {
12+
package init() {}
13+
14+
package func simpleHTML() -> String {
15+
html { body { h1 { "Swift HTML Benchmarks" }} }.render()
16+
}
17+
package func optimalHTML() -> String {
18+
simpleHTML()
19+
}
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// SwiftHTMLKit.swift
3+
//
4+
//
5+
// Created by Evan Anderson on 10/5/24.
6+
//
7+
8+
import Utilities
9+
import SwiftHTMLKit
10+
11+
package struct SwiftHTMLKitTests : HTMLGenerator {
12+
package init() {}
13+
14+
package func simpleHTML() -> String {
15+
#html([
16+
#body([
17+
#h1(["Swift HTML Benchmarks"])
18+
])
19+
])
20+
}
21+
package func optimalHTML() -> String { simpleHTML() }
22+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// SwiftHTMLPF.swift
3+
//
4+
//
5+
// Created by Evan Anderson on 10/5/24.
6+
//
7+
8+
import Utilities
9+
import Html
10+
11+
package struct SwiftHTMLPFTests : HTMLGenerator {
12+
package init() {}
13+
14+
package func simpleHTML() -> String {
15+
render(.document(.html(.body(.h1("Swift HTML Benchmarks")))))
16+
}
17+
package func optimalHTML() -> String {
18+
simpleHTML()
19+
}
20+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//
2+
// Utilities.swift
3+
//
4+
//
5+
// Created by Evan Anderson on 10/5/24.
6+
//
7+
8+
package protocol HTMLGenerator {
9+
init()
10+
func simpleHTML() -> String
11+
func optimalHTML() -> String
12+
}

Benchmarks/Package.swift

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// swift-tools-version:5.10
2+
// The swift-tools-version declares the minimum version of Swift required to build this package.
3+
4+
import PackageDescription
5+
6+
let package = Package(
7+
name: "Benchmarks",
8+
platforms: [
9+
.macOS(.v14)
10+
],
11+
dependencies: [
12+
.package(url: "https://github.com/ordo-one/package-benchmark", from: "1.27.0"),
13+
.package(url: "https://github.com/RandomHashTags/swift-htmlkit", from: "0.4.0"),
14+
.package(url: "https://github.com/sliemeobn/elementary", from: "0.3.4"),
15+
.package(url: "https://github.com/vapor-community/HTMLKit", from: "2.8.1"),
16+
.package(url: "https://github.com/pointfreeco/swift-html", from: "0.4.1"),
17+
//.package(name: "BBHTML", url: "https://github.com/BinaryBirds/swift-html", from: "1.7.0")
18+
],
19+
targets: [
20+
.target(
21+
name: "Utilities",
22+
path: "Benchmarks/Utilities"
23+
),
24+
.target(
25+
name: "TestElementary",
26+
dependencies: [
27+
"Utilities",
28+
.product(name: "Elementary", package: "Elementary"),
29+
],
30+
path: "Benchmarks/Elementary"
31+
),
32+
.target(
33+
name: "TestSwiftHTMLBB",
34+
dependencies: [
35+
"Utilities",
36+
//.product(name: "SwiftHtml", package: "BBHTML")
37+
],
38+
path: "Benchmarks/SwiftHTMLBB"
39+
),
40+
.target(
41+
name: "TestSwiftHTMLKit",
42+
dependencies: [
43+
"Utilities",
44+
.product(name: "HTMLKit", package: "swift-htmlkit", moduleAliases: ["HTMLKit" : "SwiftHTMLKit"]),
45+
.product(name: "HTMLKit", package: "HTMLKit", moduleAliases: ["HTMLKit" : "VaporHTMLKit"])
46+
],
47+
path: "Benchmarks/SwiftHTMLKit"
48+
),
49+
.target(
50+
name: "TestSwiftHTMLPF",
51+
dependencies: [
52+
"Utilities",
53+
.product(name: "Html", package: "swift-html"),
54+
],
55+
path: "Benchmarks/SwiftHTMLPF"
56+
),
57+
.target(
58+
name: "TestVaporHTMLKit",
59+
dependencies: [
60+
"Utilities",
61+
.product(name: "HTMLKit", package: "swift-htmlkit", moduleAliases: ["HTMLKit" : "SwiftHTMLKit"]),
62+
.product(name: "HTMLKit", package: "HTMLKit", moduleAliases: ["HTMLKit" : "VaporHTMLKit"])
63+
],
64+
path: "Benchmarks/VaporHTMLKit"
65+
),
66+
67+
.executableTarget(
68+
name: "Benchmarks",
69+
dependencies: [
70+
"TestElementary",
71+
"TestSwiftHTMLBB",
72+
"TestSwiftHTMLKit",
73+
"TestSwiftHTMLPF",
74+
"TestVaporHTMLKit",
75+
.product(name: "Benchmark", package: "package-benchmark")
76+
],
77+
path: "Benchmarks/Benchmarks",
78+
plugins: [
79+
.plugin(name: "BenchmarkPlugin", package: "package-benchmark")
80+
]
81+
)
82+
]
83+
)

README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ Write HTML using Swift Macros.
1111
- HTML macros enforce safety, can be used anywhere, and compile directly to strings which are easily manipulated
1212
- The output is minified at no performance cost
1313
## Examples
14-
<style>
15-
details { padding-left:20px }
16-
summary { margin-left:-20px }
17-
</style>
1814
### Basic
1915
<details>
2016
<summary>How do I use this library?</summary>

0 commit comments

Comments
 (0)