Hamlit

High Performance Haml Implementation
Alternatives To Hamlit
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Hamlit9761,804142 months ago117February 03, 2022otherRuby
High Performance Haml Implementation
Sinatra Partial105735206 years ago11July 28, 20173otherRuby
Just the partials helper in a gem. That is all.
Sinatra Prawn46
211 years ago3August 10, 20145mitRuby
Sinatra extension to add support for pdf rendering with Prawn templates.
React Sinatra37
5 years ago2January 19, 20171mitRuby
React on Sinatra Integration, Server Side Rendering
Tilt Jbuilder2246266 years ago12January 30, 20163mitRuby
Support for rendering Jbuilder templates in Tilt
Sinatra Markaby9
14 years ago3August 10, 20141mitRuby
Sinatra plugin to enable markaby (.mab) template rendering
Cells Sinatra9
13 years agoRuby
View Components for Sinatra.
Ruby Oc5317 years ago5November 10, 20152mitRuby
OpenComponents for Ruby
Tumblr Dashboard Rss Sinatra App5
12 years agoRuby
Sinatra application for rendering tumblr dashboard rss
Chuck Renderer4
6 years ago2gpl-3.0CSS
Docker image for ChucK rendering as a service
Alternatives To Hamlit
Select To Compare


Alternative Project Comparisons
Readme

Hamlit

Gem Version test

Hamlit is a high performance Haml implementation.

Project status

Hamlit's implementation was copied to Haml 6. From Haml 6, you don't need to switch to Hamlit.

Both Haml 6 and Hamlit are still maintained by k0kubun. While you don't need to immediately deprecate Hamlit, Haml 6 has more maintainers and you'd better start a new project with Haml rather than Hamlit, given no performance difference between them.

Introduction

What is Hamlit?

Hamlit is another implementation of Haml. With some Hamlit's characteristics for performance, Hamlit is 1.94x times faster than the original Haml 5 in this benchmark, which is an HTML-escaped version of slim-template/slim's one for fairness. (Result on Travis)

Hamlit Benchmark
      hamlit v2.13.0:   247404.4 i/s
        erubi v1.9.0:   244356.4 i/s - 1.01x slower
         slim v4.1.0:   238254.3 i/s - 1.04x slower
         faml v0.8.1:   197293.2 i/s - 1.25x slower
         haml v5.2.0:   127834.4 i/s - 1.94x slower

Why is Hamlit fast?

Less string concatenation by design

As written in Hamlit's characteristics, Hamlit drops some not-so-important features which require works on runtime. With the optimized language design, we can reduce the string concatenation to build attributes.

Static analyzer

Hamlit analyzes Ruby expressions with Ripper and render it on compilation if the expression is static. And Hamlit can also compile string literal with string interpolation to reduce string allocation and concatenation on runtime.

C extension to build attributes

While Hamlit has static analyzer and static attributes are rendered on compilation, dynamic attributes must be rendered on runtime. So Hamlit optimizes rendering on runtime with C extension.

Usage

See REFERENCE.md for details.

Rails

Add this line to your application's Gemfile or just replace gem "haml" with gem "hamlit". It enables rendering by Hamlit for *.haml automatically.

gem 'hamlit'

If you want to use view generator, consider using hamlit-rails.

Sinatra

Replace gem "haml" with gem "hamlit" in Gemfile, and require "hamlit".

While Haml disables escape_html option by default, Hamlit enables it for security. If you want to disable it, please write:

set :haml, { escape_html: false }

Command line interface

You can see compiled code or rendering result with "hamlit" command.

$ gem install hamlit
$ hamlit --help
Commands:
  hamlit compile HAML    # Show compile result
  hamlit help [COMMAND]  # Describe available commands or one specific command
  hamlit parse HAML      # Show parse result
  hamlit render HAML     # Render haml template
  hamlit temple HAML     # Show temple intermediate expression

$ cat in.haml
- user_id = 123
%a{ href: "/users/#{user_id}" }

# Show compiled code
$ hamlit compile in.haml
_buf = [];  user_id = 123;
; _buf << ("<a href='/users/".freeze); _buf << (::Hamlit::Utils.escape_html((user_id))); _buf << ("'></a>\n".freeze); _buf = _buf.join

# Render html
$ hamlit render in.haml
<a href='/users/123'></a>

Contributing

Reporting an issue

Please report an issue with following information:

  • Full error backtrace
  • Haml template
  • Ruby version
  • Hamlit version
  • Rails/Sinatra version

Coding styles

Please follow the existing coding styles and do not send patches including cosmetic changes.

License

Copyright (c) 2015 Takashi Kokubun

Popular Rendering Projects
Popular Sinatra Projects
Popular Graphics Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Ruby
Rendering
Sinatra
Slim
Template Engine