如何让程序员更容易的开发Web界面,是一个持久的话题,所有的从事相关开发的公司都会碰到这个问题,并且被这个问题所深深困扰。
Tiny框架也不得不直视这个问题,确实来说,想解决这个问题,也是非常有难度与深度的,业界也有各种各样的尝试,这也是有各种各样不同框架出现的原因。
Tiny框架构建者认为,完全采用一种框架解决所有问题,是不现实的。而且即使目前找得到一种非常好的框架,暂时可以满足应用需要,但是随着技术的发展,业务的进化,就会慢慢变得不再满足业务需要。因此,Tiny框架构建从不再把做一套UI组件去适各种需求作为自己的目标。
反过来,我们看看在做Web应用中,可能会碰到的问题:
- UI中JS的引入与顺序,JS合并的问题
- UI中css的引入与顺序,CSS合并的问题
- UI中碰到性能问题时的影响范围,比如:一个树出现问题,要改动许多用到树的地方
- 代码重复的问题,同样的内容在许多地方都有,如果要改动就要改动许多个地方
- 整体布局调整困难的问题
- 程序员需要关注的内容太多的问题,JS,CSS,布局,后台业务,前台展现,尼玛界面工程师必须得是全才才可以搞得定所有问题。
- 开发效率的问题
- 执行效率的问题,前台响应要求速度更快
- 集群的问题
- 国际化的问题
- ...
因此,我在以前写过一篇文章:
UI开发的终极解决方案感兴趣的同学,可以去看看,今天的目标是利用TinyUI框架的重构SmartAdmin,使得更容易被使用。
SmartAdmin初识
SmartAdmin是一套基于JQuery,Bootstrap构建的UI组件库,说直白些,它就是个大杂烩,它把各种JQuery插件和Bootstrap整合到一起,提供了一整套基本完整的应用开发UI库,基本是拿着它就可以用来非常专业的应用系统了。
下面是界面,当然它内嵌提供了四套皮肤,可以进行切换的:
085559_R5hc_1245989.jpg (65.3 KB, 下载次数: 0)
下载附件
6天前 上传
由于SmartAdmin是商业产品,需要购买,因此不能提供其Copy,据说在Baidu可以搜到,据说可以下载。如果只是想看一下的话,请点击此链接:
http://192.241.236.31/test4.smartadmin/
SmartAdmin分析 通过对SmartAdmin的分析,发现其复用了大量的开源插件,并且利用了Ajax加载技术,在运行期加载了大量的JS插件或CSS,整个页面采用Html+JS整合而成,许多JS与页面还是分离的,也就是说对本页面中的Dom元素的处理的JS不一定在当前html文件中,所以要想看得懂是非常困难的,如果想把它应用在自己的项目当中,也是非常困难的一件事情。
举个例子来说,要显示一个小部件,需要写这么一段内容:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 |
<div class="jarviswidget" id="wid-id-0">
<!-- widget options:
usage: <div class="jarviswidget" id="wid-id-0" data-widget-editbutton="false">
data-widget-colorbutton="false"
data-widget-editbutton="false"
data-widget-togglebutton="false"
data-widget-deletebutton="false"
data-widget-fullscreenbutton="false"
data-widget-custombutton="false"
data-widget-collapsed="true"
data-widget-sortable="false"
-->
<header>
<h2><strong>Default</strong> <i>Widget</i></h2>
</header>
<!-- widget div-->
< div>
<!-- widget edit box -->
< div class="jarviswidget-editbox">
<!-- This area used as dropdown edit box -->
< input class="form-control" type="text">
<span class="note"><i class="fa fa-check text-success"></i> Change title to update and save instantly!</span>
</div>
<!-- end widget edit box -->
<!-- widget content -->
< div class="widget-body">
<p> Widget comes with a default 10 padding to the body which can be removed by adding the class <code>.no-padding</code>
to the <code>.widget-body</code> class. The default widget also comes with 5 widget buttons as displayed on top right
corner of the widget header. </p>
<a href="javascript:void(0);" class="btn btn-default btn-lg"> <strong>Big</strong> <i>Button</i> </a>
</div>
<!-- end widget content -->
</div>
<!-- end widget div -->
< /div>
|
这个程序员处理起来还是相当有难度的,好吧,这还不算过分的。 执行下面的命令:
dir *.js /s /w运行结果:
?
1
2 |
所列文件总数:
310 个文件 6,043,053 字节
|
执行下面的命令:
dir *.css /s /w运行结果:
?
1
2 |
所列文件总数:
36 个文件 1,511,412 字节
|
里面有这么多的JS,有这么多的CSS,它们的引入顺序也是非常重要的,稍有差错,就会有js错误的问题。 再来看看,JS加载过程:
093417_JwIh_1245989.jpg (131.21 KB, 下载次数: 0)
下载附件
6天前 上传
可以看到,要访问大量的js,CSS,对于服务器的压力是比较大的,客户端加载时间也是比较长的,程序员要厘清这些关系,也是非常困难的。
SmartAdmin重构 对SmartAdmin重构,是指按照Tiny框架的体系结构来进行重构。
第一步,厘清关系
通过整理,发现smartadmin中使用的js插件有如下之多:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 |
bootstrap
bootstrapProgressbar
bootstrapSlider
bootstrapTags
bootstrapTimepicker
bootstraptree
bootstrapWizard
ckeditor
colorhelpers
colorpicker
datatables
delete-table-row
dropzone
easyPieChart
excanvas
fastclick
flot
FontAwesome
fueluxwizard
fullcalendar
ie-placeholder
ion-slider
jquery
jquery-form
jquery-nestable
jquery-touch
jqueryui
jqueryvalidate
js-migrate
jstorage
knob
markdown
maskedInput
maxlength
morris
msieFix
multiselect
notification
noUiSlider
pace
prettify
raphael
select2
selectToUISlider
smartadmin
smartwidgets
sparkline
summernote
superbox
throttle-denounce
typeahead
vectormap
x-editable
|
第二步:UI插件,组件包化: 比如JQuery组件包化,就是编写下面的文件:jquery.ui.xml
1
2
3
4
5 |
<ui-components>
<ui-component name="jquery">
<js-resource>/jquery/jquery-1.11.0.js</js-resource>
</ui-component>
< /ui-components>
|
比如JQueryUI组修的包化,就是编写下面的文件:jqueryui.ui.xml
1
2
3
4
5
6 |
<ui-components>
<ui-component name="jqueryui" dependencies="jquery">
<js-resource>/jqueryui/js/jquery-ui-1.10.4.custom.js</js-resource>
<css-resource>/jqueryui/css/smoothness/jquery-ui-1.10.4.custom.css</css-resource>
</ui-component>
< /ui-components>
|
比如BootStrap组件包化,就是写下面的文件:bootstrap.ui.xml
1
2
3
4
5
6 |
<ui-components>
<ui-component name="bootstrap" dependencies="jqueryui">
<css-resource>/bootstrap/css/bootstrap.min.css</css-resource>
<js-resource>/bootstrap/js/bootstrap.js</js-resource>
</ui-component>
< /ui-components>
|
其它类推,最主要的目的就是要分清,用到哪些JS,哪些CSS,并且整理组件包之间的依赖关系,比如,上面BootStrap就依赖了jqueryui,当然jqueryui依赖了JQuery
通过上面的依赖树Tiny框架就可以自动构建好CSS及JS资源。
因为这些资源都是放在Jar工程的main/resources目录中,因此就直接打进jar包了。
第三步,编写宏 比如,原来的Tab,需要涉及到html,js,编写后续使用的宏如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
#**
* JqueryUI Tab
* juiTab[1..1]
* juiTabHeader[1..1]
* juiTabHeaderItem[1..n]
* juiTabContentItem[1..n]
*#
#macro(juiTab $juiTabId)
< div id="$juiTabId">
$bodyContent
< /div>
< script>
$(document).ready(function(){
$('#$juiTabId').tabs();
});
< /script>
#end
#macro(juiTabHeader)
< ul>
$bodyContent
< /ul>
#end
#macro(juiTabHeaderItem $juiTabContentItemId)
< li>
<a href="#$juiTabContentItemId">$bodyContent</a>
< /li>
#end
#macro(juiTabContentItem $juiTabContentItemId)
< div id="$juiTabContentItemId">
$bodyContent
< /div>
#end
|
以后的程序员就可以以如下方式编写一个Tab页了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
#@juiTab("tabs")
#@juiTabHeader()
#@juiTabHeaderItem("tabs-a")First#end
#@juiTabHeaderItem("tabs-b")Second#end
#@juiTabHeaderItem("tabs-c")Third#end
#end
#@juiTabContentItem("tabs-a")
tabs-a content
#end
#@juiTabContentItem("tabs-b")
tabs-b content
#end
#@juiTabContentItem("tabs-c")
tabs-c content
#end
#end
|
通过上面的处理,封闭了代码的具体实现,而换之以容易理解的宏,在提升开发人员开发效率方面,提升代码的易维护性方面都有显著提升。尤其是在需要变化的时候,只要接口不变化,很多的时候,只要修改宏定义即可,对于程序员写的界面文件,完全可以做到透明化处理。
重构之后的结果
095647_eKv2_1245989.jpg (116.15 KB, 下载次数: 0)
下载附件
6天前 上传
可以看到,重构之后的界面样式与原来没有任何变化。
接下来看看,JS的加载:从原来的许多个js文件,变成只加载两个,说明js文件已经被合并并压缩传输。
095845_XPrk_1245989.jpg (22.87 KB, 下载次数: 0)
下载附件
6天前 上传
再来看看css的加载,可以看到,也是只需要一个就可以了:
100106_Nfi0_1245989.jpg (19.11 KB, 下载次数: 0)
下载附件
6天前 上传
重构之后写个小组件,是下面的样子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
#@jarvisWidget("wid-id-0" '<strong>Default</strong> <i>Widget</i>')
#@jarvisWidgetHeader()
#end
#@jarvisWidgetBody()
#@widgetEditBox()
<input class="form-control" type="text">
<span class="note"><i class="fa fa-check text-success"></i> Change title to update and save instantly!</span>
#end
#@widgetBody()
<p> Widget comes with a default 10 padding to the body which can be removed by adding the class
<code>.no-padding</code>
to the <code>.widget-body</code> class. The default widget also comes with 5 widget buttons as
displayed on top right
corner of the widget header. </p>
<a href="javascript:void(0);" class="btn btn-default btn-lg"> <strong>Big</strong> <i>Button</i>
</a>
#end
#end
#end
|
总结 通过对SmartAdmin进行重构,成功的理清了smartadmin中的css,js关系,便于进行后续复用。
通过编写宏,可以在组件开发人员与页面开发人员之间进行隔离。由组件开发人员与js,css等打交道,而让页面开发人员只关注业务展现。
分享到:
相关推荐
SmartAdmin Layout API允许您为几乎任何设备自定义项目 - 无论是移动设备,Web还是WebApp - SmartAdmin都能满足您的需求!亲爱的用户,如果您尝试从1.9版升级到4.0版,请注意没有转换方法。SmartAdmin 4.0是一个彻底...
"SmartAdmin - Responsive WebApp 4.5.1" 是一款高级且功能丰富的响应式Web应用程序模板,专为开发高效、现代和用户友好的管理界面而设计。该模板以其灵活性和适应性著称,能够自动调整布局以适应各种设备,包括桌面...
SmartAdmin是一款广受欢迎的前端框架,专为现代Web应用程序设计,提供了一整套优雅的界面和组件,使得开发者能够快速构建功能丰富的交互式界面。在本案例中,我们讨论的是SmartAdmin的v1.5.2 PHP开发版,这是一个...
一个好用的前端框架,超级强大,值得拥有! SmartAdmin WebApp - ... SmartAdmin Layout API lets you customize your project for almost any device - be it Mobile, Web or WebApp - SmartAdmin has you covered!
【标题】"smartadmin bootstrap angularjs admin 响应式后台模板"所指的是一款基于Bootstrap框架和AngularJS开发的管理后台界面模板。SmartAdmin是一款流行的、功能丰富的、响应式的前端框架,它专为构建现代Web应用...
完整版,还有官方文档 共计204M ,文件过大,分3次上传 之前的2个写成4次上传 写错了
SmartAdmin模板是Web开发领域中的一款热门资源,尤其在Bootstrap框架的基础上,它为开发者提供了丰富且全面的UI元素和功能组件,使得创建专业、美观且功能强大的网页变得更为便捷。在本文中,我们将深入探讨...
一个好用的前端框架,超级强大,值得拥有! SmartAdmin WebApp - ... SmartAdmin Layout API lets you customize your project for almost any device - be it Mobile, Web or WebApp - SmartAdmin has you covered!
【UIFramework】是一个示例项目,它结合了【SpringMvc】和【SmartAdmin】两个关键组件,用于构建现代化的Web应用程序界面。这个项目的核心目的是展示如何有效地整合这两者,为开发者提供一个快速开发用户界面的基础...
此外,SmartAdmin对UI/UX的重视,体现在每个细节的处理上,如图标的选择、交互效果的实现,都充分考虑了用户体验,使得设计作品更具吸引力。 4. **功能特性** - **响应式布局**:适应各种屏幕尺寸,无论是桌面还是...
《SmartAdmin v4.0.1:重构版后台管理模板详解》 SmartAdmin v4.0.1是一款备受赞誉的后台管理模板,以其强大的功能、优雅的设计和易用性赢得了广大开发者的好评。这个版本是对其前代的全面重构,不仅优化了性能,还...
Smartadmin 1.8.8.0 Ajax版本是一款卓越的Web应用程序框架,它以其超凡的设计理念和卓越的性能,成为了众多开发者在构建管理界面时的首选。这款纯HTML、基于Ajax的框架,不仅提供了丰富的功能,还具有出色的用户体验...
在构建企业级后台系统时,SmartAdmin 1.3 能够帮助开发者快速构建出美观且高效的管理界面,从而提高工作效率,减少项目开发的时间成本。 SmartAdmin 1.3 的核心特点在于其组件的全面性和灵活性。通过提供的各种元素...
一个好用的前端框架,超级强大,值得拥有! SmartAdmin WebApp - ... SmartAdmin Layout API lets you customize your project for almost any device - be it Mobile, Web or WebApp - SmartAdmin has you covered!
《SmartAdmin-ajax中文版:构建高效响应式前端模板的全面解析》 SmartAdmin-ajax中文版是一款基于Bootstrap框架的...通过理解其核心技术和应用场景,开发者可以更有效地利用这一资源,提升项目的开发效率和用户体验。
SmartAdmin布局API可让您为几乎任何设备(无论是移动设备,Web还是Web应用程序)自定义您的项目 - 您可以使用SmartAdmin! 包含: AJAX Angular_5 AngularJS_1.x_legacy ASP.NET_Core2 ASP.NetMVC5 Email_Templates...
总的来说,SmartAdmin 1.9.2是一款利用Angular 5和TypeScript构建的现代化WebApp模板,它的设计和实现充分展示了这两种技术的强大潜力。无论是从设计角度还是开发角度,它都为开发者提供了高效、优雅的解决方案,是...
《SmartAdmin1.9.0:打造高效后台管理体验》 SmartAdmin1.9.0是一款备受...无论你是前端工程师、后端开发者还是设计师,都能在SmartAdmin中找到满足项目需求的最佳实践,从而提升开发效率,打造出优质的后台管理界面。
4. **数据分析可视化**:通过集成如Chart.js、Morris.js等图表库,SmartAdmin能够展示各种统计数据,让数据以直观的图形形式呈现,便于分析和决策。 5. **预设页面**:包括登录、注册、仪表盘、表格、图表、邮件、...
一个好用的前端框架,超级强大,值得拥有! SmartAdmin WebApp - ... SmartAdmin Layout API lets you customize your project for almost any device - be it Mobile, Web or WebApp - SmartAdmin has you covered!