Skip to content

Commit

Permalink
small optimizations
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Jan 20, 2013
1 parent 54df770 commit cf6b807
Show file tree
Hide file tree
Showing 44 changed files with 53 additions and 173 deletions.
2 changes: 1 addition & 1 deletion Changes
@@ -1,5 +1,5 @@

3.83 2013-01-19
3.83 2013-01-20
- Improved documentation.

3.82 2013-01-18
Expand Down
19 changes: 2 additions & 17 deletions lib/Mojo/Content.pm
Expand Up @@ -145,8 +145,6 @@ sub parse {
$self->_uncompress($chunk);
$self->{size} += length $chunk;
}

# Finished
$self->{state} = 'finished' if $len <= $self->progress;
}

Expand All @@ -169,43 +167,31 @@ sub progress {
sub write {
my ($self, $chunk, $cb) = @_;

# Dynamic content
# Buffer chunk
$self->{dynamic} = 1;

# Add chunk
if (defined $chunk) { $self->{body_buffer} .= $chunk }

# Delay
else { $self->{delay} = 1 }

# Drain
$self->once(drain => $cb) if $cb;

# Finish
$self->{eof} = 1 if defined $chunk && $chunk eq '';

return $self;
}

sub write_chunk {
my ($self, $chunk, $cb) = @_;

# Chunked transfer encoding
$self->headers->transfer_encoding('chunked') unless $self->is_chunked;

# Write
$self->write(defined $chunk ? $self->_build_chunk($chunk) : $chunk, $cb);

# Finish
$self->{eof} = 1 if defined $chunk && $chunk eq '';

return $self;
}

sub _build {
my ($self, $method) = @_;

# Build part from chunks
my $buffer = '';
my $offset = 0;
while (1) {
Expand All @@ -216,7 +202,6 @@ sub _build {
# End of part
last unless my $len = length $chunk;

# Part
$offset += $len;
$buffer .= $chunk;
}
Expand Down Expand Up @@ -302,7 +287,7 @@ sub _parse_headers {
sub _parse_until_body {
my ($self, $chunk) = @_;

# Add chunk
# Buffer chunk
$self->{raw_size} += length($chunk //= '');
$self->{pre_buffer} .= $chunk;

Expand Down
2 changes: 0 additions & 2 deletions lib/Mojo/Content/MultiPart.pm
Expand Up @@ -150,8 +150,6 @@ sub _parse_multipart_boundary {
my $end = "\x0d\x0a--$boundary--";
if ((index $self->{multipart}, $end) == 0) {
substr $self->{multipart}, 0, length $end, '';

# Finished
$self->{multi_state} = 'finished';
}

Expand Down
4 changes: 0 additions & 4 deletions lib/Mojo/Content/Single.pm
Expand Up @@ -30,11 +30,7 @@ sub clone {

sub get_body_chunk {
my ($self, $offset) = @_;

# Body generator
return $self->generate_body_chunk($offset) if $self->{dynamic};

# Normal content
return $self->asset->get_chunk($offset);
}

Expand Down
2 changes: 0 additions & 2 deletions lib/Mojo/Cookie.pm
Expand Up @@ -30,8 +30,6 @@ sub _tokenize {
# Value
my $value;
$value = unquote $1 if $string =~ s/^("(?:\\\\|\\"|[^"])+"|[^;,]+)\s*//;

# Token
push @token, [$name, $value];

# Separator
Expand Down
1 change: 0 additions & 1 deletion lib/Mojo/Cookie/Request.pm
Expand Up @@ -6,7 +6,6 @@ use Mojo::Util 'quote';
sub parse {
my ($self, $string) = @_;

# Walk tree
my @cookies;
for my $token (map {@$_} $self->_tokenize($string)) {
my ($name, $value) = @$token;
Expand Down
2 changes: 0 additions & 2 deletions lib/Mojo/Cookie/Response.pm
Expand Up @@ -15,8 +15,6 @@ sub expires {
? Mojo::Date->new($self->{expires})
: $self->{expires}
unless @_;

# New expires value
$self->{expires} = shift;

return $self;
Expand Down
10 changes: 4 additions & 6 deletions lib/Mojo/DOM/CSS.pm
Expand Up @@ -36,13 +36,11 @@ my $TOKEN_RE = qr/
sub select {
my $self = shift;

# Compile selectors
my $pattern = $self->_compile(shift);

# Walk tree
# Compile selectors and walk tree
my @results;
my $tree = $self->tree;
my @queue = ($tree);
my $pattern = $self->_compile(shift);
my $tree = $self->tree;
my @queue = ($tree);
while (my $current = shift @queue) {
my $type = $current->[0];

Expand Down
6 changes: 1 addition & 5 deletions lib/Mojo/DOM/HTML.pm
Expand Up @@ -269,14 +269,10 @@ sub _render {
# Processing instruction
return "<?" . $tree->[1] . "?>" if $e eq 'pi';

# Offset
my $start = $e eq 'root' ? 1 : 2;

# Start tag
my $start = $e eq 'root' ? 1 : 2;
my $content = '';
if ($e eq 'tag') {

# Offset
$start = 4;

# Open tag
Expand Down
1 change: 0 additions & 1 deletion lib/Mojo/Headers.pm
Expand Up @@ -134,7 +134,6 @@ sub remove {
sub to_hash {
my ($self, $multi) = @_;

# Build
my %hash;
for my $header (@{$self->names}) {
my @headers = $self->header($header);
Expand Down
12 changes: 2 additions & 10 deletions lib/Mojo/IOLoop/Stream.pm
Expand Up @@ -65,10 +65,8 @@ sub steal_handle {
sub write {
my ($self, $chunk, $cb) = @_;

# Prepare chunk for writing
$self->{buffer} .= $chunk;

# Write with roundtrip
$self->{buffer} .= $chunk;
if ($cb) { $self->once(drain => $cb) }
else { return $self unless length $self->{buffer} }

Expand All @@ -82,10 +80,7 @@ sub write {
sub _read {
my $self = shift;

# Read
my $read = $self->{handle}->sysread(my $buffer, 131072, 0);

# Error
unless (defined $read) {

# Retry
Expand All @@ -101,7 +96,6 @@ sub _read {
# EOF
return $self->close if $read == 0;

# Handle read
$self->emit_safe(read => $buffer)->{active} = time;
}

Expand Down Expand Up @@ -129,8 +123,6 @@ sub _write {
my $handle = $self->{handle};
if (length $self->{buffer}) {
my $written = $handle->syswrite($self->{buffer});

# Error
unless (defined $written) {

# Retry
Expand All @@ -148,7 +140,7 @@ sub _write {
$self->{active} = time;
}

# Handle drain
# Drain
$self->emit_safe('drain') if !length $self->{buffer};

# Stop writing
Expand Down
11 changes: 1 addition & 10 deletions lib/Mojo/JSON.pm
Expand Up @@ -43,7 +43,7 @@ my $WHITESPACE_RE = qr/[\x20\x09\x0a\x0d]*/;
sub decode {
my ($self, $bytes) = @_;

# Cleanup
# Clean start
$self->error(undef);

# Missing input
Expand Down Expand Up @@ -256,22 +256,14 @@ sub _encode_array {

sub _encode_object {
my $object = shift;

# Encode pairs
my @pairs = map { _encode_string($_) . ':' . _encode_values($object->{$_}) }
keys %$object;

# Stringify
return '{' . join(',', @pairs) . '}';
}

sub _encode_string {
my $string = shift;

# Escape string
$string =~ s!([\x00-\x1F\x7F\x{2028}\x{2029}\\"/\b\f\n\r\t])!$REVERSE{$1}!gs;

# Stringify
return "\"$string\"";
}

Expand Down Expand Up @@ -322,7 +314,6 @@ sub _exception {
$context .= ' at line ' . @lines . ', offset ' . length(pop @lines || '');
}

# Throw
die "$context\n";
}

Expand Down
2 changes: 1 addition & 1 deletion lib/Mojo/Loader.pm
Expand Up @@ -69,7 +69,7 @@ sub _all {
# Ignore everything after __END__
$content =~ s/\n__END__\r?\n.*$/\n/s;

# Split
# Split files
my @data = split /^@@\s*(.+?)\s*\r?\n/m, $content;
shift @data;
Expand Down
18 changes: 1 addition & 17 deletions lib/Mojo/Message.pm
Expand Up @@ -42,8 +42,6 @@ sub body {

sub body_params {
my $self = shift;

# Cached
return $self->{body_params} if $self->{body_params};

# Charset
Expand All @@ -59,15 +57,9 @@ sub body_params {
# "multipart/formdata"
elsif ($type =~ m!multipart/form-data!i) {
my $formdata = $self->_parse_formdata;

# Formdata
for my $data (@$formdata) {
my ($name, $filename, $value) = @$data;

# File
next if defined $filename;

# Form value
$params->append($name, $value);
}
}
Expand Down Expand Up @@ -143,14 +135,9 @@ sub fix_headers {
sub get_body_chunk {
my ($self, $offset) = @_;

# Progress
$self->emit('progress', 'body', $offset);

# Chunk
my $chunk = $self->content->get_body_chunk($offset);
return $chunk if !defined $chunk || length $chunk;

# Finish
$self->finish;

return $chunk;
Expand Down Expand Up @@ -227,7 +214,6 @@ sub parse {
return $self->error('Maximum buffer size exceeded', 400)
if $self->content->is_limit_exceeded;

# Progress
return $self->emit('progress')->content->is_finished ? $self->finish : $self;
}

Expand Down Expand Up @@ -280,7 +266,6 @@ sub write_chunk { shift->_write(write_chunk => @_) }
sub _build {
my ($self, $method) = @_;

# Build part from chunks
my $buffer = '';
my $offset = 0;
while (1) {
Expand All @@ -291,7 +276,6 @@ sub _build {
# End of part
last unless my $len = length $chunk;

# Part
$offset += $len;
$buffer .= $chunk;
}
Expand Down Expand Up @@ -329,7 +313,7 @@ sub _parse_formdata {
return \@formdata unless $content->is_multipart;
my $charset = $content->charset || $self->default_charset;

# Walk the tree
# Walk tree
my @parts;
push @parts, $content;
while (my $part = shift @parts) {
Expand Down
5 changes: 1 addition & 4 deletions lib/Mojo/Message/Request.pm
Expand Up @@ -100,7 +100,7 @@ sub fix_headers {
sub get_start_line_chunk {
my ($self, $offset) = @_;

# Request line
# Prepare request line
unless (defined $self->{start_buffer}) {

# Path
Expand Down Expand Up @@ -128,10 +128,7 @@ sub get_start_line_chunk {
$self->{start_buffer} = "$method $path HTTP/@{[$self->version]}\x0d\x0a";
}

# Progress
$self->emit(progress => 'start_line', $offset);

# Chunk
return substr $self->{start_buffer}, $offset, 131072;
}

Expand Down
5 changes: 1 addition & 4 deletions lib/Mojo/Message/Response.pm
Expand Up @@ -116,17 +116,14 @@ sub fix_headers {
sub get_start_line_chunk {
my ($self, $offset) = @_;

# Status line
# Prepare status line
unless (defined $self->{start_buffer}) {
my $code = $self->code || 404;
my $msg = $self->message || $self->default_message;
$self->{start_buffer} = "HTTP/@{[$self->version]} $code $msg\x0d\x0a";
}

# Progress
$self->emit(progress => 'start_line', $offset);

# Chunk
return substr $self->{start_buffer}, $offset, 131072;
}

Expand Down

0 comments on commit cf6b807

Please sign in to comment.