我想知道在网页中使用过多JavaScript代码会有什么缺点?
例如,我将为我的下拉菜单,选项卡和手风琴使用jQuery框架。和我的日历的其他JavaScripts(即使有可用的日历,使用jQuery)和其他JavaScript的其他东西?有什么影响? (我认为JavaScript与重载相矛盾)
我知道很多开发人员掌握了超过2个JavaScript框架。我的问题是:在开发项目时,如何为该项目选择JavaScript框架?为什么要为该项目使用MooTools或jQuery? (我知道这是一个选择问题),但还有其他原因吗?就像mootools对此有好处......或者jQuery对此有好处..
我想听听你的意见。
答案 0 :(得分:9)
网站中的许多JavaScripts有哪些缺点?
为什么要为该项目使用MooTools或jQuery?
这不仅仅是个人品味的问题。查看this question了解详情。
针对特定事项有特定的框架 - 以Ext JS为例,它试图包含网站所需的一切。这不是jQuery所做的。
答案 1 :(得分:6)
它取决于浏览器(和后端)以及它如何执行/扩展到许多脚本。在开发解决方案时首先考虑受众的要求。他们将在超快速光纤链路或带GPRS链路的小型手机上运行四核怪物吗?然后决定哪些技术将满足这些需求。
不要先从技术开始。
答案 2 :(得分:2)
从您的问题中,我想到了几个问题:
在选择单一框架方面,看看你想要做什么 - 有些框架会比其他框架更适合某些网站。另外,请查看开发人员已具备的技能组,因为他们需要学习的新东西越少,他们花在构建站点上的时间就越多。看看框架周围的社区。考虑一下插件的可用性(尽管那里有很多低质量的插件;不仅仅依靠数量来判断)。看看框架的API是否与您的方法很吻合。
答案 3 :(得分:2)
我想说使用多个库有一些可能的缺点:
在一天结束时,所有这些库只是编写JavaScript的另一种方式。 挑选适合您的图书馆;允许您以最快的错误完成工作的那个。
答案 4 :(得分:2)
网络开销。我不是在谈论脚本本身,而是谈论他们在做什么:
许多插件都会创建框架来从第三方网站提取内容:Facebook就像按钮,评论,Twitter Feed,Google和各种广告等等。而且这些插件也可以加载和运行自己的脚本。< / p>
即使您有8个核心,当插件加载其内容时(每次访问页面!),网站内容也会跳转至少30秒。这就是我安装浏览器插件来阻止javascript的原因。但即使我启用它们,它们通常会从至少20-30个域中提取脚本,并且我需要在页面上启用所有脚本4-5次以使网站完全正常运行。请避免创建这样的情况。
答案 5 :(得分:0)
答案非常明显:更多JavaScript意味着更大的性能开销。根据你的文件结构,它可能意味着更多的HTTP请求,更多的数据要加载,更多的代码要解析等等。如果它完全可以避免,你应该选择一个好的框架(比如jQuery)并坚持使用它,而不是混合搭配。
除了性能之外,多个框架也意味着可维护性较低的代码,因为维护人员必须熟悉每个框架才能使用它们。
可能有一些例外,例如使用像jQuery这样的通用框架以及像Raphael这样更具体的框架,但通常是通过插件解决的。
答案 6 :(得分:0)
一方面是加载需要时间。如果您的脚本包含在已包含或链接的文件中,则需要加载时间和更多HTTP请求。
此外,更多脚本可能会降低客户端计算机的速度。现在很多用户都会同时打开多个页面或标签页,如果你的用户非常沉重和缓慢,同时打开其他页面会使基础计算机上的内容不稳定,那么你的网站可能有点过分。
最后,如果用户没有javascript或关闭了该怎么办?它会彻底破坏你的网站吗?
答案 7 :(得分:0)
不要忘记某些用户可能禁用了Javascript,因此拥有基于JS的网站所需的一些功能(即菜单,导航,表单等)将导致这些用户无法查看您的网站。
答案 8 :(得分:0)
使用大量JavaScript文件应该不是问题,因为您始终可以将它们全部合并在一起以最小化HTTP请求。当然要执行所有JavaScript,需要浏览器的时间。所有这些JS库/插件之间或DOM中都存在冲突。
至于选择合适的库,它实际上取决于您正在制作的网站/应用程序类型。如果您只是想使用预先制作的插件,那么您使用的库并没有太大的区别,您应该选择具有更多想要使用的插件的插件,我很确定jQuery是最好的选择在这里,因为它拥有最多的插件。
另一方面,如果您想编写自己的组件/插件/代码,那么您应该测试每个组件/插件/代码,看看哪个适合您的编码风格并进行最佳投影。例如前一段时间我发现Prototype更适合我的口味,对于大型JS重型项目来说相当不错。但是jQuery从那时起已经走了很长的路,所以如果我不得不做一个新的项目,我可能会尝试每个最受欢迎的库。
答案 9 :(得分:-1)
另一个