当将大纹理图像应用到网格上一段明显的时间时,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) 我在Flex工作的最后几年.在此之前,我一直在使用vanilla JavaScript构建Web应用程序.
今天我正在切换回JavaScript,但现在我在为新的中型项目选择合适的JS框架/库时遇到了麻烦.
尽管对AngularJS的所有评论都是积极的,但我发现开始使用它并不是一件容易的事.问题当然是文档.虽然有教程向您展示如何做基本的东西,但没有一个解释概念或向您展示如何构建更大的项目.
在发现AngularJS之前,我在Backbone中设定了自己的想法.积极的一面是,有大量的文档,教程,截屏视频,关于这个主题的书籍.此外,源代码很小,可以作为参考本身(与AngularJS不同).
所以现在我认为Backbone对于那些在JS编程中使用框架而不是AngularJS的人来说可能是更好的选择.后来,当我设法训练我的大脑用JS思考时,AngularJS可能更容易理解+会有更多文档可用.
我现在怀疑这是否是正确的选择途径......
javascript ×2
angularjs ×1
apache-flex ×1
backbone.js ×1
textures ×1
three.js ×1
web-worker ×1