本文目录一览:
Google chrome 出现WEbGL遇到问题怎么办?
异步请求过多
浏览器对并发异步请求是有限制的。如果程序不做处理,“同时”发送几百个请求就可能导致浏览器崩溃。解决这样的问题涉及到数据管理的问题。有的需要多次请求得到的数据可以重新组织在一次或几次请求完成。如果就是需要若干次请求,就需要把请求排队,用多个异步请求队列加载数据。
并发异步请求资源死锁
若一个资源被多个异步请求同时请求的时候就可能导致浏览器死锁,死锁的结果就是浏览器崩溃。默认浏览器都是启用cache的,而浏览器在从cache中读取数据的时候会加锁。就需要在组织异步请求队列的时候,相同的资源不能在不同的队列中出现
GPU进程崩溃
Chrome是多进程架构,每个Tab都会启用单独的进程来处理页面。但,所有的进程都会公用一个GPU进程。
如果开启多个WebGL应用页面,每个页面占用一定的GPU资源,GPU进程的内存加起来总的就会轻轻松松超过1.5G,结果就是GPU进程崩溃,即使是64位Chrome。
在实际中用WebGL显示大模型会轻轻松松的撑爆GPU进程。这就需要显示引擎要处理好顶点数据的内存占用。方法有很多种,这里就不多赘述了。
JS使用内存过多导致崩溃
在上图中可以看到多个内存:内存、GPU内存、Javascript内存。其中Javascript内存是JS对象占用的内存,垃圾回收会影响这部分内存。Javascript代码和垃圾回收运行在同一个线程的环境,当垃圾回收的时候,js代码不会执行。如果js对象过多,(占用内存过多),垃圾回收的过程也会变得漫长。所以Chrome简单粗暴的限制了Javascript内存的占用,在x64下最大~1.4G。解决这样的问题需要优化数据结构或者增加数据动态管理的机制。
JS代码运行Timeout
如果JS运行时间过长,超出一定的时间,浏览器就弹个对话框,让用户选择是否结束。相同的代码在chrome中没有问题,而在firefox中就可能无响应。
解决方法就是把耗时的算法设计成分部执行,结合setTimeout或者requestAnimationFrame使用。
总结:相对桌面应用,浏览器仍然是一个资源受限的环境:JS执行效率,内存管理,线程等。对于大规模的Web应用,需要不断的在效率性能和资源占用上做平衡。
chrome 如何调试js
是可以调试js的。
使用的工具:谷歌浏览器、测试的网站;
可以按照下面的方法进行调试:
1、f12 打开开发者工具,控制台介绍:
Elements:页面元素,可以进行编辑,保存后实时查看页面效果;
Network: 查看js模拟的http请求,例如下图中修改购物车中商品数量,可以实时的看到请求地址,直接上图。
2、点击请求地址,会把请求的头信息和响应信息等数据展示出来,此处非常便捷,展示样式比firebug更直观,直接上图,可以点击查看头信息,preview,响应信息,cookie,timeline对我们有用的。注意,preview是此处模拟http请求的发送数据,直接预览出来了。
3、Sources:次功能是js页面调试中最突出的功能,上图。
功能介绍:左侧sources目录可以展开,查看加载本页面所调用的资源,如js,css,php。此处先介绍断点调试,可以顺序的看到程序的执行过车,勾选右侧的Any XHR 按钮,上图。
4、一步一步执行,如添加数量的时候,可以看到右侧的call stock进程,可以看到此处出发了js中changePrice()函数,在此处我们可以进行逻辑分析了。或则在代码行处单击设置断点,英文选项是add breakpoints,单击右击都可以,最是好用,上图。
5、可以查看你设置的所有断点,右侧展开,如图,断点调试用的比较多,当然了还可以在js里直接写代码,查看实时数据变化,查看要注意ctrl+s 保存操作。
6、Timeline:次功能是查看页面性能,页面渲染速度的,一般是用不到的。测试人员可以查看,图中展示一些性能参数供参考,上图。
Profile:次功能主要测试加载文件速度参考,可以在此处上传我们的文件供测试用。点击 Load上传即可,一般用不着。
备注:Console:此功能是模拟js控制台,直接写代码,查看结果。高级功能使用时开启断点,查看变量的变化过程。还可以条用函数。
如何实现javascript多线程同时运行?
javascript没有多线程,所以也不存在多线程同时运行的说法。平时写代码的时候需要考虑尽量避免线程阻塞。
比较好的方法就是尽量使用异步+回调的方式进行处理。
为什么chrome采用多进程方式
简单的说,chrome是一个用内存换速度的浏览器。
优势:
1.每个tab,每个插件都会启动一个进程,这样即使因为某个页面崩溃了也不会影响其他页面,而firefox经常,整个崩掉。(因为各种插件,html和js都是规则比较松散的,任凭浏览器如何强大总会有更多奇怪的东西需要解析和兼容,不可能完全避免崩溃)
2.因为进程间的通信比线程更加复杂,chrome会有一个主进程去控制协调各个tab和各个插件间的进程。
劣势:
1.如果开启的页面很多,因为大量进程的存在会导致大量资源消耗。
另外,windows鼓励多线程,少进程。我认为也可能和他的资源回收设计相关,一台windowsPC连续工作一周不关闭,会非常的卡顿。linux则没有这个现象。
以上:无论是多进程还是多线程的浏览器都各有利弊,另外firefox也有计划发布多进程的浏览器。
在计算资源和内存资源逐渐廉价的个人PC上,开启十几个网页造成的进程压力也是可以接受的。