Jquery*编译器*可以吗?

Maj*_*our 17 javascript compiler-construction jquery

当我看到这个问题时,我认为如果可以编写jQuery 编译器会有所帮助.现在,通过编译器,我的意思是接受jQuery代码并输出最终执行的原始javascript代码.

这就是我对jQuery代码块执行的看法:

  1. 调用jQuery函数并将参数传递给它
  2. 该函数调用原始javascript函数并将收到的参数传递给它
  3. 新调用的函数执行预期的操作

我知道这是一个非常简化的模型,它可能会复杂得多,但我认为复杂性减少到第2步和第3步重复,不同的原始js函数被调用,每次都用全部或部分参数/以前的结果.

如果我们订阅该模型,那么我们可能会提出使jQuery函数执行双重任务的方法:

  1. 他们已经做了什么
  2. 记录他们所做的事情 raw_function(passed_params)

我做了一些错误的假设会让这个不可能吗?有关Firebug的探查器如何尝试获取函数名称的任何想法?可以在这里使用吗?

编辑

我在想的是制作一个带输入/输出的黑盒子:

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

  • 我称之为编译器,因为您编译了一次然后将使用生成的代码.
  • 我认为它至少可以用于教育,也可能用于其他用途.
  • 人们说这将采用少量代码并输出大量数据; 就我所知,这并不违背预期的目的
  • 人们说我要为页面渲染添加一个额外的,不必要的步骤,只有最终会使用(并且可能仅用于学习)结果代码,这是不正确的.
  • 人们说javascript函数和jquery函数之间没有一对一的关系,暗示这样的转换器太复杂了,可能不值得努力.有了这个,我现在同意了.

谢谢你们!

Joh*_*ant 6

我想你的意思是:如果你写的话

var myId = $("#myId")
Run Code Online (Sandbox Code Playgroud)

它将被转换为

var myId = document.getElementById("myId")
Run Code Online (Sandbox Code Playgroud)

我认为它可能,但问题是,jQuery函数返回jQuery对象,所以在上面的例子中,第一个myId将是一个jQuery对象,第二个将是一个节点对象(我认为)将影响需要的其他函数稍后在编译后在代码中使用它.特别是如果他们被链接

其次,您必须确保转换实际上具有性能优势.但是,如果您了解所有这些并且可以相应地计划代码,我认为这是可能的


In *_*ico 1

\n

现在,我所说的编译器是指接受 jQuery 代码并输出最终执行的原始 JavaScript 代码的东西。

\n
\n\n

我认为这个陈述可能表明你出了什么问题。

\n\n

jQuery 是一个用 Javascript 语言实现的库。jQuery 是一种与 Javascript 分离的语言。jQuery 是 Javascript 代码的集合,您可以使用它来简化 Javascript 开发。这都是 Javascript。将“jQuery 代码”转换为“原始 Javascript”的“jQuery 编译器”将毫无用处,因为 jQuery原始 Javascript。

\n\n

您可能真正想要的是一个Javascript编译器。那样的话,当然是有可能的。事实上,现在的一些网络浏览器实际上以某种字节码的形式对 Javascript 代码进行“编译”,以提高性能。但涉及 Javascript 的开发工作流程通常不涉及某种编译器工具。

\n\n
\n\n

显然你真正想要的是将 jQuery 代码“内联”到你的代码中,有点像这样:

\n\n

var myfoo = $(\'#foo\');\xe2\x86\x92var myfoo = document.getElementById(\'foo\');

\n\n

这实际上是 C++ 编译器为优化性能所做的事情,但 Javascript 不是 C++,因此它不适用于此处。

\n\n

我不明白这有什么用。jQuery 的重点是通过提供像$()函数一样的一致接口来简化 Javascript 开发。通过执行这个“内联”过程,您会生成更难以阅读和维护的代码。

\n\n

为什么要添加额外的步骤?为什么不直接将应用程序 javascript 代码和 jQuery 库交付给浏览器呢?为什么要添加一个额外的步骤,涉及一个额外的工具来将 Javascript 转换为 Javascript,而这不会提供任何实质性的额外好处?

\n

  • 你把*编译器*看得太字面意思了(或者我已经随意使用它了)。我知道 jQuery 是一个库,并且我尝试通过研究代码来了解内部发生的情况。我对 @Squeegy 的评论澄清了我所说的编译器的含义。 (9认同)
  • 这个答案一开始就很粗鲁。 (4认同)
  • “通过执行这个“内联”过程,您会生成更难以阅读和维护的代码。”我不认为这个想法是维护“编译”代码。本机选择器比 JQuery 快好几倍,这就是这个问题的重点。 (3认同)