2013-02-25 46 views
3

运行一个jQuery组件我有一个像jquery full calendar使用的NodeJS

我的组件完全开发jQuery的成分似乎运行在浏览器慢(不是日历)。所以我想使用nodeJs在服务器上运行它。

我想在服务器端做所有的dom操作,只有html页面必须发送到浏览器。似乎一切都是可能的,如果我从头开始,但我不想这样做。这是我计划做

  • 如果用户输入URL那么它击中了服务器。
  • 然后在服务器中的所有JS和CSS已经被编译
  • 那么它的HTML文件返回给浏览器
  • 当用户再次执行某些操作它击中服务器,并尽一切的变化,然后它有发送到服务器

任何人都可以打电话给我如何做到这一点或任何其他最好的替代方法来实现我想要的? 一个简单的演示应用程序会更好。 在此先感谢。

+0

这些是目前我正在尝试解决这个问题的事情。 nodejs-express&cheerio – 2013-03-04 12:25:39

回答

1

我想你的问题可能会有一些困惑,关于DOM的工作方式。

虽然可以在node.js服务器上使用类似jsDom的库呈现具有DOM的应用,但是当向客户端提供相同的页面时,它具有完全不同的DOM实例,他们之间没有任何沟通方式。因此,您的应用程序对服务器上的DOM进行的任何更改都无法轻松传播到客户端上的DOM。

如果您的组件似乎在浏览器中运行缓慢,那么您更有可能从组件上获得良好的结果,使其更有效,而不是通过尝试将DOM操作卸载到服务器。

如果您查看两种不同的情况并将其分解为浏览器的实际功能,那么您会看到为什么这是一个糟糕的主意。

方案(1) - 渲染的Dom在服务器上改变

  1. 步骤1 - 客户端负载初始html页面从服务器(慢)
  2. 步骤2 - 用户与网页上的客户端进行交互(快)
  3. 步骤3 - 客户端发送的用户交互回服务器(vslow)
  4. 步骤4 - 服务器加载的Dom(慢)
  5. 步骤5 - Server运行的Dom改变(快)
  6. 步骤6 - 服务器发送重新呈现的HTML回客户机(慢)
  7. 步骤7 - 客户端呈现从服务器新的HTML(慢)

方案(2) - 渲染的Dom上客户端更改

  1. 第1步 - 从服务器客户端负载初始HTML页面(慢)
  2. 步骤2 - 用户与客户端(快)
  3. 步骤3页相互作用 - 客户端运行的Dom改变(快)
  4. 第4步 - 客户端渲染改变DOM(慢)

你会好得多只是你的组件上的工作,使之快于尝试卸载的DOM渲染到服务器。 Here's a good blog post on how to speed up jquery code

如果您确实想要继续处理您在问题中提出的工作流程,我建议您查看jsDom库,但我真的不会推荐它。

+0

sory,我被迫做这件事。我不想从头开始编写代码。还有一件事我应该使用jsdom而不是cheerio? – 2013-03-05 12:40:04

+0

我不熟悉Cheerio,所以我不能给出任何一个比其他更具体的建议。看看文档,在我看来,cheerio会比jsdom快,但只会让你访问jquery的功能。如果您在页面上有其他JavaScript,并且希望在不通过Jquery的情况下与完整的DOM进行交互,则Cheerio可能会导致页面呈现不正确。 JSdom会更慢,但会保证页面上的所有javascript都可以访问完整的DOM – Racheet 2013-03-06 12:42:28

1

有一个jQuery节点包。所以,你可以安装包和使用jQuery,你本来会做

安装node.js的jQuery的

npm install jquery 

那么这行添加到您的脚本

var $ = require('jquery'); 

如果你是在Windows上,您可能会在安装jquery时遇到问题。如果你搜索错误信息(实质上你需要为你的环境设置make)

+0

我在windows上。无法安装jQuery包的节点..任何建议? – beNerd 2013-03-15 06:45:47

+0

@beNerd您需要安装make实用程序,以便依赖关系可以被构建(即symxtify),据我所知我只是安装了cygwin make,但很久以前。但是你可以下载二进制文件(参见http://stackoverflow.com/questions/10226301/building-contextify-under-windows-7-x64-for-nodejs-jquery) – 2013-03-15 07:39:15