2011-04-16 3 views
14

Когда я увидел this question Я думал, что было бы полезно, если бы был написан компилятор jQuery . Теперь, по компилятор, я имею в виду что-то, что принимает код jQuery и выводит необработанный код javascript, который в конечном счете выполняется.Is JQuery * компилятор * возможно?

Это, как я видение блок выполнения JQuery кода:

  1. функция JQuery называется и параметры передаются ему
  2. функции вызывает сырое Javascript функции и передает параметры его, полученные в это
  3. вновь вызываемая функция выполняет намеченное действие

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

Если мы присоединяемся к этой модели, то мы могли бы придумать методы, чтобы функции JQuery выполнять двойную обязанность:

  1. То, что они уже делают
  2. Logging, что они делали в форме raw_function(passed_params)

Я делаю некоторые неправильные предположения, которые сделают это невозможным? Любые идеи о том, как профайлер Firebug пытается получить имена функций? Можно ли здесь использовать?

Редактировать

То, что я думал, делал черный ящик с входом/выходом, как:

normal jquery code[BB]code you'd write if you used no library

  • Я назвал этот компилятор , потому что вы скомпилировали один раз и затем использовали полученный код.
  • Я утверждал, что он может иметь как минимум образовательное использование и, возможно, другие виды использования.
  • Люди сказали, что это займет небольшое количество кода и выдаст огромную массу; что не бросает вызов намеченной цели, насколько я вижу
  • Люди сказали, что я добавлю лишний лишний шаг к рендерингу страницы, который, учитывая, что в конечном итоге будет использован только полученный результирующий код (и, вероятно, будет использоваться только для изучения), не является правильным.
  • Люди говорили, что между функциями javascript и функциями jquery нет взаимно однозначного отношения, и подразумевается, что такой конвертер будет слишком сложным и, вероятно, не стоит усилий. С этим я сейчас согласен.

Спасибо всем!

+2

Почему? jQuery - это JavaScript! В чем проблема с jQuery в последнее время. – halfdan

+0

Ничего. Я люблю jQuery. Тем не менее такой * компилятор * был бы полезен даже в чистых образовательных целях. –

+0

И, возможно, это может помочь людям оценить, что он делает для них под капотом. –

ответ

1

Теперь компилятором, я имею в виду что-то , который принимает в JQuery код и выводит сырым Javascript кода, который в конечном счете выполняется.

Я думаю, что это заявление может указывать на то, что для вас не так.

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

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


Видимо то, что вы на самом деле хотите, чтобы «встроенный» JQuery код в код, вроде этого:

var myfoo = $('#foo');var myfoo = document.getElementById('foo');

Это на самом деле что-то C++ компилятор будет делать, чтобы оптимизировать но Javascript не является C++, поэтому он не применяется здесь.

Я не вижу, как это полезно. Точка jQuery заключается в том, чтобы упростить разработку Javascript, предоставляя согласованный интерфейс, такой как функция $(). Выполняя эту процедуру «inlining», вы создаете код, который еще труднее читать и поддерживать.

И зачем добавлять дополнительный шаг? Почему бы просто не доставить код JavaScript javascript и библиотеку jQuery в браузер? Зачем добавлять дополнительный шаг, включающий дополнительный инструмент для преобразования Javascript в Javascript, который не предоставляет каких-либо существенных дополнительных преимуществ?

+8

Вы принимаете * компилятор * слишком буквально (или я использовал его для упрощения). Я знаю, что jQuery - это библиотека, и я попытался понять, что происходит внутри, изучая код. Мой комментарий в ответ на @Squeegy уточняет, что я имею в виду под компилятором. –

+4

, что ответ начинается с грубых грубостей. – nimrod

+3

'' Выполняя эту процедуру «inlining», вы создаете код, который еще труднее читать и поддерживать ».« Я не думаю, что идея состоит в том, чтобы поддерживать «скомпилированный» код.Родные селекторы на несколько раз быстрее, чем JQuery, и это вопрос этого вопроса. – Hardy

2

Код jQuery is «необработанный код JavaScript», поэтому я не уверен, что компилятор действительно вас купит. Это похоже на запись компилятора C#, который принимает код C# 4.0 и испускает код C# 1.1. В чем польза?

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

