couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Caolan McMahon (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (COUCHDB-1075) Circular require's in CommonJS modules
Date Fri, 06 May 2011 16:38:03 GMT

    [ https://issues.apache.org/jira/browse/COUCHDB-1075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13030010#comment-13030010
] 

Caolan McMahon commented on COUCHDB-1075:
-----------------------------------------

I don't see the point in storing a function on the design doc if the results of the function
will never change. We may as well store the results of the function. The only issue is detecting
that a require path has found a module and not an object. Using a function allows us to detect
this because a design doc is JSON and won't contain them, but the results of a module can
be anything, so we wouldn't know if the require path had worked or if we'd found a pre-compiled
module. Having a separate store for compiled modules avoids this issue without having to constantly
call a function which will always give the same result.

Also, by caching the result and not the function you can be sure that instanceof checks will
work correctly. Consider the following, where 'a' is the cached function for a module (instead
of a module result):

> a = function () {return {b: function () { this.name = 'bee'; }}}
[Function]
> one = a();
{ b: [Function] }
> two = a();
{ b: [Function] }
> obj1 = new one.b()
{ name: 'bee' }
> obj2 = new two.b()
{ name: 'bee' }
> obj1 instanceof one.b
true
> obj1 instanceof two.b
false

> Circular require's in CommonJS modules
> --------------------------------------
>
>                 Key: COUCHDB-1075
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1075
>             Project: CouchDB
>          Issue Type: Bug
>          Components: JavaScript View Server
>            Reporter: Caolan McMahon
>              Labels: javascript
>         Attachments: module_cache.diff
>
>
> Having a CommonJS module A which requires B, when B also requires A causes the stack
to fill up with require calls. A prerequisite for this fix is the caching of modules, even
if it is only on a per-request basis.
> Patch incoming.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message