채팅 메세지에 커스텀된 이모지(이미지)를 넣는 기능을 구현하던 중 참고 자료를 찾다가 두가지 방식을 발견했습니다.
{
"message" : "안녕 {:Smile}"
}
{
"type": "text",
"text": "Look at this: $ It's a LINE emoji!",
"emojis": [
{
"index": 14,
"emojiId": "001"
}
]
}
두 방식에서 어떤 방식을 택할 지 고민하기 위하여 테스트를 진행해 보았습니다.
길이가 554의 문자열 제일 뒤에 이모지를 넣는 조건으로 천만번 진행하였습니다.
/**
* 554 길이의 문자열, 천만번 스티커 변환시
* replace 방식 16951 ms
* index 방식 1000ms
*/
public class ChatStickerTest {
@Test
void findStickerSpeedTest_replace() {
// message lenth : 554
String message =
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd:::code";
String target = ":::code";
long beforeTime = System.currentTimeMillis();
for (int i=0; i<10000000; i++) {
message.replace(":::code", "sticker");
}
long afterTime = System.currentTimeMillis();
long secDiffTime = afterTime - beforeTime;
System.out.println("걸린 시간(ms) : " + secDiffTime); // 16951 ms
}
@Test
void findStickerSpeedTest_index() {
// message lenth : 554
String message =
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdaas" +
"aaasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd";
String target = ":::code";
int index = 554;
long beforeTime = System.currentTimeMillis();
for (int i=0; i<10000000; i++) {
final String f = message.substring(0, index);
final String b = message.substring(index, message.length());
final String result = f + target + b;
}
long afterTime = System.currentTimeMillis();
long secDiffTime = afterTime - beforeTime;
System.out.println("걸린 시간(ms) : " + secDiffTime); // 1000ms
}
}
길이가 554의 문자열 제일 뒤에 이모지를 넣는 조건으로 천만번 진행한 텔레그램 방식의 테스트 결과는 16951 ms이 소요되었고 약 17초로 환산됩니다.
line 방식으로 이모지를 넣는 방식의 테스트 결과는 1000ms가 소요되었으며 약 1초로 환산됩니다.
텔레그램에선 속도를 위해 어떻게 더 구현이 되어있는지 확인할 수 없고 테스트 결과로는 차이가 압도적으로 나기 때문에 LINE방식을 사용하는 것이 속도는 우위에 있는것으로 확인됩니다.