Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Что именно проверять, если в этом цикле нет проверок?В моем классе соединять все строки в 1 переменную StringBuilder - это вообще как тогда проверять что-то?
Вообще-то GenCloud не об этом писал, но этот вариант тоже неплох.Вот этот цикл.Код:for (L2EventGroupEngineInstance event: _eventInstances.values()) { replyMSG.append("<tr><td><font color=\"LEVEL\">" + event.getName() + "</font></td>" + "<td><button value=\"Show\" action=\"bypass -h " + getCommand() + "_show " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Edit\" action=\"bypass -h " + getCommand() + "_edit " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Delete\" action=\"bypass -h " + getCommand() + "_del " + event.getName() + " $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); }
replyMSG.append(new StringBuilder("<tr><td><font color=\"LEVEL\">").append(event.getName()).append("</font></td>").append("<td><button value=\"Show\" action=\"bypass -h ").append(getCommand()).append("_show ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Edit\" action=\"bypass -h ").append(getCommand()).append("_edit ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Delete\" action=\"bypass -h ").append(getCommand()).append("_del ").append(event.getName()).append(" $name").append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>").toString());
Да, именно и нужно "склеивание 2 строк" в верхнем блоке с проверками, а в нижнем передано на решение оптимизитора java.Что именно проверять, если в этом цикле нет проверок?
Сплошное склеивание строк.
Можно было бы городить велосипед для 2-3 циклов с 1 экземпляром билдера, но для пары-тройки итераций код будет излишним, а вопрос скорости работы не решит. То есть создание 1 или 2 билдеров - это скажем так "оптимизация" весьма не очень полезная, выигрыш может и будет несколько наносекунд, но я считаю, что лаконичность кода в данном случае лучше.В случае с использованием "+" внутри .append() (как у Вас и сделано) код превратится вот в это :
Код:replyMSG.append(new StringBuilder("<tr><td><font color=\"LEVEL\">").append(event.getName()).append("</font></td>").append("<td><button value=\"Show\" action=\"bypass -h ").append(getCommand()).append("_show ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Edit\" action=\"bypass -h ").append(getCommand()).append("_edit ").append(event.getName()).append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>").append("<td><button value=\"Delete\" action=\"bypass -h ").append(getCommand()).append("_del ").append(event.getName()).append(" $name").append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>").toString());
Т.е. каждую итерацию цикла будет создаваться новый экземпляр StringBuilder.
Зачем это, если Вы уже используете TextBuilder, и можете использовать .append(), вместо использования "+" ?
А если бы здесь было 9000 ивентов, то можно?А назвать этот конкретный цикл прямо говнокодом - это уже ни в какие ворота.
Если речь идет об астрактной работе со строками и их объединением в памяти то реализация на ассемблере с большой вероятностью будет работать быстрее реализации на java.Тогда зачем доказывать, что в плане эффективности и производительности разницы нет? Ещё и о ассемблере речь.
Выродок, ты как бы не выкручивался - факт твоей тупизны доказан и очевиден.Да жди пока рак на горе свиснет, дискаса не будет с хохло выродками.
Ты решил придумать границы, но в данном случае я расширил границы. То есть при максимальной оптимизации лучше взять именно ассемблер. И только потом можно работать с частными случаями, а в частных случаях при 1 итерации лучший вариант, который короче пишется, скорость то одинаковая.Речь идет не о java vs assembler, а о StringBuilder vs "+" in StringBuilder.
Если вопрос теоретический - могу ли я реализовать сборку html ответа на ассемблере в данном классе - думаю что смог бы, но в данном случае отвечу что "нет".А Вы способны реализовать оптимизацию в этом классе на ассемблере?
Говоришь, не важно как используется код?И вообще, что за игры в презумпцию виновности? Почему кто-то должен что-то опровергать и доказывать?
Я просто привожу факт: склеивание строк исключительно с помощью StringBuilder лучше, нежели с использованием "+".
В ответ же слышу рассказы о том, что GenCloud плохой(скорее всего может оно и так, но я не за этим сюда пришел), из контекста все вырвали, да вообще не знаем этот класс нужен. Да вот только все это не важно.
Плохой участок кода в классе делает класс плохим.
В ответ на это слышу рассказы о том, что вырвали неиспользуемый класс.
Ну раз так, то пока он использовался там было все нормально, а как перестал использоваться - конкатенаций настрочили, да?
Говоришь, не важно как используется код?
Плохой участок кода говоришь?
Да только не нашел ты "плохой" участок кода.
Если ты хочешь обгадить другого человека, то да, тебе это нужно доказывать.
Еще есть интересный момент, поскольку это новый нонейм-аккаунт и кода твоего никто не видел то возникает ряд вопросов:
1. Чего это ты именно сейчас возник из ниоткуда жопу рвать за GenCloud - это тебя кто-то надоумил? С чего такая прыть?
2 Может еще и на ЗГ скажешь какой у тебя ник?
Может конечно все это совпадение и я зря такой подозрительный, но бывают разные "ужимки ...".
я конечно не на что не претендую, но по первому пункту, мне показалось что человек явно дал понят что отношения у него ко всем одинаковоеГоворишь, не важно как используется код?
Плохой участок кода говоришь?
Да только не нашел ты "плохой" участок кода.
Если ты хочешь обгадить другого человека, то да, тебе это нужно доказывать.
Еще есть интересный момент, поскольку это новый нонейм-аккаунт и кода твоего никто не видел то возникает ряд вопросов:
1. Чего это ты именно сейчас возник из ниоткуда жопу рвать за GenCloud - это тебя кто-то надоумил? С чего такая прыть?
2 Может еще и на ЗГ скажешь какой у тебя ник?
Может конечно все это совпадение и я зря такой подозрительный, но бывают разные "ужимки ...".
Говоришь, не важно как используется код?
Плохой участок кода говоришь?
Да только не нашел ты "плохой" участок кода.
Если ты хочешь обгадить другого человека, то да, тебе это нужно доказывать.
Еще есть интересный момент, поскольку это новый нонейм-аккаунт и кода твоего никто не видел то возникает ряд вопросов:
1. Чего это ты именно сейчас возник из ниоткуда жопу рвать за GenCloud - это тебя кто-то надоумил? С чего такая прыть?
2 Может еще и на ЗГ скажешь какой у тебя ник?
Может конечно все это совпадение и я зря такой подозрительный, но бывают разные "ужимки ...".
Мало того, когда 1 итерация цикла, получается что явное объявления билдера перед циклом выглядит громоздко и может претендовать на звание "говнокод".
Или ты (имеется ввиду velafrys) прямо сразу исключаешь такое граничное условие?
Дорогой - это мой проект, мои клиенты и мои потребности - за 8 лет я знаю что и сколько примерно будет. Не будет никаких 9000 эвентов. Их даже много придумать сложно, то есть предметная область в данном случае прогнозируема.
Я в данном случае выступаю и заказчиком.
То что код попал в шару - это же не конец света, но это не значить что какой-то выродок может вполне оптимальный для задач класс кидать и кричать - "это говнокод".
Чтобы рассуждать о говнокоде - мало видеть код, еще полезно проверить граничные условия, возможно что код и не требует излишних оптимизаций.
Если бы оптимизация была нужна, я бы это делал сразу.
Первый цикл ~52 секундыЯ не хочу показать, чью сторону я принимаю и принимаю ли я вообще в этом споре, сказать сложно, но раз уж такое дело, то вот Вам задачка.
Есть два куска кода :
Код:String s = ""; for(int i = 0; i < 100000; i++) { s += i; }
Код:StringBuilder sb = new StringBuilder(""); for(int i = 0; i < 100000; i++) { sb.append(i); }
Какой из участков выполнится быстрее? И как время выполнение кода, если количество итераций в цикле увеличится в обоих случаях? Ведь это условная величина.
Не имеет значения, как Вы получите ответ - прогоните этот код, или из своего опыта сможете сказать, важно чтобы Вы поняли, зачем я задаю такой вопрос.
Второй не сжирает, там нечему сжирать.2 вариант быстрей. Но при увеличении итерации сжирает больше ОЗУ
Ага, она не такая уж медленная, она п***ец какая медленная.конкатенция строк не такая уж и медленная процедура сама по себе.
Как раз таки наоборот - сделает конфетку.Добавление StringBulder сделает из кода говнокод в этом конкретном случае. И абсолютно ничего не решит. Это достаточно очевидный факт. Я так понимаю, что ты этого не понимаешь.
Не может, пару десятков или сотен мс.выигрыш может и будет несколько наносекунд,
Кто вам сказал про такой бред? Ни один хороший Java программист вам такого никогда не скажет.Мало того, когда 1 итерация цикла, получается что явное объявления билдера перед циклом выглядит громоздко и может претендовать на звание "говнокод".
Вот этот цикл.Код:for (L2EventGroupEngineInstance event: _eventInstances.values()) { replyMSG.append("<tr><td><font color=\"LEVEL\">" + event.getName() + "</font></td>" + "<td><button value=\"Show\" action=\"bypass -h " + getCommand() + "_show " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Edit\" action=\"bypass -h " + getCommand() + "_edit " + event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Delete\" action=\"bypass -h " + getCommand() + "_del " + event.getName() + " $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); }
НужноВопрос - нужно ли оптимизацию скорости выполнения без конкатенций в проверках выносить ключевым?
НужноВопрос - нужно ли оптимизация строки генерирования странички html выносить ключевым?
НужноВопрос - нужно ли поставить ключевым вопрос ООП и экономии памяти из-за крайне редкого использования?
String a = "a";
String b = "b";
System.out.println((a + b));
0 ldc 16; /* "a" */
2 astore_1; /* a */
/* L7 */
3 ldc 18; /* "b" */
5 astore_2; /* b */
/* L8 */
6 getstatic 20; /* java.lang.System.out */
9 new 26;
12 dup;
13 aload_1; /* a */
14 invokestatic 28; /* java.lang.String java.lang.String.valueOf(java.lang.Object b) */
17 invokespecial 34; /* java.lang.StringBuilder(java.lang.String a) */
20 aload_2; /* b */
21 invokevirtual 37; /* java.lang.StringBuilder append(java.lang.String b) */
24 invokevirtual 41; /* java.lang.String toString() */
27 invokevirtual 45; /* void println(java.lang.String b) */
В scala, как я понимаю, все иначе?как показывает опыт, java и оптимизация вещи не совместимые. Легче плюнуть и пойти бухать