Some people 'cache' content to disk in the form of Tcl pages. There's
the logic in there that needs to run at page delivery time, plus some
data from a db, for example.  New Tcl pages are created as new content
arrives, deleted as necessary.

The ns:tclcache_* procs are only ever created.  This is a cache of
infinite size.

It may be easier to just bite the bullet and create an ADP wrapper
that simulates a single-chunk ADP page...



On 7/22/06, Vlad Seryakov <[EMAIL PROTECTED]> wrote:
Update of /cvsroot/naviserver/naviserver/tcl
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv23802/tcl

Modified Files:
        file.tcl
Log Message:
Use wrapped Tcl proc aroun d.tcl file instead of not exactly as needed working 
global ns_cache for cacheing Tcl bytecode


Index: file.tcl
===================================================================
RCS file: /cvsroot/naviserver/naviserver/tcl/file.tcl,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** file.tcl    9 Mar 2006 11:25:55 -0000       1.7
--- file.tcl    22 Jul 2006 02:24:09 -0000      1.8
***************
*** 53,57 ****
      ns_register_proc POST /*.tcl ns_sourceproc
      ns_register_proc HEAD /*.tcl ns_sourceproc
-     ns_cache_create ns:filecache [ns_config $path filecachesize 5000000]
  }

--- 53,56 ----
***************
*** 86,126 ****
  #
  # Side effects:
! #   Caches the file content and Tcl_Obj's rep of the
! #   sourced script in per-thread cache (is this true?)
  #

! proc ns_sourcefile {filename} {
!
!     file stat $filename stat
!     set current_cookie $stat(mtime):$stat(ctime):$stat(ino):$stat(dev)
!
!     #
!     # Read current cached file
!     #
!
!     set pair [ns_cache_eval ns:filecache $filename {
!         list $current_cookie [ns_fileread $filename]
!     }]

!     #
!     # If changed, re-cache it
!     #

!     if {[lindex $pair 0] ne $current_cookie} {
!         ns_cache_flush ns:filecache $filename
!         set pair [ns_cache_eval ns:filecache $filename {
!             list $current_cookie [ns_fileread $filename]
!         }]
      }
!
!     #
!     # And here's the magic part. We're using "for" here to translate the
!     # text source file into bytecode, which will be associated with the
!     # Tcl_Obj we just cached (as its internal representation).  "eval"
!     # doesn't do this as the eval provided in Tcl uses the TCL_EVAL_DIRECT
!     # flag, and hence interprets the text directly.
!     #
!
!     uplevel [for [lindex $pair 1] {0} {} {}]
  }

--- 85,107 ----
  #
  # Side effects:
! #   Each .tcl file will be wrapped into Tcl proc in every thread
  #

! proc ns_sourcefile { path } {

!     set proc0 [info procs ns:tclcache_$path]
!     file stat $path stat
!     set cookie0 $stat(mtime):$stat(ctime):$stat(ino):$stat(dev)

!     # Verify file modification time
!     if { $proc0 == "" || [$proc0 1] != $cookie0 } {
!       set code [ns_fileread $path]
!       proc ns:tclcache_$path { {getcookie 0} } "
!          if { \$getcookie } { return $cookie0 }
!          $code
!       "
      }
!     # Run the proc
!     ns:tclcache_$path
  }



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
naviserver-commits mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/naviserver-commits


Reply via email to