小编kne*_*ola的帖子

在 Three.js 中从 Web Worker 加载纹理

当将大纹理图像应用到网格上一段明显的时间时,Three.js 会锁定浏览器的主线程。让我们考虑以下示例:

var texLoader = new THREE.TextureLoader();

texLoader.load('someLargeTexture.jpg', function(texture) {
    var geometry = new THREE.SphereGeometry(10, 32, 32);
    var material = new THREE.MeshBasicMaterial({map: texture});
    var sphere = new THREE.Mesh(geometry, material);

    // adding the object to the scene will lock up the browser's main thread
    scene.add(sphere);
});
Run Code Online (Sandbox Code Playgroud)

我还注意到以下几点:

  • 如果新对象没有添加到场景中,则不会发生线程锁定
  • 改变对象的几何形状不会导致锁定
  • 如果使用从现有对象(已存在于场景中)借用的材质创建新对象将不会导致锁定
  • 将新材质分配给现有对象(已存在于场景中)将导致锁定

我的结论是,Three.js 在材质添加到场景时对其进行了一些处理。结果被缓存并稍后重新使用。

问题是这项工作是否可以以某种方式卸载给 Web Worker,这样主线程就不会被锁定?

工人可能看起来像这样:

var texLoader = new THREE.TextureLoader();

texLoader.load('someLargeTexture.jpg', function(texture) {
    var material = new THREE.MeshBasicMaterial({map: texture});

    // ... long-running work goes …
Run Code Online (Sandbox Code Playgroud)

javascript multithreading textures web-worker three.js

5
推荐指数
1
解决办法
2877
查看次数

Backbone是否比AngularJS更适合初学者?

我在Flex工作的最后几年.在此之前,我一直在使用vanilla JavaScript构建Web应用程序.

今天我正在切换回JavaScript,但现在我在为新的中型项目选择合适的JS框架/库时遇到了麻烦.

尽管对AngularJS的所有评论都是积极的,但我发现开始使用它并不是一件容易的事.问题当然是文档.虽然有教程向您展示如何做基本的东西,但没有一个解释概念或向您展示如何构建更大的项目.

在发现AngularJS之前,我在Backbone中设定了自己的想法.积极的一面是,有大量的文档,教程,截屏视频,关于这个主题的书籍.此外,源代码很小,可以作为参考本身(与AngularJS不同).

所以现在我认为Backbone对于那些在JS编程中使用框架而不是AngularJS的人来说可能是更好的选择.后来,当我设法训练我的大脑用JS思考时,AngularJS可能更容易理解+会有更多文档可用.

我现在怀疑这是否是正确的选择途径......

javascript apache-flex backbone.js angularjs

3
推荐指数
1
解决办法
3188
查看次数