最近做了一个模块,实际很简单,用到了jquery,但是现在真是觉得js很复杂.很难控制与调试.代码太过灵活却很难理解.先说问题.我在页面上显示一颗树,用到了jquery的插件treeview.并且要在树上加右键菜单,用到了contextmenu.
最开始的做法.把要生成数的集合,包括所有的节点,子节点,一次性的传到页面,然后页面做个循环生成treeview要求的ui li的形式, js语句很简单,就是显示树要用的
$("#tree").treeview({
collapsed: true,
animated: "medium",
control:"#sidetreecontrol",
prerendered: true,
persist: "location"
});
和 加载右键菜单的:
$("strong").each(function(){
$(this).contextMenu(menu1);
});
把需要绑定右键菜单的元素,这里是所有的strong节点.
最开始是没有问题的,但是后来要求要加一些节点,问题来了,树的加载非常的慢.浏览器要死在那大概30妙.我最开始觉得可能节点多了,那么后台把数据一次传过来,页面做的那个循环可能是问题所在.
于是我把它改成了ajax的形式,已开始先加载最顶上的一层.当用户点击节点的时候再把下面的子节点展现出来.但是却仍然没有改善.我就觉得很奇怪了.我不用ie,换成safari,页面很快加载出来,没延迟.但我不可能去换浏览器来解决这个问题阿.那么可能就是那连个jquery的插件问题了.我只有钻进去看哪些晦涩难懂的代码.
我一直把注意力集中在那个treeview上.因为是树的显示慢嘛..但是,当我用ajax只显示最上层的时候,实际上就不应该很慢了,而且他对所有的li偏历也是不可避免的.
只剩下了contextmenu了.最终发现这样一段代码.
$.fn.contextMenu = function(menu,options) {
var cmenu = $.contextMenu.create(menu,options);
return this.each(function(){
$(this).bind('contextmenu',function(e){cmenu.show(this,e);return false;});
});
问题就出在这句话上.在我之前做$(this).contextMenu(menu1);的时候他就会对所有的节点进行偏历,而后每个节点执行了create这个方法,这个方法做的事情可多,他会用js先把你的右键菜单组装好.我把这句话移到bind里面就好了,因为他只有在用户右键点击的时候才加载.
罗唆完了,总结
1)ie非常垃圾,虽然这个代码确实没写好,但是 ie和其他浏览器比起来在js解析的速度上确实差太多,(我用的IE7).我主流的浏览器都测过,chrome和safari最快,firefox其次,ie 垫底.
2)关于页面相应速度的问题,浏览器负责解析html和js. 一般很多人和我一样遇到这种问题首先想到的是不是页面上加载的信息过长,这个的确是一个原因,传的数据量大,首先后台计算时间长,其次网络的传输慢,最后加上浏览器的解析,的确会慢.但是实际上这个时候很多的压力都分给了后台.页面看起来先是一片白,然后过一会加载成功.
还有个原因就是js,我们现在崇尚的是把js和html分开,那不可避免,特别是jquery 的很多写法要对html进行便历,这在特别是ie中很慢.现象是页面很快显示出来,但是不能操作,是死的,下面的进度条一直在.
所以在显示中,如果应用面对很快的浏览器,那么很多的功能因该放在js中来做,分担服务器的压力,但是如果浏览器很慢效果就不一定好了,特别现在都很流行用js在页面中动态加载节点,节点一多就要挂.
3)ajax的陷阱.顺便谈到ajax的引用,ajax实际上可以分为异步和同步,这都可以设置.实际上异步是很危险的.
举个例子.
var test="";
$.getJSON(settings.url, {root: root}, function(response) {
test="1";
}
这个时候执行完了test 还是为空的,因为在ajax还为返回的时候页面就执行了到了$.getJSON之下的语句了.
4)页面的加载顺序,这个对js 也很有影响,如果你的js要操作dom,但是你的js 却是在dom加载之前就加载了,那么这些js 是无用的.
在jquery中很多插件都是这样写的:
(function($){
........ //插件代码
})(jQuery);
这句话实际上在页面进来是最先开始执行的,先于dom的加载.所以这里你可以加载一些预先定义好的function阿,对象什么的.但不能有操作dom的操作.
我们常用的:
$(document).ready(function() {
.........
})
是在所有的dom节点加载完后执行.所以对dom的操作都放这里.
window.onload.则是最后执行,要等图片之类的加载完了财执行.
5)用过怎么多jquery的插件,很少能有完全满足自己需求的,必须要自己改些东西,所以知道一些jquery插件的写法也很有必要.
贴下代码就明白了:
这个可以扩展jquery的方法.两者的区别呢,看调用的方式:
看出不同了吗.一个是全局对象,一个要用在dom上.
分享到:
相关推荐
此外,页面集成则涉及到在泛微OA前端定制页面,通过增加或修改节点来指向报表模板,以此实现报表的个性化展示。 在项目实施过程中,需要注意到节假日和周末以及不同季节工作时间的变化,确保统计出来的流程流转效率...
同时,借助合适的工具和插件来提高工作效率,确保H5页面在各种移动设备上均能保持良好的展现效果。当然,以上的总结和分析仅为参考,实际开发中可能会遇到更多细节问题,需要开发者灵活应对。希望这些方法能够帮助到...
6. 页面缓冲置换算法:这种算法涉及多个链表,包括修改链和非修改链,来保存已经淘汰但还未写回磁盘的页面信息,提高了页面置换的效率。 页面置换算法模拟程序的产生是为了客观地展现这些算法的工作原理。通过模拟...
本文对组织业务数据处理结果集的分析提出了两种结果集展现方案:基于浏览器的页面展现以及供高级用户使用的Excel导出。同时,实现了对结果集的打印功能。 首先,通用数据处理系统的概念需要被阐述。这类系统是为了...
《Dorado展现中间件深入浅出》是一本专注于Dorado技术的专著,旨在帮助开发者深入理解并掌握Dorado在Web应用中的数据交互与页面展现。Dorado是一种强大的企业级应用开发框架,它提供了丰富的UI组件和数据处理能力,...
7. **状态设计**:包括空状态、加载状态、错误提示等,这些都需要在原型中体现,以完整展现用户体验。 8. **用户体验流程**:描绘用户从打开应用到完成特定任务的整个过程,确保每个步骤都流畅合理。 制作页面原型...
3. DOM(文档对象模型):是以一组可以使用JavaScript操作的可编程对象展现出Web页面的结构。 AJAX的工作原理是: 1. 客户端发送请求:用户通过JavaScript脚本发送请求到Web服务器。 2. 服务器处理请求:Web服务器...
在传统的应用开发中,Snaker-Web通常与JSP结合使用,以实现流程的可视化展现。然而,在现代Web开发趋势下,前后端分离成为主流,为了满足这种需求,将Snaker-Web的流程页面转换为纯HTML格式显得尤为重要。本篇将深入...
借助于浏览器的不断提升,H5页面可以在PC、手机、平板等不同设备上展现一致的效果。开发者需要注意使用渐进增强或优雅降级策略,确保在不同浏览器和设备上的兼容性。 6. 性能优化 为了保证H5页面的流畅运行,性能...
【Dorado展现中间件】是一种高性能、易用的前端展示技术,主要应用于企业级应用系统,为用户提供流畅、高效的交互体验。它集成了数据处理、界面渲染和用户体验优化等多种功能,旨在提升Web应用的响应速度和用户体验...
Ajax允许我们在不重新加载整个网页的情况下,与服务器交换数据并局部更新页面,极大地提高了交互效率。本主题主要关注的是如何在Struts框架下结合Ajax实现无页面刷新的验证码验证功能,以及在JSP页面中处理验证码的...
织梦手机PC页面同步插件是一款专为织梦(DedeCMS)内容管理系统设计的扩展工具,旨在提高网站管理效率,实现手机端和PC端页面的无缝同步。这款插件经过精心的二次开发,能够兼容织梦的多个版本,无论您的网站基于...
它不仅简化了网站结构,也提高了用户的浏览效率,尤其适合那些希望展现多维度信息但又不希望用户感到混乱的网站。通过灵活的布局和内容管理,这个模块可以帮助开发者和管理员打造出更具吸引力和互动性的网站。
页面置换算法是虚拟存储管理实现的关键,通过本次实验理解内存页面调度的机制,在模拟实现FIFO、LRU等页面置换算法的基础上,比较它们的效率及优缺点,从而了解虚拟存储实现的过程。 ● 用前端的...
- **页面展现**:确保页面内容清晰可读,视觉效果统一。 - **页面美化**:运用色彩搭配、字体选择等手段提升用户体验。 ##### 3. 页面字体 - 规定字体类型、字号、颜色等细节,以保持页面一致性。 ##### 4. 边距...
每个页面对应一张图片,用户可以通过滑动切换页面,实现类似相册的效果。 3. **RecyclerView + GridLayoutManager**: 对于图片列表展示,可以利用RecyclerView配合GridLayoutManager创建网格布局,灵活调整每行显示...
这样的设计可以提高信息的展示效率和观看者的关注度,例如,一个区域播放广告,另一个区域显示实时新闻或天气预报。"LedEUtil.java"可能是用于管理这些区域的工具类,它可能包含了对每个显示区域的初始化、更新和...
3. 快速定位页面:页面区域的树状结构使得用户能迅速找到所需的具体页面,提高使用效率。 在使用页面区域设计原型时,有几点需要注意: 1. 规划功能菜单和栏目结构:在制作原型前,设计师需预先规划好软件的功能...