Skip to content

Commit ff24e34

Browse files
committed
performance: netty
- remove some slow path checks - fix bug on date header generator
1 parent f2a8bde commit ff24e34

File tree

5 files changed

+24
-18
lines changed

5 files changed

+24
-18
lines changed

modules/jooby-netty/src/main/java/io/jooby/internal/netty/HeadersMultiMap.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,10 +490,13 @@ static void encoderHeader(CharSequence name, CharSequence value, ByteBuf buf) {
490490
}
491491

492492
private static void writeAscii(ByteBuf buf, int offset, CharSequence value) {
493-
if (value instanceof NettyString netty) {
494-
buf.setBytes(offset, netty.bytes, 0, netty.bytes.length);
495-
} else if (value instanceof AsciiString ascii) {
496-
buf.setBytes(offset, ascii.array(), ascii.arrayOffset(), value.length());
493+
var clazz = value.getClass();
494+
if (clazz == NettyString.class) {
495+
var nettyString = (NettyString) value;
496+
buf.setBytes(offset, nettyString.bytes, 0, nettyString.bytes.length);
497+
} else if (clazz == AsciiString.class) {
498+
var asciiString = (AsciiString) value;
499+
buf.setBytes(offset, asciiString.array(), asciiString.arrayOffset(), value.length());
497500
} else {
498501
buf.setCharSequence(offset, value, CharsetUtil.US_ASCII);
499502
}

modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyDateService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ public class NettyDateService implements Runnable {
1616
private CharSequence date;
1717

1818
public NettyDateService(ScheduledExecutorService scheduler) {
19-
scheduler.scheduleAtFixedRate(this, 0, DATE_INTERVAL, TimeUnit.MILLISECONDS);
19+
this.date =
20+
new NettyString(
21+
DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now(ZoneOffset.UTC)));
22+
scheduler.scheduleAtFixedRate(this, DATE_INTERVAL, DATE_INTERVAL, TimeUnit.MILLISECONDS);
2023
}
2124

2225
public CharSequence date() {

modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyRequestDecoder.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ protected HttpMessage createMessage(String[] initialLine) throws Exception {
2727
headersFactory);
2828
}
2929

30+
@Override
31+
protected boolean isContentAlwaysEmpty(HttpMessage msg) {
32+
return false;
33+
}
34+
3035
private static HttpMethod valueOf(String name) {
3136
// fast-path
3237
if (name == GET) {
@@ -42,15 +47,6 @@ private static HttpMethod valueOf(String name) {
4247
return HttpMethod.PUT;
4348
}
4449
// "slow"-path: ensure method is on upper case
45-
return HttpMethod.valueOf(toUpperCase(name));
46-
}
47-
48-
private static String toUpperCase(String name) {
49-
for (int i = 0; i < name.length(); i++) {
50-
if (Character.isLowerCase(name.charAt(i))) {
51-
return name.toUpperCase();
52-
}
53-
}
54-
return name;
50+
return HttpMethod.valueOf(name.toUpperCase());
5551
}
5652
}

modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyResponseEncoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
public class NettyResponseEncoder extends HttpResponseEncoder {
1313
@Override
1414
protected void encodeHeaders(HttpHeaders headers, ByteBuf buf) {
15-
if (headers instanceof HeadersMultiMap headersMultiMap) {
16-
headersMultiMap.encode(buf);
15+
if (headers.getClass() == HeadersMultiMap.class) {
16+
((HeadersMultiMap) headers).encode(buf);
1717
} else {
1818
super.encodeHeaders(headers, buf);
1919
}

tests/src/test/java/examples/Performance.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ public class Performance extends Jooby {
4343

4444
public static void main(final String[] args) {
4545
System.setProperty("io.netty.disableHttpHeadersValidation", "true");
46-
runApp(args, new NettyServer(new ServerOptions()), EVENT_LOOP, Performance::new);
46+
runApp(
47+
args,
48+
new NettyServer(new ServerOptions()).setSingleEventLoopGroup(true),
49+
EVENT_LOOP,
50+
Performance::new);
4751
}
4852
}

0 commit comments

Comments
 (0)