Javascript 创建一个简单使用document.write()绑定js和css文件的js文件是否存在危险?
我正在构建一个前端UI框架,供公司的开发人员用于构建内部web应用程序。它由定制引导、jQuery、其他开源库、内部模块和样式表组成。用户环境完全是IE9,我的服务器是.NET3.5。我正在托管共享文件。公司的开发团队将把链接放在他们的项目页面上,并将框架应用到他们的页面上 我想为他们提供实现这一点的最简单方法,那就是粘贴一行代码,为他们构建库。剪切和粘贴30行代码在按下Ctrl+V的那一刻就过时了,这让我无法控制,简直是不雅观 失败的实验 我尝试使用和,它们都使用插入脚本的最佳实践。但它们中的每一个都会导致在样式化之前显示内容,或者在加载脚本之前调用方法。我放弃了这种方法。 太不稳定了 一个简单的document.write()解决方案 在周末,我想:为什么我不制作一个名为“framework,js”的js文件,添加脚本和链接文件,然后用一堆document.write()行来排列。告诉开发者把它放在头上,就这样。见鬼,我可以为IE9和mobile添加必要的元标记。它是如此肮脏和简单。。。但这可能会奏效 用户群位于内部网络上,规模有限。带宽不是问题。在选择此选项之前,我将测试性能。我可以指导开发团队放置链接的位置 知道这一点并提供它确实有效,有什么理由我不应该这样做吗?Javascript 创建一个简单使用document.write()绑定js和css文件的js文件是否存在危险?,javascript,bundling-and-minification,Javascript,Bundling And Minification,我正在构建一个前端UI框架,供公司的开发人员用于构建内部web应用程序。它由定制引导、jQuery、其他开源库、内部模块和样式表组成。用户环境完全是IE9,我的服务器是.NET3.5。我正在托管共享文件。公司的开发团队将把链接放在他们的项目页面上,并将框架应用到他们的页面上 我想为他们提供实现这一点的最简单方法,那就是粘贴一行代码,为他们构建库。剪切和粘贴30行代码在按下Ctrl+V的那一刻就过时了,这让我无法控制,简直是不雅观 失败的实验 我尝试使用和,它们都使用插入脚本的最佳实践。但它们中的
我唯一的另一个选择是在服务器上进行捆绑。我希望不必求助于此,因为我自己并不拥有服务器,也不是.NET开发人员。您提出的方法非常适合您的情况。与更复杂的解决方案相比,它有几个优点,包括完全的简单性、完全可预测的执行顺序,以及与可能不适合异步加载的脚本完全兼容。我已经在生产应用程序中多次使用它,就像许多其他开发人员一样 当然,其他解决方案也有它们的优点,但是对于您正在做的事情来说,好的
document.write()
并没有什么错
听起来您有很多脚本和样式表,可能是从公共目录(或公共根目录)加载它们。为了减少framework.js
文件中的重复,您可能需要定义两个函数,一个用于为CSS编写
标记,另一个用于为JavaScript编写
标记。因此,骨架framework.js
文件可能如下所示:
(function() {
var scriptBase = 'js/';
var styleBase = 'css/';
function writeStyle( name ) {
document.write(
'<link rel="stylesheet" href="', styleBase, name, '">',
'</link>'
);
}
function writeScript( name ) {
document.write(
'<script src="', scriptBase, name, '">',
'</script>'
);
}
writeStyle( 'one.css' );
writeStyle( 'two.css' );
writeScript( 'one.js' );
writeScript( 'two.js' );
})();
(函数(){
var scriptBase='js/';
var styleBase='css/';
函数writeStyle(名称){
document.write(
'',
''
);
}
函数writeScript(名称){
document.write(
'',
''
);
}
writeStyle('one.css');
writeStyle('two.css');
writeScript('one.js');
writeScript('two.js');
})();
请注意,您不必像在使用document.write()的代码中看到的那样对
文本进行任何特殊转义。只有将此代码直接放入HTML文件中的
标记时,才需要这样做。该转义的目的是防止document.write()
调用中的
文本关闭封闭的
标记。由于您的代码位于外部.js
文件中,因此这不是问题:此文件中的
文本不会终止.js
文件
要记住的另一点是,在.js
文件中进行的所有document.write()
调用都会插入到编写它们的.js
文件之后的文档中。因此,不要期望能够在framework.js
内编写document.write()
,然后在framework.js
内编写其他代码,这取决于您刚刚编写的.js
文件。所有这些.js
文件(和.css
)都是在framework.js
之后加载的,而不是与之交错
当然,还有一个考虑因素是加载时间。如果合并并缩小CSS和JS文件,页面加载速度会更快。但如果这些是内部网络应用,页面加载时间可能是你最不担心的:可靠性和可维护性可能更重要。在任何情况下,您都可以使用document.write()
解决方案立即启动并运行,然后仅在不太可能的情况下进行优化。是的,您疯了。。。这就是你想要的吗?改写成更有建设性的。电子寿司,没有人会关闭javascript。这些都是内部网络应用程序。它工作起来很有魅力。在我的测试中,页面负载在初始负载时约为200毫秒,在后续负载时约为100毫秒。文件是按准确的顺序加载的。我也试过写IE元标签,但IE抱怨页面已经定稿了。谢谢你的鼓励。我会把答案留待一段时间,这样其他人可能会插话,但我们看起来不错。这很有效。页面负载平均为100毫秒。不同的开发平台。谢谢你鼓励我走这条路。