Comments (6)
Thanks, I suspect that the regression in performance is coming from the new Go expression parser which uses the Go AST.
It doesn't do it in a particularly smart way, it attempts to find the longest section of valid Go code by parsing from where it is, then extending to the next boundary token, and trying again. Previously, it used a heuristic of not parsing the Go code at all and looked for the closing }
(taking into account strings and {}
pairs in the Go code.), so it was doing a lot less work.
I'm sure I can improve that. The performance was acceptable on small files, but probably gets a lot worse the larger the file.
I'll come up with a test file, and rework that.
from templ.
I think a big win here would be to resolve the fact that the Inspect function of the go ast, continues to iterate even past the point where the function returns false, I've made a function which makes the API simpler, but it still iterates past a "found" node.
from templ.
PR merged. This change will be in the next release.
from templ.
Got a PR in flight. I dropped down to the token scanner level instead.
Care to both review and try it out? #605
from templ.
500x faster is no small feat, will take a look!
from templ.
@a-h PR #605 works great with my chunky file, 500x thank you!
╰─ templ version
v0.2.613
╰─ time templ generate -v
(!) templ version check: generator v0.2.613 is newer than templ version v0.2.543 found in go.mod file, consider running `go get -u github.com/a-h/templ` to upgrade
(✓) Starting post-generation handler
(✓) Walking directory [ path=/Users/dx/source/teh-go devMode=false ]
(✓) Starting event handler
(✓) Processing file [ file=/Users/dx/source/teh-go/internal/app/component/admin_templ.go ]
(✓) Processing file [ file=/Users/dx/source/teh-go/internal/app/component/client_templ.go ]
(✓) Processing file [ file=/Users/dx/source/teh-go/internal/app/component/client.templ ]
(✓) Processing file [ file=/Users/dx/source/teh-go/internal/app/component/admin.templ ]
(✓) Generated code [ file=/Users/dx/source/teh-go/internal/app/component/admin.templ in=1.898375ms ]
(✓) First post-generation event received, starting proxy
(✓) No proxy URL specified, not starting proxy
(✓) Dev mode not enabled, process can finish early
(✓) Generated code [ file=/Users/dx/source/teh-go/internal/app/component/client.templ in=179.932625ms ]
(✓) Post-generation event channel closed, exiting
(✓) Waiting for push handler to complete
(✓) Waiting for event handler to complete
(✓) Waiting for post-generation handler to complete
(✓) Complete [ updates=2 duration=180.303208ms ]
templ generate -v 0.25s user 0.11s system 183% cpu 0.196 total
from templ.
Related Issues (20)
- bug: script elements don't render script templates
- lsp: support the organizeImports code action HOT 3
- Wasm support for interacting with the DOM HOT 3
- generator: can't use iterator value in for loop HOT 8
- max retries reached HOT 3
- lsp: panic on codeAction HOT 4
- question: Escape go keywords at the beginning of the line HOT 3
- generator: Duplicate Import Statements in Generated Templates Cause go build Failure HOT 4
- vscode: folded files in tree view seem to not work when rust-analyzer is installed HOT 2
- Issue: Unexpected Script Placement in Generated HTML HOT 3
- fmt: <pre> tags not handled correctly HOT 3
- parser: style attribute of DOM element doesn't accept dynamic styles HOT 1
- proposal: Typed Children for Wrappers HOT 2
- Proposal: Allow spreading List of `templ.Components`, similar to `{ children ... }` HOT 1
- css expression: found unexpected parameters
- generator: Add nonce support for style tags
- Abandoned change to not modify files where fmt makes no changes HOT 3
- Proposal: Load file as templ HOT 2
- Help with intercepting middleware, and writing responses HOT 4
- Proposal: Change URL's signature to match [S]Printf
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from templ.