JavaScript сам по себе обманчиво похож на другие языки, и это, как правило, является одной из его самых больших ошибок в качестве языка. Люди пытаются думать об этом с точки зрения Java, хотя сходство в значительной степени останавливается на имени. Структурно JavaScript во многом отличается (типизация, область видимости, совпадение, наследование, полиморфизм и т. Д.), И мне особенно нравится, как jQuery и другие современные проекты JavaScript привнесли язык в самостоятельные достоинства.

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

Обратите внимание, что jQuery - это не единственная структура, которая делает эти вещи, это просто самая популярная. Должен ли такой компилятор также обрабатывать все другие структуры? Все они делают разные вещи разными способами, чтобы использовать язык. Я не думаю, что гомогенизация их в «более простой» форме покупает нам что угодно.

Edit: (В ответ на различные замечания вокруг этого вопроса и его ответы, вроде ...

Как бы вы структурировать этот компилятор Учитывая, что (как мы пытались указать) . JQuery является JavaScript и просто библиотека кода JavaScript, и учитывая то, как браузеры и работы JavaScript, ваш «компилятор» просто должен быть другой библиотекой JavaScript Так по существу, что вы хотите, чтобы перейти от:

  • Веб-страница
  • библиотека JQuery
  • Некоторые JavaScript код, который использует библиотеку JQuery

к:

  • Веб-страница
  • библиотека JQuery
  • Некоторые код JavaScript, который использует библиотеку JQuery
  • Ваша библиотека "compiler"
  • Some больше кода JavaScript, который отправляет предыдущий код JavaScript через вашу библиотеку как-то
  • Ваш «JQuery-эквивалент» библиотека
  • Некоторые более JavaScript код, который заменяет исходный код JavaScript с новой версией

для того, чтобы вещи проще? Или каким-то образом упростить использование инструментов для отладки, таких как FireBug? То, что вы предлагаете, называется «обфускатором», и его единственная цель - сделать код более сложным для обратного проектирования. Побочным эффектом является то, что он также делает код более сложным для понимания и поддержки.

+0

«необработанный код JavaScript» неправильно! Я не говорю о том, что библиотека jQuery написана в itlf, конечно, это * raw javascript *, но у нас нет метода или функции * в javascript *, называемой 'replaceWith()'. –

+1

@Majid: За исключением того, что библиотека jQuery предоставляет функцию под названием «replaceWith()» (которая, как я думаю, как и большинство вещей в библиотеке, является расширением объекта 'jQuery'). Что бы ваш компилятор/интерпретатор/и т. Д. do, просто скопируйте существующую функцию jQuery? Чтобы сохранить функциональность в полезном и значимом (и во многом хорошем) способе, нужно просто скопировать функцию из одного .js-файла в другой. В чем польза? – David

+0

@Majid: То, что вы по существу предлагаете, - это не столько «компилятор», либо «интерпретатор» или что-то в этом роде. Вы предлагаете написать свою собственную библиотеку jQuery-equivelant и написать инструмент для перевода от одного к другому. Если вы можете написать jQuery таким образом, который каким-то образом лучше каким-либо образом, чем сам jQuery, почему бы не внести вклад в реальный проект jQuery? – David

3

Если цель компилятора заключается в том, чтобы преобразовать Javascript (который может быть jquery или что-то еще) в улучшенный Javascript (который я понял из вас, говоря «в конечном счете выполненный»), Google уже это сделал. Они сделали closure compiler, а некоторые попробовали его с JQuery в этом post. Разве это не то, что вы предлагаете?

5

Я думаю, что вы имеете в виду: если вы пишете

var myId = $("#myId") 

он будет преобразован в

var myId = document.getElementById("myId") 

Я думаю, что его можно, но проблема в том, функции JQuery возвращают объекты JQuery, так в приведенном выше примере первый myId будет объектом jQuery &, второй будет узловым объектом (я думаю), который повлияет на другие функции, которые должны использовать его позже в коде после компиляции.Особенно, если они связаны цепями

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

Смежные вопросы