如果您担心性能,我会考虑使用 AngularJS 之类的框架。您可以注入模块化代码。更好的是,使用 MVC,您的视图将绑定到您的模型,因此通过更改模型,视图会自动更新。
另外,停止使用类选择器。使用 ID 选择器。他们要快得多。您还想预加载选择器(即使使用类选择器)。这样你只搜索 DOM 一次:
var ele = $('#elementId');
$(ele).doSomething();
这样,您就有了对 DOM 元素的引用。您可以使用数据结构将所有引用存储在全局范围之外:
var elementReferences = {}; //declaration
elementReferences.mainPage = {}; //use
elementReferences.mainPage.root = $('#mainPage'); //load the root div of a page segment
elementReferences.mainPage.title = $(elementReferences.mainPage.root).children('#title'); //load the title
elementReference.mainPage.form = $(elementReferences.mainPage.root).children('#form'); //load the form
现在你可以这样做:
$(elementReference.mainPage.form).whatever();
它不必在 DOM 中搜索元素。这对于较大的应用程序特别有用。
如果您在 document.ready 中放置一个函数,按照您的小提琴,您只能在 document.ready 调用范围内访问该函数。您真的希望能够在所需的范围内根据需要动态加载/卸载函数,这就是 angularjs 发挥作用的地方。
在大多数情况下,您还希望从全局范围中删除您的函数和变量,并将它们放入按它们的依赖项和使用排序的容器中。这是面向对象编程 101。与其将一堆数组放在全局范围内,否则它们可能会被其他开发人员错误地覆盖,而是希望将它们放在一个容器中:
var arrays = {}; //create the object
arrays.whatever1 = [];
arrays.whatever2 = [];
显然,您可能需要一个比“数组”更具描述性的名称。函数的工作方式相同:
var ajax = {}; //ajax object
var ajax.get = function(){
};
var ajax.post = function(){
};
var ajax.delete = function(){
};
这通常会促进更简洁的代码,这些代码更可重用且更易于维护。您希望在实际开始开发之前花费大量时间编写一个完整记录整体架构的规范。如果你能帮上忙,千万不要急于求成。花时间彻底研究和规划大局以及一切如何组合在一起,而不是试图随心所欲地解决它。当你这样做时,你花更少的时间重新发明轮子。
它是由 google 开发的,所以它应该已经存在了一段时间。我不确定您是否是负责系统架构的人,但如果性能/可重用性是您公司的一个问题,那么绝对值得一看。我非常乐意向您介绍我在软件架构和工程方面所知道的大部分内容。如果你有兴趣,就给我留言。总是乐于助人!