На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (66) « Первая ... 50 51 [52] 53 54 ...  65 66  ( Перейти к последнему сообщению )  
> JS и его "недостатки"
    Цитата D_KEY @
    После наших долгих совместных бесед о специфике веба я уже ни в чем не уверен.

    Да просто скажи, что хочется годного, качественного срача, и все :D
      Цитата Бобёр @
      Клиентский веб слабаки пишут, вот и не используется.

      ну спасибо :thanks: сразу видно профессионала фронтэнда издалека. За долю секунды, мановением руки и острым орлиным взором он уменьшит в 10 раз потребеление памяти, одним взглядом организует архитектуру на основе MVVM, движением пальца заставит работать WebSQL с откатом на localStorage и даже не смотря код, найдёт в чём ошибка.

      Блин, с таким подходом я был год назад, когда устраивался фронтэндером, думал мол JQuery, HTML, лажа полная и все дела, а теперь понимаю что весь код на JS, что писал (собственно как и 90% "веб-разработчиков") - был полным быдлокодерством. Сравни, вот такой пример:
      ExpandedWrap disabled
        function some(num){
          return 42 + (parseInt(num) > 0 ? parseInt(num) : 0);
        }
         
        some(23); //65


      и вот такой:
      ExpandedWrap disabled
        var some = function(num){
          return (function(num){
            return 42 + (num|0)||0;
          })(num);
        };
        some(23); //65


      второй:
      1) благодаря замыканию - все данные\переменные после использования уничтожаются
      2) не висит в глобальной области видимости (можно в любой момент взять и удалить)
      3) легко организовать прототипное наследование
      4) легко превратить в объект (ака добавить конструктор)
      5) операция проверки существования значения выполняется в два раза быстрее, благодаря логическому "и"
      6) операция приведения к int выполняется от 20% (хром) до 80% (ие) процентов быстрее, благодаря бинарной "или"



      А можно ещё написать вот так:
      ExpandedWrap disabled
        namespace('MySpace.SomeFoo', function(){
          return this.some = function(num){
            return (function(num){
              return 42 + (num|0)||0;
            })(num);
          };
        }));
         
        MuSpace.SomeFoo.some(23); //65
         
        /* Немного магии */
        this.namespace=function(space,cb){var ns,stack,_i,_len,_ref;stack='';_ref=space.split('.');for(_i=0,_len=_ref.length;_i<_len;_i++){ns=_ref[_i];stack+=ns;eval('if(typeof '+stack+'=="undefined"){'+stack+'=function(){}}');stack+='.';}return cb.apply(eval(space));};


      Добавлено
      Цитата Мяут-Настоящий @
      вот эта конструкция явно невалидна

      Mr. #define уже выехал :D

      Добавлено
      Цитата Астарот @
      В общем не скажу за всю Одессу, но лично я для себя не вижу никакого смысла в использовании кофескрипта - реального функционала не добавляет, за то появляется лишний слой, который хрен знает как работает. И если на вопрос "как ЭТО работает в js" ответить можно моментально, благо база знаний ого-го, то тот же вопрос с кофескриптом может добавить анальной боли.

      ты ошибаешься, ты просто не пробовал, полностью солидарен с оратором, на JS я обратно уже не перейду :D
      ExpandedWrap disabled
        echo = console.log
        class Some
          constructor: (any = 0) ->
            @foo(any)
         
          foo: (someNumber) ->
            echo 42 + someNumber;
         
        new Some

      намного чище, чем:
      ExpandedWrap disabled
        var Some, echo;
         
        echo = console.log;
         
        Some = (function() {
         
          function Some(any) {
            if (any == null) {
              any = 0;
            }
            this.foo(any);
          }
         
          Some.prototype.foo = function(someNumber) {
            return echo(42 + someNumber);
          };
         
          return Some;
         
        })();
         
        new Some;


      Добавлено
      Цитата Астарот @
      Учитывая, что на js можно извратится так, что не сразу понятно как оно работает я не уверен что кофескрипт не кастрирует эти возможности.

      приведи пример ;) я напишу на кофе любое твоё порочное барокко произведение :D
        Цитата Serafim @
        Сравни, вот такой пример:
        ExpandedWrap disabled
          function some(num){
            return 42 + (parseInt(num) > 0 ? parseInt(num) : 0);
          }
           
          some(23); //65


        и вот такой:
        ExpandedWrap disabled
          var some = function(num){
            return (function(num){
              return 42 + (num|0)||0;
            })(num);
          };
          some(23); //65


        второй:
        1) благодаря замыканию - все данные\переменные после использования уничтожаются
        2) не висит в глобальной области видимости (можно в любой момент взять и удалить)
        3) легко организовать прототипное наследование
        4) легко превратить в объект (ака добавить конструктор)
        5) операция проверки существования значения выполняется в два раза быстрее, благодаря логическому "и"
        6) операция приведения к int выполняется от 20% (хром) до 80% (ие) процентов быстрее, благодаря бинарной "или"

        Да это просто жесть какая-то. В любом нормальном языке это делается как в первом примере (только без parseInt) и нет тех минусов, что ты перечислил.

        В общем спасибо, теперь я буду еще больше сторониться JS.
          Цитата Serafim @
          Mr. #define уже выехал :D

          Невалидные литералы даже #define ом не создаются :) Равно как и постфиксный унарный -
          Цитата Serafim @
          А можно ещё написать вот так:

          На моем калькуляторе Citizen можно так:
          ExpandedWrap disabled
            42 + 23

          Могу ли я утверждать, что мой калькулятор лаконичнее JS?

          :)))
          Сообщение отредактировано: Мяут-Настоящий -
            Цитата korvin @
            Да это просто жесть какая-то. В любом нормальном языке это делается как в первом примере (только без parseInt) и нет тех минусов, что ты перечислил.

            как видишь и в js так же делается, только нормальные люди заботятся о клиенте и пишут скрипты, которые будыт и быстрее работать, и меньше памяти сжирать, и быстрее убираться сборщиком

            Добавлено
            Цитата Мяут-Настоящий @
            Невалидные литералы даже #define ом не создаются Равно как и постфиксный унарный -

            ну вот, ты обрущил мой веру во всемогущество препроцессора =(((

            Добавлено
            Цитата Мяут-Настоящий @
            Могу ли я утверждать, что мой калькулятор лаконичнее JS?

            угу :yes:
              А вот если диффур посчитать, то javascript полаконичнее будет
                Цитата korvin @
                и нет тех минусов, что ты перечислил.

                да ты что, ну иди и проверь, что будет быстрее работать в руби и\или питоне:
                ExpandedWrap disabled
                  var = if var.to_int then var else 0

                или
                ExpandedWrap disabled
                  var = var||0;


                тоже самое с преобразованием типов
                  Цитата Serafim @
                  как видишь и в js так же делается, только нормальные люди заботятся о клиенте и пишут скрипты, которые будыт и быстрее работать, и меньше памяти сжирать, и быстрее убираться сборщиком

                  Еще раз для непонятливых: в нормальных языках первый вариант работает также хорошо, как и второй и необходимости в таких костылях нет.

                  Добавлено
                  Цитата Serafim @
                  да ты что, ну иди и проверь, что будет быстрее работать в руби и\или питоне:
                  ExpandedWrap disabled
                    var = if var.to_int then var else 0

                  или
                  ExpandedWrap disabled
                    var = var||0;


                  тоже самое с преобразованием типов

                  Да при чем тут это? Я про этот твой финт с замыканием. И зачем to_int ?
                  Сообщение отредактировано: korvin -
                    Цитата korvin @
                    Да при чем тут это? Я про этот твой финт с замыканием. И зачем to_int ?

                    да пофигу, потому ожидает числовое значение
                      Цитата Serafim @
                      да ты что, ну иди и проверь, что будет быстрее работать в руби и\или питоне:
                      ExpandedWrap disabled
                        var = if var.to_int then var else 0

                      или
                      ExpandedWrap disabled
                        var = var||0;


                      тоже самое с преобразованием типов

                      Я проверю на JS пожалуй:

                      http://liveworkspace.org/code/2UMRHN$0
                      ExpandedWrap disabled
                        var some = function(num) {
                           var n = parseInt(num);
                           return n > 0 ? n + 42 : 42;
                        };
                         
                        function main() {
                           var sum = 0;
                           for (var i = 0; i < 1000000; i++) {
                              sum += some("23");
                           }
                           return sum;
                        }
                         
                        print(main());

                      0.14 s

                      http://liveworkspace.org/code/45hG4h$0
                      ExpandedWrap disabled
                        var some = function(num){
                          return (function(num){
                            return 42 + (num|0)||0;
                          })(num);
                        };
                         
                        function main() {
                           var sum = 0;
                           for (var i = 0; i < 1000000; i++) {
                              sum += some("23");
                           }
                           return sum;
                        }
                         
                        print(main());

                      0.34 s

                      http://liveworkspace.org/code/45hG4h$1
                      ExpandedWrap disabled
                        var some = function(num){
                           return 42 + (num|0)||0;
                        };
                         
                        function main() {
                           var sum = 0;
                           for (var i = 0; i < 1000000; i++) {
                              sum += some("23");
                           }
                           return sum;
                        }
                         
                        print(main());

                      0.18 s

                      Так что ты там говорил про скорость?
                        Цитата korvin @
                        Еще раз для непонятливых: в нормальных языках первый вариант работает также хорошо, как и второй и необходимости в таких костылях нет.

                        это ты про объект головного мозга руби, где всё работает одинаково плохо, так, что ему стоит присудить медаль самого медленного и тормознутого языка мира :D (кстати эта шутка не далека от истины, я пока не видел ни одного языка медленнее руби, даже говнокодистый битрикс быстрее будет чем хеллоуворлд на руби)
                          Цитата Serafim @
                          да пофигу, потому ожидает числовое значение

                          Не, ты расскажи, чем отличается "if var then" от "if var.to_int then"

                          Добавлено
                          Цитата Serafim @
                          это ты про объект головного мозга руби, где всё работает одинаково плохо, так, что ему стоит присудить медаль самого медленного и тормознутого языка мира :D (кстати эта шутка не далека от истины, я пока не видел ни одного языка медленнее руби, даже говнокодистый битрикс быстрее будет чем хеллоуворлд на руби)

                          Какие ваши доказательства? Руби с 1.9 версии не уступает остальным языкам своего уровня.
                            Цитата korvin @
                            Так что ты там говорил про скорость?

                            скорость операторов, но это не значит что всей конструкции ;)

                            Раз:
                            ExpandedWrap disabled
                              function some(num){
                                 return 42 + (num||0);
                              };
                               
                              print(some(23));
                              print(some());

                            http://liveworkspace.org/code/3NhtPk$4
                            execution time: 0.08

                            ExpandedWrap disabled
                              function some(num){
                                 return 42 + (num ? num : 0);
                              };
                               
                              print(some(23));
                              print(some());

                            http://liveworkspace.org/code/3NhtPk$3
                            execution time: 0.09




                            ExpandedWrap disabled
                              function some(num){
                                 return 42 + parseInt(num);
                              };
                               
                              print(some(23));
                              print(some(2.5));

                            http://liveworkspace.org/code/3NhtPk$7
                            execution time: 0.1

                            ExpandedWrap disabled
                              function some(num){
                                 return 42 + num|0;
                              };
                               
                              print(some(23));
                              print(some(2.5));

                            http://liveworkspace.org/code/3NhtPk$8
                            execution time: 0.06


                            Естественно замыкание требует большего времени, но оно не оставляет следов в памяти после использования, т.е. все внутренние значения уничтожаются.

                            Добавлено
                            Цитата korvin @
                            Не, ты расскажи, чем отличается "if var then" от "if var.to_int then"

                            ну вот пример:
                            ExpandedWrap disabled
                              function checkSome(value){
                                 return value ? true : false; // для наглядности
                              };
                               
                              print(checkSome(42)); // true
                              print(checkSome(0.5)); // true
                              print(checkSome('23')); // true
                              print(checkSome('Undefined server error')); // true


                            ExpandedWrap disabled
                              function checkSome(value){
                                 return value|0 ? true : false; // для наглядности
                              };
                               
                              print(checkSome(42)); // true (42 -> 42)
                              print(checkSome(0.5)); // false (0.5 -> 0, как пример 2.5 -> 2, будет true)
                              print(checkSome('23')); // true ('23' -> 23)
                              print(checkSome('Undefined server error')); // false (string -> 0)


                            Добавлено
                            учитывая к примеру, что данные могут приходить с сервера, а произойти там может что угодно - надо однозначно выполнять условия что бы всё по ошибке не накрылось

                            Добавлено
                            Цитата korvin @
                            Руби с 1.9 версии не уступает остальным языкам своего уровня.

                            а в релизе руби 2 - 180 незакрытых критических тасков, ага, знаем.
                            Ну вот примеры сравнения самых популярных серверных языков:
                            http://benchmarksgame.alioth.debian.org/u3...=php&lang2=yarv
                            http://benchmarksgame.alioth.debian.org/u3...hon3&lang2=yarv
                            http://benchmarksgame.alioth.debian.org/u3...perl&lang2=yarv
                            http://benchmarksgame.alioth.debian.org/u3...java&lang2=yarv
                            и особенно JS
                            http://benchmarksgame.alioth.debian.org/u3...g=v8&lang2=yarv


                            как видно из примеров, руби проигрывает по скорости, как минимум в 80-90% случаях (т.е. может победить в 1-2 тестах из 10)

                            Добавлено
                            К слову о JS, в некоторых тестах он приближается к компилируемым языкам ;)
                            http://benchmarksgame.alioth.debian.org/u3....php?test=fasta
                              Цитата Serafim @
                              скорость операторов, но это не значит что всей конструкции ;)

                              Раз:

                              Поэтому у меня там три примера, если ты не заметил.


                              Не-не-не, Дэвид Блейн, результаты разные, а разница в скорости слишком мала.
                              http://liveworkspace.org/code/Atn2P$0
                              http://liveworkspace.org/code/UeUJW$0

                              Добавлено
                              Цитата Serafim @
                              Естественно замыкание требует большего времени, но оно не оставляет следов в памяти после использования, т.е. все внутренние значения уничтожаются.

                              Это JS-опроблемы.
                                Цитата korvin @
                                Не-не-не, Дэвид Блейн, результаты разные, а разница в скорости слишком мала.

                                ну я приводил в пример первый попавшийся результат :-? В любом случае даже такой пример показывает колебание первого примера (твоей ссылки) от 0.7 до 1, во втором же от 0.8 до 1, согласен что разница не так уж и велика

                                Добавлено
                                Цитата korvin @
                                Это JS-опроблемы.

                                это ему не мешает быть в 53 раза быстрее руби (от 1\53 до 1\1) http://benchmarksgame.alioth.debian.org/u3...g=v8&lang2=yarv
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (66) « Первая ... 50 51 [52] 53 54 ...  65 66


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1532 ]   [ 14 queries used ]   [ Generated: 25.08.26, 08:57 GMT ]