Javacript — Не компилируется. JavaScript.


Javacript — Не компилируется. JavaScript.

57 просмотра

2 ответа

2 Репутация автора

Я не пишу в javascript, но мой друг спросил меня, могу ли я помочь ему с одним ката ( https://www.codewars.com/kata/ascii-fun-number-1-x-shape/ ), я дал ему это код, но я понятия не имею, почему это не работает, я совершенно новичок в JavaScript, может кто-нибудь сказать мне, что я сделал не так: D? Сообщение об ошибке: истекло время ожидания завершения кода. Возможно, это связано с высокой нагрузкой на сервер. Это также может быть вызвано неэффективным кодом. Пожалуйста, попробуйте ваш запрос еще раз.

Ответы (2)

1 плюс

2392 Репутация автора

Вы должны добавить, var column чтобы объявить это (то же самое в i и строке) в вашем цикле for , а в вашем if вы должны написать == вместо = ( == чтобы проверить равенство)

плюса

132 Репутация автора

Мне нравится использовать http://jslint.com, чтобы помочь мне проверить мой JavaScript. Но сразу же я могу сказать вам, что вам нужно объявить переменные, которые вы используете для итерации в своих циклах for, а в JavaScript вы используете «==» или «===» для сравнения.

Надеюсь, что это приведет вас на правильный путь.

Проблема доработки скомпилированного js

11.10.2020, 10:51

Переносимость скомпилированного кода
В моей винде тип int занимает 4 байта. Предположим, я скомпилировал некоторую программу из.

Отладка приложения, скомпилированного с флагом -O2
Написал приложение на ноуте, отладил в дебаг режиме на малой синтетической нагрузке, работает.

Изучение структуры скомпилированного кода на C++
Не подскажете, где можно прочитать про преобразования С++ кода в АСМ, к примеру, компилятором GNU .

Размер скомпилированного EXE-файла
Простое Win32bit приложение в XE5 с кнопкой на форме после компиляции имеет размер 19,5 мб, в то.

Просмотр кода скомпилированного файла
Всем добрый день. Слышал о том что можно открывать исходный код программы которые написаны на VB.

Компилятор Babel для JS

Babel преобразует новый синтаксис ES6 в совместимый синтаксис со всеми браузерами ES5. Благодаря компилятору Babel, программисты прямо сейчас могут использовать самый современный JS, не дожидаясь полной поддержи браузеров.

А что касается IE11, то этой поддержки вряд ли когда-нибудь дождемся. Без компиляторов кода было бы сложно пробиваться новым технологиям в веб-разработке.

По этой ссылке можно попробовать скомпилировать JS код, однако для серьёзной разработки необходимо Babel установить на компьютер. У вас уже должен быть установлен node.js. Очень удобно пользоваться редактором кода VS code, из-за встроенного в программу терминала.

Установка Babel

Командная строка инсталлирует Babel и создаст файл package.json. Одного Babel недостаточно, ещё нужны плагины. Целесообразнее установить целый набор плагинов, например для ES2015.

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

babel in.js –out-file out.js

В package.json добавим нашу первую команду, которую выполнит программа Babel.

[1, 2, 3].map((n) => n + 1);

На данном этапе код не будет компилироваться сам по себе, каждый раз, когда мы напишем что-нибудь в файле in.js, надо вводить в терминале команду запуска npm run build.

Программисты народ ленивый, неужели так и будут запускать команду? Нет конечно, ещё одна строчка кода решит эту проблему.

Конфигурация Babel

Настроим Babel таким образом, чтобы изменения в исходном файле отслеживались программой и автоматически генерировался ES5 код, там где мы указали.

Добавим ещё одну строчку в package.json с командой watch. Эта команда самостоятельно отслеживает изменения в исходном JS файле и сразу компилирует код из ES6 в ES5.

«scripts»: <
«build»: «babel project –d –presets 2015»,
«watch»: «babel project –d –presets 2015 -w «,
>,

Вводим команду npm run watch только один раз – это запускает режим наблюдения.

Допустим, мы хотим исходный файл положить в папку src, а компилированный файл в папку dist. Так, будет правильнее. Создадим папку src и положим туда in.js. Естественно, что об этом нужно сообщить Babel.

Эта команда создаст папку dist:

babel src –d dist

Минификация кода

Babel умеет сжимать код:

babel src –d dist –minified

Babel умеет компилировать синтаксис JSX, который используется во фреймворке React. Для этого нужно установить другой набор плагинов.

npm install –save-dev babel-preset-react

Набор с плагинами для React добавим в package.json.

Babel позволяет разработчикам писать современный JS код и не думать о кроссбраузерности.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 3 ):

    Автор, статьи интересные и полезные . НО(!) выучи правила расстановки запятых в предложениях. Кровь из глаз идет когда ты их тыкаешь куда не надо! Если сам не грамотный, то попроси кого-то из знакомых/друзей чтоб они исправляли твои ошибки перед выкладыванием на сайт.

    спасибо что заметили, исправили.

    «Babel преобразует новый синтаксис ES6 в совместимый синтаксис, со всеми браузерами ES5» . запятая там не нужна! дальше не смотрел. смысла в этом нет. Если это уже «исправили», то и все остальное, думаю, аналогично

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    JavaScript не компилируется — javascript

    Я пытаюсь получить следующий алгоритм для работы в течение некоторого времени, я считаю, что проблема в том, что x является слишком большим числом. Есть ли способ обойти это, что позволит компиляции кода и не приведет к сбою браузера?

      1 1
    • 17 июл 2020 2020-07-17 00:38:55
    • algorhythm

    1 ответ

    Это будет сделано, начиная с меньшего коэффициента и останавливаясь, когда он найдет первое:

    Альтернативы JavaScript

    Дата публикации: 2020-09-20

    От автора: в 2020 году у нас есть две альтернативы запуска скриптов в веб-браузере: JavaScript и WebAssembly. Но представьте себе программиста Java, Haskell или даже LISP… где чистая объектно-ориентированная парадигма? А где функциональная? А как насчет знаменитого синтаксиса LISP?

    Конечно, JavaScript предоставляет как объектно-ориентированную, так и функциональную парадигмы, но когда дело доходит до синтаксиса, у некоторых разработчиков просто есть предпочтения. Статическая типизация, сопоставление с образцом, интерфейсы… JavaScript не соответствует потребностям всех (пока!).

    Как мы уже говорили, в 2020 году у нас было только две альтернативы для запуска скриптов в веб-браузере. Но подождите… мы можем ориентироваться на JavaScript при компиляции других языков!

    Предисловие

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

    Вместо этого мы рассмотрим некоторые реальные или определяющие языки программирования, которые вы можете использовать прямо сейчас в производстве или за которыми вы должны следить в будущем. Итак, начнем!

    JavaScript. Быстрый старт

    Изучите основы JavaScript на практическом примере по созданию веб-приложения

    Kotlin

    Kotlin — это молодой и мощный язык программирования, который изначально ориентирован как на виртуальную машину Java, так и на JavaScript. Самое замечательное в Kotlin — это то, что у вас будет доступ ко всем великолепным и проверенным библиотекам Java! Если вы Java-разработчик, вы должны обязательно взглянуть на него!

    Javascript — Скомпилированный язык?

    Я новичок в веб-разработке, и я изучаю JavaScript.

    Из course в Стэнфорде:

    JavaScript является интерпретируемым языком, а не компилируемый язык. Программу, такую ​​как C++ или Java, необходимо скомпилировать до ее запуска. Исходный код передается через программу, называемую компилятором, которая переводит ее в байт-код, который машина понимает и может выполнять. Напротив, JavaScript не имеет этапа компиляции. Вместо этого интерпретатор в браузере считывает код JavaScript, интерпретирует каждую строку и запускает ее. Более современные браузеры используют технологию, известную как компиляция Just-In-Time (JIT), которая компилирует JavaScript для исполняемого байт-кода так же, как и собирается.

    . но, несмотря на то, что JavaScript подпадает под общую категорию «динамический» или «истолковано» языки, это на самом деле составлен язык.

    Давайте просто скажем, для простоты, что любой фрагмент JavaScript должен быть скомпилирован раньше (обычно прямо перед!), Он выполняется. Таким образом, JS-компилятор примет программу var a = 2; и сначала скомпилируйте его, а затем будьте готовы выполнить его, как правило, сразу.

    И из некоторых вопросов при переполнении стека есть несколько идей, таких как: Это зависит от фактической реализации языка.

    Есть ли у вас идеи?

    Создан 03 ноя. 14 2014-11-03 07:20:15 haitran

    Основы языка JavaScript

    1. Основы языка JavaScript *

    1.1. Основные особенности JavaScript *

    1.2. Возможности языка JavaScript *

    1.3. Основные типы данных *

    1.4. Переменные. Приведение типов *

    1.5. SCRIPT-вставки в HTML-документе *

    2. Операторы, выражения, функции *

    2.1. Операторы: арифметических действий, присваивания, инкрементные, декрементные. Условные выражения *

    2.2. Строковые операции *

    2.3. Побитовые операции присваивания *

    2.4. Операторы сравнения *

    2.5. Старшинство операций *

    2.7. Условный оператор if *

    3. Объектная модель *

    3.1. Классы, объекты, поля данных, методы *

    3.2. Работа с полями данных и методами уже существующих объектов *

    3.3. Задание нового класса объектов. Квалификатор this *

    3.4. Операторы for и with для работы с объектами *

    3.5. Правила работы с объектами *

    3.6. Динамическое формирование документа *

    4. Классы и объекты языка JavaScript *

    4.1. Класс Global (задан неявно) *

    4.3. Класс Window *

    4.4. Коллекция фреймов (window.frames) *

    4.5. Класс Document (window.document) *

    4.6. Класс Location (window.location) *

    4.7. Класс Link (document.link) *

    4.8. Класс History *

    4.9. Класс MimeType *

    4.10. Класс Navigator *

    5. Экранные формы *


    5.1. Класс Form (document.forms[i]) *

    5.2. Классы Button, Checkbox, Hidden, Password, Radio, Reset, Submit, Text, Textarea *

    5.3. Класс Checkbox *

    5.6. Классы Text и Password *

    5.7. Класс Textarea *

    5.8. Классы Select и Option *

    6. Классы для программной обработки данных *

    6.1. Класс Object *

    6.1.1. Свойство constructor *

    6.1.2. Свойство prototype *

    6.2. Класс Number *

    6.3. Класс Boolean *

    6.4. Класс String *

    6.6. Класс Function *

    6.7. Класс JavaArray *

    6.8. Класс JavaClass *

    6.9. Класс JavaObject *

    6.10. Класс JavaPasckage *

    6.11. Класс Screen *

    6.11.1. Свойства availHeight и availWidth для Netscape Navigator *

    6.11.2. Свойство bufferDepth для Internet Explorer *

    6.11.3. Свойство colorDepth *

    6.11.4. Свойства height и width *

    6.11.5. Свойство pixelDepth для Netscape Navigator *

    6.11.6. Свойство updateInterval для Internet Explorer *

    JavaScript — это относительно простой объектно-ориентированный язык, предназначенный для создания небольших клиентских и серверных приложений для Internet. Программы, написанные на языке JavaScript, включаются в состав HTML-документов и распространяются вместе с ними. Программы просмотра (браузеры – от англ. browser ) типа Netscape Navigator и Microsoft Internet Explorer распознают встроенные в текст документа программы-вставки ( script- коды) и выполняют их. Таким образом, JavaScript — интерпретируемый язык программирования. Примерами программ на JavaScript могут служить программы, проверяющие введенные пользователем данные или выполняющие какие-то действия при открытии или закрытии документа. Такие программы могут реагировать на действия пользователя — нажатие кнопок «мыши», ввод данных в экранной форме или перемещение «мыши» по странице. Более того, JavaScript-программы могут управлять самим браузером и атрибутами документа.

    Язык JavaScript, будучи схожим по синтаксису с языком Java, за исключением объектной модели, в то же время не обладает такими свойствами, как статические типы данных и строгой типизацией. В JavaScript, в отличие от Java, понятие классов не является основой синтаксических конструкций языка. Такой основой является небольшой набор предопределенных типов данных, поддерживаемых исполняемой системой: числовые, булевские и строковые; функции, которые могут быть как самостоятельными, так и методами объектов (метод в терминологии JavaScript — не что иное, как функция/подпрограмма); объектная модель с большим набором предопределенных объектов со своими свойствами и методами, а также правилами задания в программе пользователя новых объектов.

    Для создания программ на JavaScript не требуется никаких дополнительных средств— необходим лишь браузер, поддерживающий язык JavaScript соответствующей версии и текстовый редактор, позволяющий создавать HTML-документы. Так как программа на JavaScript встраивается непосредственно в текст HTML-документа, вы можете немедленно увидеть результаты своей работы во время просмотра документа браузером и при необходимости внести изменения.

    Цукерберг рекомендует:  Php - Запара с in_array. нужно разобраться!

    С его помощью можно динамически управлять отображением и содержимым HTML-документов. Можно записывать в отображаемый на экран документ произвольный HTML-код в процессе синтаксического анализа загруженного браузером документа. С помощью объекта Document можно генерировать документы «с нуля» в зависимости от предыдущих действий пользователя или каких-либо иных факторов.

    JavaScript позволяет контролировать работу браузера. Например, объект Window поддерживает методы, позволяющие выводить на экран всплывающие диалоговые окна, создавать, открывать и закрывать новые окна браузера, задавать режимы прокрутки и размеры окон и т.д.

    JavaScri pt позволяет взаимодействовать с содержимым документов. Объект Document и содержащиеся в нем объекты позволяют программам читать части HTML- документа и иногда взаимодействовать с ними. Сам текст прочитать невозможно, но можно, например, получить список гипертекстовых ссылок, имеющихся в данном документе. На текущий момент широкие возможности взаимодействия с содержимым документов обеспечивает объект Form и объекты, которые он может содержать: Button, Checkbox, Hidden, Password, Radio, Reset, Select, Submit, Text и Textarea.

    JavaScript обеспечивает взаимодействие с пользователем. Важной особенностью этого языка является реализованная в нем возможность определять обработчики событий — произвольные порции кода, которые выполняются при наступлении конкретных событий (обычно действий пользователя). JavaScript позволяет использовать в качестве обработчиков событий любые новые предварительно заданные функции. Например, можно написать программу, которая выведет в строке состояния специальное сообщение, если пользователь установит указатель «мыши» на гипертекстовую ссылку, или выведет на экран диалоговое окно с запросом на подтверждение выполнения некоторого действия, или осуществит проверку введенного пользователем значения и в случае ошибки ввода выдаст соответствующую диагностику и заставит ввести правильное значение.

    JavaScript дает возможность выполнять произвольные математические вычисления. Кроме того, этот язык имеет развитые средства работы со значениями даты и времени. JavaScript был создан в качестве альтернативы CGI -программам и языку сценариев Perl , а также в качестве дополнения м в ряде случаев альтернативы языку Java.

    Ниже приведена таблица, в которой проводится сравнение Java и JavaScript:

    JavaScript

    Исходный код программ встраивается непосредственно в HTML-документ либо загружается из независимых файлов.

    Исходный код программ не распространяется с приложением -апплетом. Апплеты загружаются с сервера из независимых файлов.

    Программа выкладывается на сервер в виде исходного кода в текстовой форме и в дальнейшем интерпретируется (без предварительной компиляции) браузером после загрузки ее с сервера.

    Программа компилируется в машинно-независимый байтовый код Java-код, после чего выкладыватся на сервер. Браузер (виртуальная Java-машина) исполняет Java-код.

    Объектный . Можно программировать как без использования объектного программирования, так и используя предопределенные встроенные классы. Имеется теоретическая возможность расширения этих классов, но реально она никогда не используется.

    Объектно-ориентированный . Программировать без использования объектного программирования нельзя. Апплеты состоят из классов с возможностью иерархического наследования по традиционной схеме наследования. Использование наследования и полиморфизма – основа программирования в Java.

    В отличие от подавляющего большинства языков объектного программирования в JavaScript структура объектов не задается однозначно устройством класса, а является динамической и может меняться на этапе выполнения программы. Объекты могут динамически получать новые поля и методы или изменять любые параметры старых.

    Структура объектов полностью задается на этапе компиляции их классов.

    Свободная типизация : элементарные типы данных переменных не описываются, при присваивании тип левой части всегда определяется по результату присваивания (т.е. по правой части)

    Строгая типизация : типы данных любых переменных должны быть описаны перед использованием, тип левой части должен совпадать с типом правой (за редкими исключениями, когда работает автоматическое приведение типа результата к типу левой части)

    Динамическое связывание кода с объектами : ссылки на объекты проверяются во время выполнения программы.

    Статическое связывание кода с объектами : ссылки на объекты должны существовать на момент компиляции

    Значения переменных, функций и выражений бывают следующих типов:

    в десятичной системе единиц: 0, 29, 70, -147 и т.п.;

    в 16-ричной: 0х70 или 0х70, 0 X FA7D0 и т.п.;

    в 8-ричной: 070, 0710 ( Внимание. В едущий ноль воспринимается как символ 8-ричного числа ) и т.п.

    0.0, -2.9, 0.7E1, 14.7e-2, 1e+308 (максимальное вещественное число), 1.001e-305 (минимальное по модулю вещественное число, отличное от нуля) и т.п.;

  • логические (булевские): true и false;
  • строковые: » Привет, все! «, » ОК «, ‘ Слово «Привет!» с кавычками внутри строки’, «Другой вариант ‘Привет’ с кавычками внутри строки» и т.п. (допускаются оба типа кавычек и многократное использование таких пар внутри друг друга). Специальные символы обозначаются комбинацией символа \ и буквы (или последовательности цифр), например: \b — «забой», \n — перевод на новую строку, \» — » кавычка «.
  • null — специальное значение для обозначения “пустого множества” значений.
  • Глобальные переменные можно вводить в любом месте текста программы путем простого присваивания значения . Но необходимо, чтобы переменная была определена до того момента, когда вызывается при исполнении:

    и т.п. При этом тип переменной приводится к типу присваиваемого значения, причем в последующем этой же переменной можно присвоить значение другого типа:

    myVariable=» Теперь это текстовая переменная «

    При задании переменной использование зарезервированного слова var не обязательно, но желательно, т.к. помогает при использовании отладчика фирмы Microsoft и делает текст программы более структурированным. На деле вместо переменной в текущем объекте window создается новое поле с таким именем. В функциях при задании локальных переменных использование var обязательно (иначе будет создана глобальная переменная).

    При наличии численных и строковых значений в одном выражении идет приведение к строковому типу. Значением переменной

    a=7+» раз отмерь,»+1+»раз присвой «

    будет строка «7 раз отмерь, 1 раз присвой «.

    Стоит отметить, что существуют также функции parseFloat и parseInt , которые осуществляют преобразование из строкового значения в численное.

    Идентификатором переменной может быть последовательность символов из набора букв от «A» до «Z», от «a» до «z», цифр от «0» до «9», а также символ подчеркивания «_». При этом первым символом имени не может быть цифра, а заглавные и строчные буквы отличаются (т. е. имена MyVariable и myvariable относятся к разным переменным).

    Кроме глобальных переменных в функции или другом блоке кода можно определить локальные, для них областью видимости будет только функция (без кода), в которой они определены:

    Для встраивания программы на JavaScript в HTML — файл используются теги . При этом результат работы можно увидеть сразу и при необходимости внести изменения.

    Эффективный JavaScript (часть 1 — ядро языка)

    Статья с dev.opera.com, достаточно старая (ноябрь 2006), но для начала вполне подходящая.

    Оригинал: http://dev.opera.com/articles/view/efficient-javascript/
    Автор: Mark ‘Tarquin’ Wilton-Jones
    Перевод: Григорьев Олег
    Тип перевода: Весьма вольный
    Лицензия: Creative Commons Attribution, Non Commercial — Share Alike 2.5 license

    Раньше веб-страницы не содержали слишком много сценариев, по крайней мере, не на столько много, чтобы это могло сказаться на скорости работы страницы. Однако в последнее время веб-страницы всё больше становятся похожи на настоящие приложения, и скорость работы всё больше зависит от качества сценариев. С тем, как всё больше и больше приложений разрабатываются с использованием веб-технологий, улучшение сценариев становится всё более и более важным.

    Обычное приложение в большинстве случаев собирается компилятором из исходных кодов. Компилятор при этом имеет достаточно времени для того, чтобы как можно лучше оптимизировать его работу. Веб-приложение такой роскоши лишено. Так как оно должно работать во множестве различных браузеров, на различных платформах с разными архитектурами, оно не может быть изначально скомпилировано. Браузеру приходится интерпретировать и компилировать код при каждой загрузке. И всё это должно работать так же гладко и быстро, как и обычное приложение. Причём работать на большом количестве разнообразных устройств, от настольного компьютера до мобильного телефона.

    Браузеры достаточно хорошо справляются с этими задачами, а Опера имеет один из самых быстрых скриптовых движков (статья 2006 года на сайте Оперы). Однако и у возможностей браузеров есть свои пределы и здесь разработчик должен им помочь. Часто увеличение скорости до нужного значения может быть достигнуто, такими простыми вещами, как замена цикла одного типа на другой, создание одного комбинированного стиля взамен трёх, или подключение только тех сценариев, которые будут действительно выполняться.

    В этой статье описано некоторое количество простых приёмов, которые могут улучшить работу ваших веб-приложений. Приёмы эти относятся к трём областям — ядру языка (стандарта ECMAScript), взаимодействию с DOM и загрузке документа.

    Ядро языка (ECMAScript)

    Избегайте использования eval и конструктора Function

    При каждом вызове eval или Function , производится разбор строки с исходным кодом. Движок JS должен при этом интерпретировать исходный код и перевести его в исполняемый. Это достаточно трудоёмкая операция — часто в сотни раз более медленная, чем простой вызов функции.

    Функция eval особенно плоха, поскольку содержание интерпретируемой строки не известно заранее. Так как код из неё выполняется в рамках кода из которого вызван, это означает, что компилятор не может оптимизировать окружающий контекст. Браузеру приходится откладывать интерпретацию большей части окружающего кода до момента выполнения. Это добавляет значительное количество времени к работе.

    Конструктор Function не настолько плох, как eval , так как не влияет на окружающий код, но всё равно он весьма медлителен.

    Функция eval не только вредна — в большинстве случаев она просто не нужена. Часто она используется, потому что какая-то информация представлена в виде строки и, считается, что eval единственный способ использовать эту информацию. Следующий пример показывает распространённую ошибку:

    А этот код делает тоже самое, но без использования eval :

    Код, не использующий eval, выполняется приблизительно на 95% быстрее в Opera 9, Firefox и Internet Explorer, и приблизительно на 85% быстрее в Safari (заметьте, что при этом не учитывается время на непосредственный вызов функции).

    Если вам нужна функция, используйте function

    Следующий пример показывает обычное использование конструктора функции:

    function addMethod(oObject,oProperty,oFunctionCode) < oObject[oProperty] = new Function(oFunctionCode); >addMethod(myObject,’rotateBy90′,’this.angle=(this.angle+90)%360′); addMethod(myObject,’rotateBy60′,’this.angle=(this.angle+60)%360′);

    А следующий делает тоже самое, только без Function . В нём используется создание анонимных функций, на которые можно ссылаться, как на обычные объекты:

    Избегайте использования with

    Хотя with часто может быть удобен, он может плохо влиять на скорость. With заставляет движок каждый раз создавать дополнительный контекст, содержащий поля используемой переменной. Само это приводит к незначительным замедлениям. Одако, так как структура переменной не известна во время компиляции, компилятор не может нормально оптимизировать код.

    Не менее удобный, но более эффективный подход состоит в том, чтобы ссылаться на нужный объект, используя обычную переменную, и из неё получать доступ к полям объекта.

    Вот так будет более эффективно:

    var testObject = test.information.settings.files; testObject.primary = ‘names’; testObject.secondary = ‘roles’; testObject.tertiary = ‘references’;

    Не используйте try-catch-finally внутри критических функций

    Конструкция try-catch-finally является довольно уникальной. В отличии от других, она создаёт переменную в текущем контексте во время выполнения. Это происходит при каждом выполнении раздела catch — объект исключения записывается в переменную. Эта переменная недоступна вне раздела catch . Она создаётся в начале выполнения catch и уничтожается при его завершении.

    Поскольку эта переменная создаётся и уничтожается во время выполнения, и представляет собой специальный случай языка, некоторые браузеры обращаются с ней не слишком эффективно. Перехват исключений внутри критических циклов может вызвать большие проблемы в работе.

    Обработка исключений нужно, по возможности, в более высокие уровни кода, где она будет производиться не так часто. Или вообще избегать её, проверяя возможность нужно действия перед его выполнением. В следующем примере внутри цикла могут быть выброшены несколько исключений, если некоторые свойства объекта не существуют:

    var oProperties = [‘first’,’second’,’third’. ‘nth’], i; for( i = 0; i try-catch-finally может быть перенесена так, чтобы окружить цикл. Хотя это несколько изменит семантику — после исключения цикл будет остановлен, хотя выполнения сценария продолжится.

    var oProperties = [‘first’,’second’,’third’. ‘nth’], i; for( i = 0; i eval и with

    Так как эти конструкции могут очень сильно повлиять на работу, их использование должно быть сведено к минимуму. Но всё же есть места, где они могут действительно понадобиться. Если какую-либо функцию вызывают часто, или какой-либо цикл выполняется много раз, то нужно стараться избегать этих конструкций внутри них. Они лучше подходят для кода, который выполняется один или несколько раз, а не для критических участков.

    Везде, где это возможно, изолируйте их от другого кода так, чтобы они не затронули его работу. Например, располагайте их в функциях верхнего уровня или вызывайте их однажды и сохраняйте результат, с тем, чтобы в следующий раз использовать уже его, не запуская повторно интерпретацию.

    Хотя это не столь важно, но конструкция try-catch-finally может иметь своё нехорошее воздействие в некоторых браузерах, включая Оперу, поэтому лучше изолировать и её.

    Избегайте глобальных переменных

    Многие создают глобальные переменные, просто потому что это легко. Однако, по некоторым причинам, глобальные переменные могут снизить скорость работы сценариев.

    Во-первых, при использовании глобальной переменной внутри функции, движок должен пройти в поиске переменной по всей цепочке вызванных функций, пока не достигнет глобальной области. Локальные переменные будут найдены значительно быстрее.

    Цукерберг рекомендует:  Easy mode Простые инструменты для несложных приложений

    Глобальные переменные существуют на протяжении всего времени жизни сценария. Локальные же переменные уничтожаются при завершении функции. Память, занимаемая ими, может быть освобождена сборщиком мусора.

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

    Функции также обычно создаются в глобальной области. Это означает, что функции, которые вызывают другие функции, тратят лишнее время на то, чтобы дойти до глобального контекста в поисках нужной функции.

    Вот простой пример, где i и s являются глобальными переменными, а функция использует их:

    Любые свойства и методы определены только для объекта String а не для простого значения (примитива). Когда вы ссылаетесь на свойство или метод примитивной строки, механизм ECMAScript должен неявно создать новый объект String с тем же самым значением, после чего вызвать нужный метод. Этот объект используется только один раз и при следующем запросе будет создан снова.

    При выполнении следующего примера будет создан 21 объект String: для каждого раза, когда вычисляется размер строки и для каждого использования charAt():

    var s = ‘0123456789’; for( var i = 0; i for-in в критических функциях

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

    Очень часто, сценарий уже непосредственно знает, какие свойства должны быть перебраны. Во многих случаях может быть использован простой for . Особенно если перебираемые свойства именуются последовательными числами, например, array или объект, который имеет свойства для представления себя массивом (как DOM-объект NodeList).

    Пример некорректного использования for-in :

    var oSum = 0; for( var i in oArray )

    for здесь был бы более к месту:

    var oSum = 0; var oLength = oArray.length; for( var i = 0; i + не будет ждать результата, который должен быть записан в переменную. Вместо этого он создаёт новую строку в памяти, и указывает на неё, как на результат.

    Этот код первым делом создаёт временную строку в памяти, связывает значение в «xy», затем складывает с текущим значением a и в конце концов связывает получившееся значение с переменной a . Следующий же код использует две отдельных команды, но при этом не используется временная переменная. Получившийся код примерно на 20% быстрее во многих браузерах и потенциально требует меньше памяти за счёт отсутствия временной строки.

    Примитивные операции могут быть быстрее вызовов функций

    Хотя это не существенно в большинстве ситуаций, в критических участках замена вызова функций на эквивалентные операции может принести выигрыш. Например, метод push() медленнее, чем просто добавление элемента в конец массива с нужным индексом. Или простые математические операторы часто лучше чем вызов методов объекта Math.

    var min = Math.min(a,b); A.push(v);

    Следующие операции будут быстрее:

    var min = a setTimeout() и setInterval()

    Данные два метода похожи на eval . Если передана строка, то после указанной задержки, она так же как и в eval будет разобрана, со всеми связанными с этим издержками.


    Однако, эти методы могут принимать вместо строки функцию. Эта функция так же будет выполнена с задержкой, но будет интерпретирована и оптимизирована ещё на этапе компиляции, что улучшит работу. Типичные использования строк в качестве аргументов:

    В первом случае функцию можно указать непосредственно. Во втором, код может быть обёрнут в анонимную функцию:

    Отметьте то, что время ожидания не может соблюдаться точно во всех случаях. Вообще, браузеры займут немного больше, чем от них требовалось. Некоторые могут компенсировать это с setInterval, запуская в следующий раз функцию немного раньше. Другие просто будут пытаться добиваться правильного времени каждый раз. На подобные задержки влияет множество факторов – скорость процессора, параллельные процессы, загрузка JavaScript. Большинство браузеров неспособно выдержать задержку в 0ms, а минимальная задержка может быть от 10 до 100 ms.

    22 комментария »

    В целом полезно, но местами таки сильно напоминает случай с «что сильнее print или echo» :)

    Лучше про прототипы расскажи :)

    А что с прототипами?

    Рассказать насколько они охеренны и как устроено все…

    >>>на этапе компиляции
    яваскрипт не компилируется а транслируется в байткод

    >>>яваскрипт не компилируется а транслируется в байткод
    «переводит» в байткод :) Возможно, лучше было употребить на его месте «трансляция». Хотя в источнике «compilation».

    >>>в яваскрипте нет паралельных процессов
    Имеются ввиду параллельные процессы в операционке.

    если бы была компиляция, компилятор выдавал ошибки еще до исполнения

    хотя может опера и компелирует

    Компилятор (транслятор) выдаст ошибку до исполнения и первый алерт не сработает, хотя ошибка после него.

    это ошибка синтаксиса, а не логики.
    ты ведь можешь создать несуществующий класс
    alert(1);
    function x () <
    return new NonExistingClass();
    >
    alert(2);

    Да, но это не может быть ошибкой в JS до исполнения.

    правильно, а компилятор бы ругался

    Ругаться нужно не в зависимости от того компилятор это или транслятор, а в зависимости от языка. В JS это не ошибка до момента исполнения, поэтому и ругаться не следует.

    Хотя если понимать «компилятор» в узком смысле — транслятор в машинные коды, то да, в JS это не компилятор, а транслятор в байт-код + интерпретатор оного.

    >>если бы была компиляция, компилятор выдавал ошибки еще до исполнения

    А типа Java SE транслятор в байт код не выдает ошибки до исполнения? Зависит от языка однако :P

    dallone, я немного работал с Java SE на платформе андроид, ругается при компиляции.

    Олег, Louieze — спаммер

    Ясно, только как оно просочилось?

    Я не знаю как ты защищаешься :)
    Раньше у меня были такие посты, но теперь их нет.

    Что бы там ни писали «умные» авторы этой дурацкой оперы (уже по тому, что они назвали транслятор компилятором, видно, что они очень много знают в программировании; собственно, это видно по их продукту, хотя кто знает, может они реально компилятор в оперу встроили xDDD ), а я провел собственные тесты на разных браузах с повтором в 100000 раз. Информация по соответствующим пунктам:
    1) Разбор строки с кодом это не такая и трудоёмкая задача.
    Для FF эвал замедляет скрипт в 4-8 раз.
    Opera — 5-9 раз.
    IE — 8-12 раз.
    Надо сказать, что все зависит и от длины запускаемой строки. Каждый новый оператор незначительно замедляет разбор.
    Где мои обещанные сотни раз?
    2) Результаты оказались неоднозначными.
    Для нормальных браузеров всё произошло, как описано выше. А для IE всё оказалось с точностью до наоборот.
    Отличия составили 10-20%.
    И как бы то ни было, оперовцы всё равно предлагают говнячий способ доступа к свойствам.
    Мой способ состоит в задействовании дополнительной переменной:
    var temp=document.body.firstchild.firstChild.nextSibling.style;
    temp.w > temp.height=»100px»;
    …, чем каждый раз заново прописывать путь к объекту, это сокращает и время выполнения, и сам код.
    И т.п. Этот способ оказылся действительно быстрее, чем заявленный оперовцами;
    3) Тут оперовцы правы и замедление составляет в зависимости от браузера 2-55%;
    5) 25-50%;
    6) Тут оперовцы облажались со своим продуктом, потому что это ускоряет только его, а все остальные браузы замедляет. Ускорение на 20%. Замедление 2-5 раз.
    8) Тоже лажа написана. Если использовать +=, то этот способ медленне примерно на 20%. И даже в опере.
    9) Оперовцы правы. С фокус с пушем даёт выигрыш на 20%.
    10) Оперовцы правы. В данном случае эвал может дать очень значительный проигрыш. Лень было протестить =).

    Не стесняйтесь критиковать (или еще жестче) меня и/или оперовцев ;)

    *тфу мля: интерпретатор компилятором
    xDDD

    «Транслятор» и «компилятор» достаточно расплывчатые и пересекающиеся понятия, особенно в английском. Так же я придерживаюсь мнения, что в программировании эти перцы немного рубят, вне зависимости от моего отношения к их браузеру.

    >1) Разбор строки с кодом это не такая и трудоёмкая задача.

    Разница даже в ваши 10 раз, имхо более трудоёмка.
    Там же не написано, что нефег вообще eval() использовать, написано, что обычно если подумать, находятся более изящные способы и без него.

    >И как бы то ни было, оперовцы всё равно предлагают говнячий способ доступа к свойствам.
    >Мой способ состоит в задействовании дополнительной переменной:

    Э-э… приглядитесь, они предлагают тоже самое

    Что-то я дальше запутался в нумерации пунктов :)

    На эту тему есть интересная книга «JavaScript оптимизация производительности» Николас Закас

    Альтернативы JavaScript

    В настоящий момент единственным поддерживаемым языком и стандартом де-факто для обработки дерева DOM в браузере является JavaScript. Похоже, что у него есть глубокие проблемы с дизайном, которые делают его минным полем ошибок и дыр в безопасности для новичков.

    Знаете ли вы о какой-либо существующей или планируемой инициативе по внедрению лучшего (переработанного) языка любого вида (не только javascript) для обработки дерева DOM и HTTP-запросов в браузерах следующего поколения? Если да, то какова дорожная карта для ее интеграции, скажем, в Firefox, и если нет, то по каким причинам (помимо интероперабельности) должен быть JavaScript только поддерживаемый язык на платформе браузера?

    Я уже использовал jQuery, и я также читал «javascript: хорошие части». Действительно, предложения хороши, но я не могу понять: почему только javascript? На стороне сервера (ваша-любимая-os-платформа) мы можем манипулировать деревом DOM с каждым языком, даже fortran. Почему клиентская сторона (платформа браузера) поддерживает только javascript?

    18 ответов

    34 Решение Keith [2009-05-31 01:10:00]

    Проблема с javascript — это не сам язык — это отличный прототип и динамический язык. Если вы работаете на фоне OO, есть немного кривой обучения, но это не ошибка языка.

    Большинство людей считают, что Javascript похож на Java, потому что он имеет похожий синтаксис и аналогичное имя, но на самом деле это намного больше похоже на lisp. Это действительно очень хорошо подходит для манипуляций с DOM.

    Реальная проблема заключается в том, что он скомпилирован браузером, а это означает, что он работает совсем по-другому, в зависимости от клиента.

    В зависимости от браузера не только фактическая DOM, но и огромная разница в производительности и макете.

    Изменить следующие пояснения

    Предположим, что поддерживается несколько интерпретированных языков — у вас все еще есть те же проблемы. Различные браузеры по-прежнему будут ошибочными и имеют разные DOM.

    Кроме того, вам потребуется иметь встроенный в браузер интерпретатор или каким-то образом установленным в качестве подключаемого модуля (который вы могли бы проверить, прежде чем подавать страницу) для каждого языка. Это потребовало времени для согласования Javascript.

    Вы не можете использовать скомпилированные языки таким же образом — тогда вы вводите исполняемый файл, который не может быть легко изучен для того, что он делает. Многие пользователи предпочли бы не запускать его.

    ОК, так что о какой-то песочнице для скомпилированного кода? Звучит как Java-апплеты для меня. Или ActionScript в Flash. Или С# в Silverlight.

    Как насчет какого-то стандарта IL? Это имеет больший потенциал. Разработайте на любом языке, который вы хотите, а затем скомпилируйте его в IL, который браузер затем JITs.

    Кроме того, Javascript — это уже уже тот ИЛ — просто посмотрите GWT. Он позволяет писать программы на Java, но распространять их как HTML и JS.

    Изменить следующие последующие разъяснения

    Javascript не является, или, вернее, не единственным, поддерживаемым браузерами: обратно в темные века Internet Explorer вы можете выбирать между Javascript или VBScript для запуска в IE. Технически IE даже не запускал Javascript — он выполнял JScript (в основном, чтобы избежать необходимости платить Sun за слово java, Oracle по-прежнему владеет имя Javascript).

    Проблема заключалась в том, что VBScript был патентован для Microsoft, но также, что это было не очень хорошо. В то время как Javascript добавлял функциональные возможности и получал инструменты отладки высшего уровня в других браузерах (например, FireBug), VBScript оставался только для IE и в значительной степени не отлаживался (dev инструменты в IE4/5/6 не существовали). Тем временем VBScript также расширился, превратившись в довольно мощный скриптовый инструмент в ОС, но ни одна из этих функций не была доступна в браузере (и когда они стали серьезными дырами в безопасности).

    Есть еще некоторые внутренние внутренние приложения, которые используют VBScript (и некоторые полагаются на эти дыры в безопасности), и они все еще работают с IE7 (они только остановили IE6, потому что MS окончательно отключили его).

    Получение Javascript к текущему состоянию было кошмаром и заняло 20 лет. Он по-прежнему не имеет последовательной поддержки, с языковыми функциями (указанными в 1999 году), которые все еще отсутствуют в некоторых браузерах, и требуется большое количество прокладок.

    Добавление альтернативного языка для интерпретации в браузерах сталкивается с двумя основными проблемами:

    Получение всех поставщиков браузеров для внедрения нового языкового стандарта — то, что им еще не удалось для Javascript через 20 лет.

    Цукерберг рекомендует:  Шаблон планировщика

    Второй язык потенциально разбавляет поддерживаемую вами поддержку, позволяя (например) IE иметь поддержку второго курса Javascript, но отличный VBScript (снова). Я действительно не хочу писать код на разных языках для разных браузеров.

    Следует отметить, что Javascript не «закончен» — он все еще развивается, чтобы стать лучше в новых браузерах. последняя версия на многие годы опережает реализацию браузеров, и они работают над следующим.

    Скомпилировать Javascript

    В настоящее время использование языка, который компилируется в Javascript, кажется единственным реалистичным способом охватить все платформы при написании более умного кода, и это, вероятно, останется в течение длительного времени. С любым новым предложением всегда будет какая-то причина, по которой один или несколько поставщиков не спешат отправить его.

    (Но я действительно не думаю, что это проблема. Javascript теперь хорошо оптимизирован. Машинный код также небезопасен, если он написан вручную, но отлично работает как цель компиляции и язык исполнения.)

    Множество опций

    Существует постоянно растущий пул языков, которые компилируются в Javascript. Подробный список можно найти здесь:

    Обращает на себя внимание

    Я упомянул несколько, я думаю, примечателен (хотя, без сомнения, пренебрегая некоторыми драгоценными камнями, о которых я не знаю):

    Spider появился в 2020 году. Он утверждает, что использует лучшие идеи Go, Swift, Python, С# и CoffeeScript. Он не является типичным, но имеет некоторые незначительные функции безопасности.

    Elm: Haskell может быть самым умным языком всех, а Elm — вариант Haskell для Javascript. Он отличается высокой степенью точности и краткости и предлагает Функциональное реактивное программирование как опрятную альтернативу реактивным шаблонам или спагетти MVC. Но это может быть довольно сильным шоком для процедурных программистов.

    Google Go нацелен на краткость, простоту и безопасность. Код Go может быть скомпилирован в Javascript GopherJS.

    Dart была позже попытка Google заменить Javascript. Он предлагает интерфейсы и абстрактные классы с помощью синтаксиса типа C/Java с опцией ввода.

    Haxe — это как Flash ActionScript, но он может настроить несколько языков, чтобы ваш код мог быть повторно использован в программах Java, C, Flash, PHP и Javascript. Он предлагает типы и динамические объекты.

    Opalang добавляет синтаксический сахар к Javascript для обеспечения прямого доступа к базе данных, интеллектуальных продолжений, типа — проверка и помощь при разграничении клиент/сервер. (Привязано к NodeJS и MongoDB.)

    GorillaScript, «язык компиляции для JavaScript, предназначенный для расширения прав пользователя пытаясь предотвратить некоторые распространенные ошибки». сродни Coffeescript, но более всеобъемлющей, предоставляя кучу дополнительных функций для повышения безопасности и сокращения повторяющихся шаблонов шаблонов.

    LiteScript находится где-то между Coffeescript и GorillaScript. Он предлагает синтаксис async/yield для «inline» обратных вызовов и проверку на наличие опечаток.

    Microsoft TypeScript является небольшим надмножеством Javascript, который позволяет помещать ограничения типа на аргументы функции, которые могут несколько ошибок. Аналогично BetterJS позволяет применять ограничения, но в чистом Javascript либо путем добавления дополнительных вызовов, либо путем указания типов в комментариях JSDoc. И теперь Facebook предложил Flow, который дополнительно выполняет вывод типа.

    LiveScript является побочным эффектом от Coffeescript, который был популярен по его краткости, но не выглядит очень читаемым для меня. Наверное, не лучший для команд.

    Как выбрать?

    Если выбрать альтернативный язык, для необходимо учитывать факторы:

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

    Имеет ли язык слишком мало функций (код по-прежнему будет заполнен шаблоном) или слишком много функций (для освоения потребуется много времени, и до тех пор какой-то действительный код может быть не поддающимся анализу)?

    Есть ли у вас функции, необходимые для вашего проекта? (Требуется ли для вашего проекта проверка типов и интерфейсы? Требуется ли им умное продолжение, чтобы избежать вложенного аддонов обратного вызова? Существует ли много реактивности? Возможно, вам нужно ориентироваться на другие среды в будущем?)

    Будущее.

    Джефф Уокер написал серию размышлений в сообщениях в блоге о «проблеме Javascript», в том числе о том, почему он не считает ни TypeScript, а не Dart и Coffeescript предлагают адекватные решения. Он предлагает некоторые желательные функции для улучшенного языка в заключение.

    должен быть JavaScript только поддерживаемый язык на платформе браузера?

    Да и нет. Существует альтернатива, которую Dart предоставляет Google, которая компилируется на JavaScript и точно так же, как jQuery, она пытается сделать манипуляции с DOM немного легче. Это может быть интересно экспериментировать, проверить это.

    13 aleemb [2009-05-31 01:10:00]

    Верно, что Javascript был в какой-то момент печально с трудом справиться, но сообщество веб-разработчиков прошло долгий путь. Вместо этого я бы посоветовал вам взглянуть на jQuery. Это легко и абстрагирует все различные проблемы.

    И действительно нет альтернатив, которые работают по всем направлениям. Flash приходит на ум, но это тоже ECMA script, и это, вероятно, больше всего убивает для большинства вещей.

    6 sj2009 [2009-05-31 01:14:00]

    Doug Crockford поговорил с Google, в котором подробно описываются плохие и хорошие части JavaScript и его будущее. С 1999 года он практически не изменился — это можно сказать, что это хорошо (почти все браузеры могут запускать один и тот же код, пока вы знаете об их ограничениях), а Дуг показывает, где хорошие части были в основном недоразумениями, которые оказываются очень сильными.

    Для DOM-манипуляции рассмотрите JQuery как клиентскую библиотеку, которая заменяет большую часть ужасного DOM API операциями, которые являются болью для написания довольно элегантных битов кода, которые легче писать.

    В краткосрочной перспективе я бы использовал такие вещи, как jQuery, чтобы скрыть несовместимость браузера. Долгосрочные технологии, такие как Silverlight или Adobe AIR, могут сделать это совсем другим минным полем (но все же минным полем) в будущем.

    Если вы думаете, что у JavaScript есть глубокие проблемы, я рекомендую книгу Дуга Крокфорда, JavaScript: Хорошие части. (Или Google для «JavaScript Крокерсона», чтобы найти несколько видео-презентаций, которые он сделал.) Крокфорд набросает безопасное подмножество и множество практик и специально перечисляет некоторые части языка, чтобы этого избежать.

    Я не знаю о планах заменить JavaScript как фактическое средство манипулирования DOM. Поэтому лучше научитесь использовать его безопасно и хорошо.

    В терминах клиентской стороны Javascript — это единственный способ манипулировать DOM. С точки зрения серверной части существует множество способов.

    3 Alcides [2009-05-31 04:25:00]

    Как уже говорилось, у вас есть Flash (ActionScript, который является производным языком из Javascript) и Silverlight/Moonlight (IronPython, IronRuby, JScript, VBScript, С#), которые могут запускаться в браузере через плагины (первый из них более вездесущий).

    Есть и другая альтернатива, если вам нравится Ruby: HotRuby, это рубиновая реализация в javascript, которая будет запущена в браузере. Он еще не очень зрелый, но вы можете взглянуть на него.

    Internet Explorer поддерживает подключаемые языки сценариев, хотя только один, надежно включенный в IE, помимо JScript — это VBScript.

    Насколько я видел, в браузере, похоже, существует общий вид смещения по отношению к динамическим языкам, и JavaScript, похоже, достаточно хорошо заполняет эту потребность, чтобы сетевые эффекты сделали любой другой язык незанятым. Язык действительно достаточно мощный, хотя его реализация в браузерах оставляет желать лучшего.

    Если вы хотите ограничить своих клиентов/посетителей конкретными браузерами и, возможно, захотите потребовать их установки плагина, вы можете посмотреть MS Silverlight — читаемый обзор находится на wikipedia. С Silverlight 2 вы можете запускать клиентский код, написанный на С#, IronPython, IronRuby, VB.NET и т.д.; бесплатный Moonlight клон Silverlight, из проекта Mono, promises, чтобы принести ту же функциональность Linux.

    На практике большинство разработчиков веб-приложений и сайтов предпочитают охватить более широкую аудиторию, чем Silverlight (и в конечном итоге Moonlight) в настоящее время могут доставлять, что означает использование Javascript или, возможно, Flash (который использует похожий язык программирования, ActionScript).

    Таким образом, получение существенного ума, принятие и тяга к чему-либо еще доказывают, что это будет тяжелая битва даже для Microsoft с ее большими группами инженеров и маркетинговых бюджетов и проекта со свободным программным обеспечением на стороне (чтобы, возможно, ослабить опасения о запатентованной блокировке), что может помочь объяснить, почему очень мало интереса, например со стороны Фонда Mozilla, в стремлении к достижению такой цели. «Помимо интероперабельности», вы говорите: «но ясно, что проблема интероперабельности — это большой трюк здесь, учитывая то, что мы наблюдаем за прогрессом Silverlight.

    Одна вещь, о которой я не упоминал (о, я вижу, что Алсид упоминал HotRuby, когда я писал, и Носредна упомянул GWT и Script #) и хотел бы выбросить там есть ряд реализаций [insert language] -on-JavaScript (например, переводчики, которые позволяют вам конвертировать Ruby, Python, С#, Java, Obj-J/Cappuccino [аналогично Obj-C/ Cocoa] или Processing [для Canvas] для JavaScript на клиенте или перед развертыванием [и некоторые из них также содержат различные библиотеки абстракции]). Разумеется, накладные расходы на производительность, если они переводится на клиент, но если вы более комфортно относитесь к другому языку, это даст вам некоторую гибкость.

    Лично, однако, я рекомендую научиться любить JavaScript. Это отличный, мощный язык и довольно элегантный, как только вы это узнаете. Я столкнулся с противоположной дилеммой, набирая бит, чтобы иметь надежное серверное решение JavaScript/DOM, которое отвечает всем моим потребностям./незапрашиваемое мнение

    JQuery (по-прежнему javascript, но) это действительно поможет вам иметь поддержку почти для всех браузеров, и на самом деле это не так сложно узнать:)

    Я не думаю, что Javascript будет заменен в ближайшее время. Для совершенно другого подхода к богатым клиентам вы можете изучить Flex, который является технологией Flash.

    1 Nosredna [2009-05-31 01:10:00]

    Нет. JavaScript есть, но он будет развиваться. Следующая версия — «JavaScript Harmony», и вы можете узнать больше, если это Google.

    Время от времени кто-то предлагает помещать интерпретатор байтового кода в браузер вместе с JavaScript. Наверное, этого не произойдет, по крайней мере на некоторое время.

    Мне нравится JavaScript. Но есть и другие решения, в том числе GWT, который компилирует Java на JavaScript и Script #, который компилирует С# на JavaScript.

    1 ilya n. [2009-06-01 02:06:00]

    Многие понимают, что Javascript не лучший и самый красивый язык. Тем не менее, в настоящее время он поддерживается браузерами, и поэтому будет очень сложно ввести другой язык. Нам просто не нужна другая война в браузере.

    Это объясняет, почему я не знаю о планах перехода на другой клиентский язык.

    Но я думаю, что Javascript не так уж плох, если вы начнете думать о модели DOM и как с ней работать. Многие вещи, которые беспорядочны с JS, являются результатом того, как работает модель DOM.

    Возможно, что-то вроде haxe (см. haxe.org) может вам помочь. Это язык, который кажется более чистым, чем JavaScript, и его можно скомпилировать до JavaScript, поэтому его можно запустить в браузере.

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

    JavaScript — это английский язык в Интернете. Английский исторически распространился, потому что у него был сильный флот, завоевывающий различные страны. Это сопоставимо с крупными компаниями, которые завоевали Интернет с помощью JavaScript. Это язык, сбитый из разных европейских источников (греческий, латинский, германский языки, французский даже некоторые китайские и индийские слова). JavaScript заимствовал много концепций на протяжении многих лет с других языков (структурный, OO, функциональный). На английском языке говорят в разных местах с небольшими вариациями в диалекте и акценте, что может затруднить понимание. Так же, как JavaScript имеет разные браузеры, интерпретирующие его несколько иначе.

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

    Несмотря на различные акценты, JavaScript является лингва-франкой в ​​Интернете. Так же, как вы, возможно, не являетесь английским и пишите здесь на английском языке, каждый веб-браузер имеет определенную степень понимания на английском. IE6 похож на парня, который говорит в своем резюме, что он свободно говорит, но только поступил на двухнедельный курс английского на иностранном языке.

    Были попытки вытеснить английский язык как основной язык миров, например. Эсперанто. Но все они потерпели неудачу, потому что большинство людей на земле говорят по-английски. Точно так же будет трудно представить лучшие альтернативы JavaScript.

    Javascript функция компилируются меньше?

    У меня есть встроенный тег . например:

    Мне нужен яваскрипт функция, чтобы получить скомпилированный CSS из этого тега. Я знаю, как скомпилировать его, используя меньше. Что мне действительно нужно, это функция, которая возвращает меня скомпилированный CSS (как строка).

    Это кажется тривиальным вопрос, но я ничего не могу найти в Интернете. Спасибо.

    Вот JSFiddle . (Из — за ограничения JSFiddle, я изменил «style» к «div» )

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

    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих