普遍接受周围组织代码的最佳实践在JavaScript

至于像jQuery JavaScript框架使客户端的web应用程序更丰富,功能更强大,我已经开始注意到一个问题...

如何在世界上你这个组织的?

  • 把所有的处理程序在一个地方,写功能对所有的事件?
  • 创建函数/类包装您的所有功能?
  • 写像疯了似的,只是希望它的作品出来最好?
  • 放弃,获取新的职业生涯?

我提到了jQuery,但它真的任何JavaScript代码一般。 我发现,为对线路线开始堆积,它就会更难管理脚本文件或找到你所期待的。 很可能是我发现的最大propblems是,有这么多的方式做同样的事情,很难知道哪一个是目前普遍接受的最佳实践。

有没有在最好的方式,让您的.js文件的任何一般性建议,漂亮整洁的应用程序的其他部分? 或者是IDE这只是一个问题? 有没有更好的选择了吗?



编辑

这个问题的用意是更多的代码组织,而不是文件组织。 目前已经有合并文件或拆分内容的一些很好的例子。

我的问题是:什么是目前普遍接受的最佳实践的方式来组织你的实际代码? 什么是你的方式,甚至是推荐的方式与页面元素进行交互,并创建一个不相互冲突可重复使用的代码?

有人列出了命名空间,这是一个好主意。 什么是一些其他的方法,更具体抓,页面上的元素,并保持代码组织和整洁?

--------------解决方案-------------

这将是,如果JavaScript的命名空间了内置的要好很多,但我发现,举办像达斯汀·迪亚兹介绍这里帮助我很多。

var DED = (function() {

var private_var;

function private_method()
{
// do stuff here
}

return {
method_1 : function()
{
// do stuff here
},
method_2 : function()
{
// do stuff here
}
};
})();

我把不同的“命名空间”,有时个别班级在不同的文件。 通常我先谈一个文件,并为一类或命名空间变得足够大,以保证它,我单独出来到自己的文件。 使用工具将所有文件你生产是一个极好的主意为好。

我会尽量避免,包括与HTML任何JavaScript。 所有的代码封装成类,每类在自己的文件。 对于发展,我有单独的<script>标记中包含的每个JS文件,但他们得到合并成一个更大的包装进行生产,以减少HTTP请求的开销。

通常情况下,我有一个'主'js文件为每个应用程序。 所以,如果我在写一个“调查”的应用程序,我将有一个名为“survey.js”一个js文件。 这将包含进入点jQuery代码。 创建实例化过程中的jQuery的参考,然后将它们传递到我的对象作为参数。 这意味着JavaScript类是“纯”,不包含为CSS ID或类名的任何引用。

// file: survey.js
$(document).ready(function() {
var jS = $('#surveycontainer');
var jB = $('#dimscreencontainer');
var d = new DimScreen({container: jB});
var s = new Survey({container: jS, DimScreen: d});
s.show();
});

我也觉得命名约定是为了便于阅读非常重要。 例如:我在前面加上“J”为所有jQuery的实例。

在上面的例子中,有一类称为DimScreen。 (假设该调暗屏幕,弹出一个警告对话框。)它需要一个div元素,它可以放大到覆盖屏幕,然后添加一个警告框,所以我通过在一个jQuery对象。 jQuery有一个插件的概念,但它似乎限制(如实例不是持久的,不能被访问),没有真正的上攻。 因此,DimScreen类是JavaScript类,只是碰巧使用jQuery的标准。

// file: dimscreen.js
function DimScreen(opts) {
this.jB = opts.container;
// ...
}; // need the semi-colon for minimizing!

DimScreen.prototype.draw = function(msg) {
var me = this;
me.jB.addClass('fullscreen').append('<div>'+msg+'</div>');
//...
};

我已经建立了使用这种方法的一些相当复杂的应用进展。

您可以将您的脚本分解成单独的文件进行开发,然后创建一个“发布”的版本,你塞进它们放在一起,并运行锐压缩机或上类似的东西。

由以前的帖子我做了Rake文件的副本供应商目录随WysiHat启发(通过更改日志一RTE提到),并做了一些修改,包括代码检查与JSLint的和缩小与锐压缩机

我们的想法是使用链轮 (从WysiHat)发行前合并多个JavaScript脚本到一个文件中,检查合并后的文件的JSLint的语法和运行如下它与锐压缩机。

前提条件

  • Java运行时
  • 红宝石和耙宝石
  • 你应该知道如何把一个JAR到类路径

现在做

  1. 下载犀牛,把JAR(“js.jar”)到classpath
  2. 下载YUI压缩机,并把JAR(建/ yuicompressor-xyz.jar)到classpath
  3. 下载WysiHat和复制“供应商”目录添加到您的JavaScript项目的根
  4. 下载JSLint的犀牛,并把它的“供应商”目录中

现在创建一个用JavaScript项目的根目录中名为“Rake文件”的文件,并添加下面的内容吧:

require 'rake'

ROOT = File.expand_path(File.dirname(__FILE__))
OUTPUT_MERGED = "final.js"
OUTPUT_MINIFIED = "final.min.js"

task :default => :check

desc "Merges the JavaScript sources."
task :merge do
require File.join(ROOT, "vendor", "sprockets")

environment = Sprockets::Environment.new(".")
preprocessor = Sprockets::Preprocessor.new(environment)

%w(main.js).each do |filename|
pathname = environment.find(filename)
preprocessor.require(pathname.source_file)
end

output = preprocessor.output_file
File.open(File.join(ROOT, OUTPUT_MERGED), 'w') { |f| f.write(output) }
end

desc "Check the JavaScript source with JSLint."
task :check => [:merge] do
jslint_path = File.join(ROOT, "vendor", "jslint.js")

sh 'java', 'org.mozilla.javascript.tools.shell.Main',
jslint_path, OUTPUT_MERGED
end

desc "Minifies the JavaScript source."
task :minify => [:merge] do
sh 'java', 'com.yahoo.platform.yui.compressor.Bootstrap', '-v',
OUTPUT_MERGED, '-o', OUTPUT_MINIFIED
end

如果您正确地做了一切,你应该能够使用以下命令在控制台:

  • rake merge -以不同的JavaScript文件合并成一个
  • rake check -检查你的代码的语法( 是默认的任务,这样你就可以简单地输入rake
  • rake minify -准备你的JS代码缩小的版本

在源合并

采用链轮,JavaScript的预处理器可以包括(或require )其他JavaScript文件。 使用以下语法,包括从最初的文件的其他脚本(名为“main.js”,但你可以改变,在Rake文件):

(function() {
//= require "subdir/jsfile.js"
//= require "anotherfile.js"

// some code that depends on included files
// note that all included files can be in the same private scope
})();

接着...

看看Rake文件提供了WysiHat设置自动化单元测试了。 不错的东西:)

现在的答案

这不回答原来的问题非常好。 我知道,我很抱歉,但我把它贴在这里,因为我希望这可能是有用的给别人安排自己的烂摊子。

我的解决问题的方法是做尽可能多的面向对象建模我可以和不同的实现到不同的文件。 然后该处理程序应该尽可能短。 用这个例子List单身也不错的。

和命名空间......嗯,他们可以通过更深层次的对象结构模仿。

if (typeof org !== 'undefined') {
var org = {};
}

if (!org.hasOwnProperty('example')) {
org.example = {};
}

org.example.AnotherObject = function () {
// constructor body
};

我不是模仿的大风扇,但如果你有,你想摆脱全球范围内许多对象这可能是有益的。

该代码的组织需要通过公约和文件标准:
1.命名空间代码的物理文件;

Exc = {};

在这些命名空间中的JavaScript 2组班;
3.设置原型或相关函数或类来表示现实世界中的物体;

Exc = {};
Exc.ui = {};
Exc.ui.maskedInput = function (mask) {
this.mask = mask;
...
};
Exc.ui.domTips = function (dom, tips) {
this.dom = gift;
this.tips = tips;
...
};

4.设置约定来提高代码。 例如,组内的所有的它的内部功能,或在一个对象类型的其类属性的方法。

Exc.ui.domTips = function (dom, tips) {
this.dom = gift;
this.tips = tips;
this.internal = {
widthEstimates: function (tips) {
...
}
formatTips: function () {
...
}
};
...
};

5.的命名空间,类,方法和变量的文档。 必要时也讨论了一些代码(一些金融机构和福尔,他们通常执行代码的重要逻辑)。

/**
* Namespace <i> Example </i> created to group other namespaces of the "Example".
*/
Exc = {};
/**
* Namespace <i> ui </i> created with the aim of grouping namespaces user interface.
*/
Exc.ui = {};

/**
* Class <i> maskdInput </i> used to add an input HTML formatting capabilities and validation of data and information.
* @ Param {String} mask - mask validation of input data.
*/
Exc.ui.maskedInput = function (mask) {
this.mask = mask;
...
};

/**
* Class <i> domTips </i> used to add an HTML element the ability to present tips and information about its function or rule input etc..
* @ Param {String} id - id of the HTML element.
* @ Param {String} tips - tips on the element that will appear when the mouse is over the element whose identifier is id <i> </i>.
*/
Exc.ui.domTips = function (id, tips) {
this.domID = id;
this.tips = tips;
...
};

这些都只是一些小技巧,但是这已经极大地帮助组织的代码。 记住,你必须有纪律,成功!

继良好的面向对象设计原则和设计模式,走一段很长的路,以使您的代码容易维护和理解。 但我最近发现的最好的事情之一是信号和槽又名发布/订阅。 看一看http://markdotmeyer.blogspot.com/2008/09/jquery-publish-subscribe.html一个简单的jQuery的实现。

这个想法是很好用在其他语言的GUI开发。 当一些显著发生在你的代码的某个地方,你发布这在其他对象的其他方法可以订阅一个全球性的合成事件。 这使物体很好的分离。

我认为道场(和原型?)有一个内置的版本,这种技术的。

又见http://stackoverflow.com/questions/312895/signals-and-slots

我是能够成功地应用Javascript的模块模式,以一个Ext JS应用程序在我以前的工作。 它提供了一个简单的方法来创建很好地封装代码。

道场有模块系统,从第一天开始。 事实上,它被认为是道场,持有其结合在一起的胶水的基石:

  • dojo.require - 官方文档。
  • 了解dojo.declare,dojo.require和dojo.provide。
  • 介绍道场。

使用模块道场达到以下目标:

  • 命名空间的Dojo代码和自定义代码dojo.declare() -不污染全局空间,共存与其他图书馆,以及用户的非道场识别码。
  • 按名称同步或异步加载模块dojo.require()
  • 自建立通过分析模块依赖于创建一个文件或一组相互依赖的文件(所谓的层),只包括你的Web应用程序的需求。 自建立包括Dojo的模块和客户提供模块以及。
  • 透明CDN为基础的访问Dojo和用户代码。 AOL和谷歌进行道场以这种方式,但一些客户做他们的自定义Web应用程序。

退房JavasciptMVC。

您可以 :

  • 分手了你的代码转换成模型,视图和控制器层。
  • 压缩所有的代码到一个单一的生产文件
  • 自动生成代码
  • 创建和运行单元测试
  • 和许多更多...

最重要的是,它使用jQuery的,这样你就可以利用其他的jQuery插件了。

我的老板还谈到,当他们写模块化的代码(C语言)的时代,并抱怨代码有多么的差劲现在! 有人说,程序员可以在任何框架编写汇编。 总有一个战略,以克服代码组织。 基本的问题是与球员谁把Java脚本当成玩具,永远不要试图去学习它。

就我而言,我写在UI的主题或应用程序界面的基础js文件,以适当的init_screen()。 使用正确的ID命名约定,我要确保没有在根元素级别名称空间冲突。 在unobstrusive window.load(),我基于顶层ID领带的事情了。

我严格使用Java脚本关闭和模式可以隐藏所有的私有方法。 这样做了以后,从来没有面临冲突的属性/函数定义/变量定义的问题。 然而,在一个团队工作时,常常难以执行相同的严谨性。

我很惊讶,没有人提到MVC框架。 我一直在使用Backbone.js的模块化和解耦我的代码,而且它是非常宝贵的。

有相当多的这类框架在那里,其中大部分是相当微小了。 我个人的看法是,如果你要编写不仅仅是为华而不实的UI东西两线的jQuery,或想有一个丰富的Ajax应用程序,一个MVC框架会让你的生活变得更轻松。

“写像疯了似的,只是希望它的作品出来最好?”,我已经看到了这样的这是开发和仅2开发人员,庞大的应用程序有很多的javascript代码维护的项目。 最重要的是有每一个可能的jQuery的功能,你能想到的不同的快捷方式。 我建议他们组织代码的插件,因为这是jQuery的等价类,模块,命名空间...和整个宇宙。 但是,事情变得更糟糕,现在他们开始编写插件替换的项目中使用的3行代码,每一个组合。 本人来说,我认为jQuery是魔鬼,它不应该在有大量的JavaScript项目中使用,因为它鼓励你偷懒,不去想以任何方式组织代码。 我宁愿看100线的JavaScript比40链式jQuery函数(我不是在开玩笑)一行。 流行的看法相反它很容易在等值JavaScript代码组织到命名空间和类。 这就是YUI和Dojo做。 你可以,如果你喜欢轻松地滚你自己。 我觉得YUI的做法要好得多,高效。 但是你usualy需要一个很好的编辑器的支持,如果你想要写什么有用的片段,以弥补YUI的命名约定。

创建单身的每一件事我真的不需要实例化多次在屏幕上,一个班的一切。 而所有这些都放在同一个命名空间在同一个文件。 一切都在评论,并设计使用UML,状态图。 JavaScript代码是明确的HTML,所以没有内嵌的JavaScript,我倾向于使用jQuery,以尽量减少跨浏览器的问题。

计划你的代码在一个jQuery中心的名称空间的方式可能会是这样......而且不会与其他的JavaScript API的原型一样,外部冲突无论是。

<script src="jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript">

var AcmeJQ = jQuery.noConflict(true);
var Acme = {fn: function(){}};

(function($){

Acme.sayHi = function()
{
console.log('Hello');
};

Acme.sayBye = function()
{
console.log('Good Bye');
};
})(AcmeJQ);

// Usage
// Acme.sayHi();
// or
// <a href="#" onclick="Acme.sayHi();">Say Hello</a>

</script>

希望这可以帮助。

OO + MVC的好校长肯定会走很长的路来管理一个复杂的JavaScript应用程序。

基本上我整理我的应用程序和JavaScript下面熟悉的设计(其中存在一路从我的桌面编程天回的Web 2.0)

普遍接受周围组织代码的最佳实践在JavaScript


描述为图像上的数字值:

  1. 窗口小部件代表我的应用程序的意见。 这应该是可扩展的,并分离出整齐产生良好分离的MVC试图实现,而不是把我的小部件到意大利面条代码(相当于投入的Javascript一大块直接在HTML的Web应用程序)。 通过他人听取其他部件从而降低部件之间的强耦合,可能导致无法控制的代码生成的事件的每个部件通信(记得添加的onclick处处指向脚本标签的全局函数的一天吗?Urgh ...)
  2. 对象模型表示,我想在widgets和来回传递到服务器,以填充数据。 通过将数据封装到它的模型,应用程序成为数据格式不可知论者。 例如:当自然的Javascript这些对象模型大多是序列化​​和反序列化到JSON,如果莫名其妙的服务器使用XML来沟通,我需要改变的是不断变化的序列化/反序列化层,而不一定需要改变所有的控件类。
  3. 该管理业务逻辑和通讯的服务器+偶尔缓存层控制器类。 该层控制的通信协议在服务器和放必要的数据到对象模型
  4. 类在其相应的命名空间整齐地包裹着。 我相信大家都知道怎么讨厌的全局命名空间可能在Javascript中。

在过去,我会单独文件到自己的js和使用常见的做法,在Javascript中创建面向对象的原则。 我很快就发现,有多种方法来写JS面向对象和它不一定是所有团队成员具有相同的方法的问题。 作为球队得到了较大的(在我的案件超过15人),这有点复杂,因为是面向JavaScript的对象没有标准的做法。 同时,我不想写我自己的框架和重复的部分,我相信聪明的人比我已经解决了的工作。

jQuery是令人难以置信的漂亮的JavaScript框架,我喜欢它,但是作为项目变大了,我显然需要更多的结构,我的web应用程序尤其是便于标准化OO实践。 至于我自己,多次实验后,我发现YUI3基地和窗口小部件(http://yuilibrary.com/yui/docs/widget/和http://yuilibrary.com/yui/docs/base/index.html)基础结构提供正是我所需要的。 几个原因,我使用它们。

  1. 它提供了名称空间支持。 面向对象的代码整洁组织的实际需要
  2. 它支持类和对象的概念
  3. 它提供了标准化意味着实例变量添加到类
  4. 它支持类扩展整齐
  5. 它提供了构造函数和析构函数
  6. 它提供了渲染和事件绑定
  7. 它有基础构件框架
  8. 每个插件现在可以传达给对方使用标准的基于事件的模型
  9. 最重要的是,它给所有的工程师提供了一种面向对象的标准JavaScript开发

出乎很多意见,我不一定有jQuery和YUI3之间做出选择。 这两个可以和平共处。 虽然YUI3提供了我复杂的web应用程序所需的面向对象的模板,jQuery的仍然为我的团队具有使用方便JS抽象,我们都来爱和熟悉。

使用YUI3,我设法通过分离类,扩展的基地为示范,类扩展widget作为一个视图,当然也可以有一个正在必要的逻辑和服务器端调用控制器类来创建MVC模式。

插件可以相互使用基于事件的模型,并收听该事件,并做根据预定义的接口的必要任务通信。 简单地说,把OO + MVC结构JS是一种快乐的我。

只是一个声明,我没有为雅虎工作,仅仅是一个尝试建筑师,以应付由原来的问题提出了同样的问题。 我想,如果有人发现相当于OO框架,这将正常工作。 原则上,这个问题适用于其它技术,以及。 感谢上帝为所有谁想出了面向对象的原则+ MVC,使我们的节目日子更易于管理的人。

我在去年的项目-Viajeros.com-我已经使用了几种技术的组合。 我不知道如何组织一个Web应用程序 - 小贩的是一个社交网络站点的旅客具有良好定义的部分,所以它是一种容易分离的代码,每个区域。

我用命名空间仿真模块根据现场部分延迟加载。 在每个页面加载我宣布一个“VJR”对象,始终加载了一组常用的功能,它(vjr.base.js)。 然后每个HTML页面决定哪些模块需要用一个简单的:

vjr.Required = ["vjr.gallery", "vjr.comments", "vjr.favorites"];

Vjr.base.js得到每一个gzip压缩的从服务器并执行它们。

vjr.include(vjr.Required);
vjr.include = function(moduleList) {
if (!moduleList) return false;
for (var i = 0; i < moduleList.length; i++) {
if (moduleList[i]) {
$.ajax({
type: "GET", url: vjr.module2fileName(moduleList[i]), dataType: "script"
});
}
}
};

每个“模块”有这样的结构:

vjr.comments = {}

vjr.comments.submitComment = function() { // do stuff }
vjr.comments.validateComment = function() { // do stuff }

// Handlers
vjr.comments.setUpUI = function() {
// Assign handlers to screen elements
}

vjr.comments.init = function () {
// initialize stuff
vjr.comments.setUpUI();
}

$(document).ready(vjr.comments.init);

鉴于我有限的Javascript知识,我知道一定有更好的方法来管理这一点,但是到现在为止它的工作非常适合我们。

使用 Dojo的包管理 dojo.requiredojo.provide和等级制度dojo.declare这也使得简单的多重继承)模块化我所有的类/部件到单独的文件。 不仅剂量这让你的代码的组织,但它也可以让你做懒/只是在类/部件的时间加载。

前几天,球员在37Signals公司发布了RTE的控制,与一捻。 他们提出,捆绑使用一种预处理器的JavaScript文件库。

我一直在使用它,因为分开我的JS文件,然后在最后将它们合并为一体。 这样,我可以单独的关注,并在结束时,有过管子(gzip压缩,不会少),只有一个文件。

在你的模板,检查如果你在开发模式,包括单独的文件,如果在生产中,包括最后一节(你将不得不“打造”自己)。

创建假班,并确保任何可以被扔进一个单独的函数,是很有意义的是这样做的。 同时一定要评了很多,不写spagghetti代码,而保持它的所有的部分。 例如,一些废话代码描绘我的理想。 很显然,在现实生活中我也写了许多库,基本上包括它们的功能。

$(function(){
//Preload header images
$('a.rollover').preload();

//Create new datagrid
var dGrid = datagrid.init({width: 5, url: 'datalist.txt', style: 'aero'});
});

var datagrid = {
init: function(w, url, style){
//Rendering code goes here for style / width
//code etc

//Fetch data in
$.get(url, {}, function(data){
data = data.split('\n');
for(var i=0; i < data.length; i++){
//fetching data
}
})
},
refresh: function(deep){
//more functions etc.
}
};

使用继承模式来组织大型jQuery的应用。

我认为这关系到,也许,DDD(领域驱动设计)。 我工作中的应用,但缺乏正式的API,并通过服务器端代码(类/文件名等)的方式给出了这样的提示。 有了这些,我创建了一个顶层对象作为一个容器整个问题域; 然后,我说在需要的命名空间:

var App;
(function()
{
App = new Domain( 'test' );

function Domain( id )
{
this.id = id;
this.echo = function echo( s )
{
alert( s );
}
return this;
}
})();

// separate file
(function(Domain)
{
Domain.Console = new Console();

function Console()
{
this.Log = function Log( s )
{
console.log( s );
}
return this;
}
})(App);

// implementation
App.Console.Log('foo');

对于JavaScript的组织使用下被

  1. 文件夹的所有的JavaScript
  2. 页级JavaScript获得它自己的文件页面相同的名称。 ProductDetail.aspx将ProductDetail.js
  3. 里面的文件夹中的JavaScript库文件我有一个lib文件夹
  4. 把你想在你的应用程序使用的lib文件夹相关的库函数。
  5. Ajax是我动的JavaScript文件夹之外,并得到它自己的文件夹中唯一的JavaScript。 然后,添加两个子文件夹,客户端和服务器
  6. 客户端文件夹中获取所有的.js文件,而服务器文件夹获取所有的服务器端文件。

我用这个小东西。 它给你'包含'指令为JS和HTML模板。 它完全eleminates残局。

https://github.com/gaperton/include.js/

$.include({
html: "my_template.html" // include template from file...
})
.define( function( _ ){ // define module...
_.exports = function widget( $this, a_data, a_events ){ // exporting function...
_.html.renderTo( $this, a_data ); // which expands template inside of $this.

$this.find( "#ok").click( a_events.on_click ); // throw event up to the caller...
$this.find( "#refresh").click( function(){
widget( $this, a_data, a_events ); // ...and update ourself. Yep, in that easy way.
});
}
});

您可以使用jQuery MX(在javascriptMVC使用),这是一组脚本,使您可以使用模型,视图和控制器。 我用它在一个项目中,帮助我建立结构化的JavaScript,有因为压缩最少的脚本大小。 这是一个控制器,例如:

$.Controller.extend('Todos',{
".todo mouseover" : function( el, ev ) {
el.css("backgroundColor","red")
},
".todo mouseout" : function( el, ev ) {
el.css("backgroundColor","")
},
".create click" : function() {
this.find("ol").append("<li class='todo'>New Todo</li>");
}
})

new Todos($('#todos'));

如果你不感兴趣的视图和模型的部分,你也可以使用jquerymx仅在控制器端。

你的问题是一个困扰我去年年底。 所不同 - 移交代码关闭以谁从来没有听说过私有和公有方法,新的开发者。 我必须建立简单的东西。

最终的结果是一个小(约1KB)架构,转换对象文本到jQuery的。 语法是在视觉上更容易扫描,如果你的JS增长确实很大,你可以写可重复使用的查询,找到的东西像使用选择,加载的文件,有关的功能,等等。

在这里张贴的小框架是不现实的,所以我写了一篇博客文章举例(我的第一次。这是一种冒险!)。 欢迎您来看一看。

对于这里的任何人用几分钟的时间检查出来,我会非常感激的反馈!

火狐推荐,因为它支持toSource()为对象查询的例子。

干杯!

亚当

我用灵感来自本·诺兰的行为自定义脚本(我无法找到一个流通环节,以这个了,伤心地)来存储我的大多数事件处理程序。 这些事件处理程序是由元素的className或ID,例如触发。 例:

Behaviour.register({
'a.delete-post': function(element) {
element.observe('click', function(event) { ... });
},

'a.anotherlink': function(element) {
element.observe('click', function(event) { ... });
}

});

我想包括大部分的飞行我的JavaScript库,除了包含全球行为的人。 我使用Zend框架的用HeadScript()占位符帮手,但你也可以使用JavaScript加载在与Ajile飞如其他脚本。

你不提你的服务器端语言是什么。 或者,更贴切,哪些框架您使用的是 - 如果有的话 - 在服务器端。

IME,我整理东西放在服务器端,并让这一切摇出到网页。 该框架被赋予组织不仅JS,每一个页面具有加载的任务,而且,与生成的标记工作的JS片段。 这样的片段,你通常不想发出一次以上 - 这就是为什么他们被抽象成的代码看这个问题后的框架。 :-)

对于最终页面必须发出自己的JS,我通常会发现有一个在生成的标记的逻辑结构。 这种局部的JS通常可以在开始和/或这样的结构的端部进行组装。

请注意,这一切都不免除您编写高效的JavaScript! :-)

延迟加载,你需要对需求的代码。 谷歌做这样的事情与他们的google.loader

分类:JavaScript的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.355 (s). 10 q(s)