# File lib/erubis/engine.rb, line 48
    def self.load_file(filename, properties={})
      cachename = properties[:cachename] || (filename + '.cache')
      properties[:filename] = filename
      if test(?f, cachename) && File.mtime(filename) <= File.mtime(cachename)
        engine = self.new(nil, properties)
        engine.src = File.read(cachename)
      else
        input = File.open(filename, 'rb') {|f| f.read }
        engine = self.new(input, properties)
        File.open(cachename, 'wb') do |f|
          f.flock(File::LOCK_EX)
          f.write(engine.src)
          f.flush()
        end
      end
      engine.src.untaint   # ok?
      return engine
    end