2011-02-12 40 views
7

从阅读很多文章,如How do I include a JavaScript file in another JavaScript file? - 显然不可能包括一个脚本到另一个。javascript最佳实践 - 管理脚本/代码重用

因此,这里是我的问题 - 我很担心JS膨胀。或者有太多未使用的代码加载页面而不使用/需要它。但是,偶尔,我需要在多个页面上使用相同的功能,但不是所有的页面。

如果我们在做一个在线应用为对象的逻辑部分,如“客户”或“项目” - 我们可能有一堆代码,具体到每一个“对象”的。作为一个例子,我可以有一个'profile'代码组,允许我管理我的配置文件,它可能有多个使用Ajax的div弹出窗口,为了举例,让我们说我已经得到了控制我的“送货地址”一对夫妇的功能,它们控制div,弹出,他们处理Ajax特定于该信息。 - 可以说我有4个功能用于这个目的。但是,这仅仅是一个更大的“profile.js”文件处理所有我的“个人资料”污物的一部分......

现在我已经得到了应用程序的另一部分 - 比如一个购物车 - 在哪里需要允许用户访问“送货地址”的div-pop-up和所有的Ajax功能。

我想我会从profile.js只是那些功能重复使用 - 因为这似乎是“坏”,用来做同样的事“重新写”代码 - 因为那时我有长期的代码维护问题 - 如果我做了改变 - 我必须记得我使用该代码的任何地方。

所以如果我只是推测'最佳实践' - 考虑到这些技术的工作方式的局限性 - 我不能'套用'并重新使用js,就像我做的服务器端包含OR CSS。

我的代码将不得不被分成单独的文件,以及(理论上)许多较小的.js文件将被用于

所以我<head>看起来像这样

<head> 
<script src='smallfile_1.js'...> 
<script src='smallfile_2.js'...> 
... 
<script src='smallfile_10.js'...> 
<head> 

和“ IF“我需要在另一个页面的部分

<head> 
<script src='that_other_object_/smallfile_3.js'...> 
</head> 

...不重复的TTP调用这些较小的文件成为开销?在交通流量大的应用中 - 似乎网络和服务器的开销可能开始成为问题,或者只是在鼹鼠山上爬山?

确实为10 5K档100K的请求,真的等于 - 1个50K文件100K请求?

现在,我写出来 - 想想看 - 页面中的所有图像向服务器单独调用过 - 所以也许我做的一个问题出来的东西是不是一个问题。

我可以得到一些其他人正在做的关于跨模块的JS代码重用的反馈 - 而不是在模块间共享“巨大”的文件。

+3

7个问题,导致合并15个答案,你不能看到你的方式接受一个单一的? – nmichaels 2011-02-12 07:26:40

回答

11

答案很简单 - 您创建一个库或包含所有实用函数的框架,然后在所有页面上加载该库。由于浏览器缓存,客户端必须检索该文件的唯一时间是初始加载,所以即使文件相当大,客户端也只需加载一次。

这意味着某些站点(如Stack Overflow)仅使用一个主JavaScript文件,该文件包含网站上所有页面运行所需的大部分代码。尽管每个页面只需要少数几个功能,但浏览器缓存意味着这种方法会更有效率。

的另一种方法,以防止这种情况的发生是创建一个小型的服务器端文件,将动态结合多个JavaScript在服务器上,并为他们提供服务时,为他们的客户端请求,例如:

<script src="/resource/js?load=file1,file2,file3" type="text/javascript></script> 

但是,不建议使用此方法,因为它会破坏浏览器缓存。因此,最佳做法是通常为以维护一个大的主JavaScript文件,其中包含站点运行所需的所有代码,该代码将在初始页面加载时缓存。

+1

thx ...有没有办法'测试'看看缓存是否真的在发生?通过某种方式从请求中“查看”kb或传入文件... ?? – jpmyob 2011-02-13 02:30:44