论坛首页 AJAX版 EXT

动态加载JS

浏览 6233 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
作者 正文
时间:2008-04-02
最近在写portal的时候,遇到了portlet的开发,由于portlet的量很大,所以会产生很多js文件,于是就在想,可不可以把js写到数据库中,然后在运行的时候,按需动态加载,做了一下尝试,发现是可以的.

先给出代码:

/**
 * www.faceye.com 网络支持系统 
 * 作者:宋海鹏 ecsun@sohu.com/myecsun@hotmail.com/QQ:82676683
 * 说明:javascripts 工具类
 * 
 */

/**
 * 动态加载JS文件
 */
var Faceye = {
	version : 1.0,
/**
*简单取得httpRequest
*/
	httpRequest : function() {
		var xRequest = null;
		if (window.XMLHttpRequest) {
			xRequest = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			xRequest = new ActiveXObject("MsXml2.XmlHttp");
		}
		return xRequest;
	},
/**
*简单的加载文件
*/
	load : function(src) {
		var headerDom = document.getElementsByTagName('head').item(0);
		var jsDom = document.createElement('script');
		jsDom.type = 'text/javascript';
		jsDom.scr = src;
		headerDom.appendChild(jsDom);
	},
/**
*通过ajax方式加载js
*/
	ajaxLoad : function(src) {
		var xRequest = this.httpRequest();
		xRequest.open('GET',src,true);
		xRequest.send(null);
					var headerDom = document.getElementsByTagName('head')
							.item(0);
					var jsDom = document.createElement('script');
					jsDom.type = 'text/javascript';
					jsDom.language='javascript';
					jsDom.defer=true;
					jsDom.text=xRequest.responseText;
					headerDom.appendChild(jsDom);
		
	}
};



从数据库里面读js内容,很简单了,只要将jsDom.text=xRequest.responseText;
换成从数据库中取得的js就可以了
   
时间:2008-04-02
给个建议:把js存成静态文件比较好,如果没有统计分析的必要,尽量不要把数据拆分成字段放到数据库里,在应用复杂,大并发访问的情况下你会深刻体会到这一点,迄今为止数据库仍然是web系统的薄弱环节。
   
0 请登录后投票
时间:2008-04-02
还不如写js的url存入数据库
   
0 请登录后投票
时间:2008-04-02
个人觉得,js写到数据库以后,加上缓存管理,对于性能,应该跟存文件差别不大
   
0 请登录后投票
时间:2008-04-02
上面的方法已经给出了存文件路径到数据库中,根据文件路径加载js的思路.
   
0 请登录后投票
时间:2008-04-02
一台P4 2G,1G内存的机器Apache一秒可轻易以上三千并发, 可以轻易F5集群。erlang轻量级WEB服务可以响应四万并发。

可数据库的性能就差多了。
   
0 请登录后投票
时间:2008-04-02
您这个在header里加Script对象的方法,IE,FF,SAFARI,OPERA都会有不同的表现,像IE里这样做其实是一个异步加载,但在FF里同样的创建SCRIPT对象并加载到HEADER里就表现为同步加载,加载完后再顺序下面的。如果您在使用时,立即调用动态加载的类会出现问题。
   
0 请登录后投票
时间:2008-04-02
我以前的做法是放在目录下,然后用一个大的来写document.wirte("<script src=xxx.js ></sript>");
这样的方式来加载,我觉得会更好一些。
   
0 请登录后投票
时间:2008-04-03
如果写在数据库里,就不能用gzip压缩了。
   
0 请登录后投票
时间:2008-04-03
dboylx 写道
一台P4 2G,1G内存的机器Apache一秒可轻易以上三千并发, 可以轻易F5集群。erlang轻量级WEB服务可以响应四万并发。

可数据库的性能就差多了。


确实,数据库性能差一直是互联网应用以及大型企业级应用的瓶颈.所以世界上最优秀的工程师,最后都在着力进行数据库性能的优化.

这也是在后面我提到使用缓存来跨过数据库的原因.
对于我们所写的javascripts代码,虽然是存储于数据库中,但是我们可以同时将它存储入缓存中,并设置其永远不会销毁,同时,在操作数据库的时候,做缓存的同步,这样一来,访问数据库中存储的js代码,变成了访问缓存中数据,性能会大不一样.

我们曾经有三台服务器做负载均衡,在没有架设缓存服务器以前,一次操作,响应时间会很长,后来架设了缓存服务器,时间为2分种(大部分为数据查询),响应速度明显很快.

所以说,我觉得将JS存储入数据库,再加上缓存管理,在性能上,至少跟从文件加载相当.
   
0 请登录后投票
论坛首页 AJAX版 EXT

跳转论坛:
JavaEye推荐