|
精华帖 (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就可以了 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-04-02
给个建议:把js存成静态文件比较好,如果没有统计分析的必要,尽量不要把数据拆分成字段放到数据库里,在应用复杂,大并发访问的情况下你会深刻体会到这一点,迄今为止数据库仍然是web系统的薄弱环节。
|
|
| 返回顶楼 | |
|
时间:2008-04-02
还不如写js的url存入数据库
|
|
| 返回顶楼 | |
|
时间:2008-04-02
个人觉得,js写到数据库以后,加上缓存管理,对于性能,应该跟存文件差别不大
|
|
| 返回顶楼 | |
|
时间:2008-04-02
上面的方法已经给出了存文件路径到数据库中,根据文件路径加载js的思路.
|
|
| 返回顶楼 | |
|
时间:2008-04-02
一台P4 2G,1G内存的机器Apache一秒可轻易以上三千并发, 可以轻易F5集群。erlang轻量级WEB服务可以响应四万并发。
可数据库的性能就差多了。 |
|
| 返回顶楼 | |
|
时间:2008-04-02
您这个在header里加Script对象的方法,IE,FF,SAFARI,OPERA都会有不同的表现,像IE里这样做其实是一个异步加载,但在FF里同样的创建SCRIPT对象并加载到HEADER里就表现为同步加载,加载完后再顺序下面的。如果您在使用时,立即调用动态加载的类会出现问题。
|
|
| 返回顶楼 | |
|
时间:2008-04-02
我以前的做法是放在目录下,然后用一个大的来写document.wirte("<script src=xxx.js ></sript>");
这样的方式来加载,我觉得会更好一些。 |
|
| 返回顶楼 | |
|
时间:2008-04-03
如果写在数据库里,就不能用gzip压缩了。
|
|
| 返回顶楼 | |
|
时间:2008-04-03
dboylx 写道 一台P4 2G,1G内存的机器Apache一秒可轻易以上三千并发, 可以轻易F5集群。erlang轻量级WEB服务可以响应四万并发。
可数据库的性能就差多了。 确实,数据库性能差一直是互联网应用以及大型企业级应用的瓶颈.所以世界上最优秀的工程师,最后都在着力进行数据库性能的优化. 这也是在后面我提到使用缓存来跨过数据库的原因. 对于我们所写的javascripts代码,虽然是存储于数据库中,但是我们可以同时将它存储入缓存中,并设置其永远不会销毁,同时,在操作数据库的时候,做缓存的同步,这样一来,访问数据库中存储的js代码,变成了访问缓存中数据,性能会大不一样. 我们曾经有三台服务器做负载均衡,在没有架设缓存服务器以前,一次操作,响应时间会很长,后来架设了缓存服务器,时间为2分种(大部分为数据查询),响应速度明显很快. 所以说,我觉得将JS存储入数据库,再加上缓存管理,在性能上,至少跟从文件加载相当. |
|
| 返回顶楼 | |


![ecsun的博客: [海鹏Blog]--{FaceYe开源} 用户头像](http://www.javaeye.com/upload/logo/user/36668/bcfaff38-8200-4288-88e6-f588c3138e36.gif?1196653519)



