Tec*_*Imp 5 multithreading google-maps web-applications web-worker google-maps-api-3
情况:在页面的主线程中运行了太多的东西,使得谷歌地图的覆盖层代表来自美国人口普查数据的ZIP地区以及客户要求将地域分组为谨慎组的内容.虽然桌面上没有重大问题,但移动设备(iPad)决定线程花费的时间太长(数据返回后最多6秒),因此必须崩溃.
解决方案:卸载循环函数以将形状从每行收集到Web工作者,该工作者可以像移动设备上的资源允许一样快或慢地工作.(三个用于循环,第一个用于选择行,第二个用于选择列,第三个用于列中的每个点.执行时间:总计3-6秒,超过2000多行,有多个点)
问题:为了使其具有适当的效率,必须将这些点制作成Web工作者中的形状(多边形).但是,由于它是由google.maps.latlng对象组成的google.maps.polygon对象,因此[web worker]需要了解这些项目在Web worker中的含义.Web worker要求您不要使用窗口或DOM,因此它必须导入脚本,目的是将对象作为JSON编码项传回.由于这些项依赖于window元素,因此即使使用importScript(),代码也会在google对象的任何引用上失败.
进一步的复杂化:谷歌的API在技术上是专有的.这个用于的网络应用程序代码受NDA约束,因此可以询问有针对性的问题,但不能复制/粘贴所有代码.
解决方案/任何模糊的想法:???
TLDR:需要访问google.maps.latlng对象并在Web worker中创建(最低限度)新实例.Web worker应该返回准备好弹出的对象到google.maps.polygon对象,或者应该返回一个google.maps.polygon对象.如果由于需要窗口对象的问题而无法使用导入脚本的默认方法,如何引用google maps API?
更新:自从写这篇文章以来,我设法将大部分繁琐的工作从主线程卸载到Web工作者,允许它异步解析数据并将数据分配给定制的latlng对象.
现在捕获的是获取返回值以在适当的上下文中运行函数,以查看自定义latlng是否足以让google.maps.polygon发挥其魔力.
摘自调用Web worker的文件并侦听其响应(Coffeescript)
@shapeWorker.onmessage= (event)->
console.log "--------------------TESTING---------------"
data=JSON.parse(event.data)
console.log data
@generateShapes(data.poly,data.center,data.zipNum)
Run Code Online (Sandbox Code Playgroud)
出于某种原因,它试图在Web工作者的上下文中而不是在类的上下文中评估GenerateShapes.
太多的事情同时发生,这又让事情变得复杂起来。由于使用 -> 而不是 =>,范围受到限制,这扩展了范围以允许父类函数。
显然,问题在于该 Web 应用程序需要运行的 iOS 版本以及存储设置任意低(之前大小的十分之一)的错误。通过一些数据的缩减和对相关 iOS 版本的修复,我能够在不使用网络工作者的情况下让它运行。有一天,我也许可以和网络工作人员一起重新讨论这一问题,以提高效率。
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |