performa joomla pada iis
<p>kami memiliki situs web yang di-host di server iis 7.5.</p><p>kami memiliki salinan situs web yang sama di server apache2.2/centos 6.x.</p><p>pada iis situs lebih lambat (sekitar dua kali lebih lama atau lebih) dan sejauh ini kami belum dapat meningkatkan waktu respons server dan/atau kecepatan situs secara umum (frontend dan backend) ).</p><p>saya tidak tahu tentang iis, jadi sulit mengetahui apa yang harus dilakukan (untuk saya).</p><p>sejauh ini kami telah mencoba:</p><ul> <li>beberapa penyetelan mysql</li> <li>mengaktifkan kompresi gzip tanpa hasil.</li> <li>ekstensi jotcache (berfungsi tetapi situs webnya masih lebih lambat daripada di apache)</li> <li>menonaktifkan atau menghapus instalan ekstensi yang tidak dibutuhkan.</li> <li>jch optimize pro</li> <li>tidak php cache (ada ide?)</li> </ul><p>dugaan saya adalah bahwa kita perlu/harus bekerja pada konfigurasi server/php/mysql, namun saya tidak tahu apakah ada sesuatu yang istimewa yang harus kita lakukan untuk meningkatkan kinerja pada iis dan membuatnya secepat mungkin di apache. apa yang dapat kita lakukan untuk meningkatkan kinerja pada iis?</p><p>saat ini waktu respons server kami lebih lama dari 1,5 detik di situs web iis dan sekitar 0,4 detik di apache.</p>
<p>ketahuilah bahwa php pada umumnya lebih lambat di bawah windows daripada di bawah sistem operasi seperti unix. semuanya menjadi lebih baik dengan versi yang lebih baru (pembaruan!) tetapi masih ada perbedaan yang terukur.</p><p>yang mengatakan ada dua langkah besar yang harus diambil ketika mengoptimalkan server anda php kinerja:</p><ol> <li> <p>gunakan fastcgi</p> <p>walaupun fpm hanya berfungsi di unix, fastcgi juga bekerja dengan iis di bawah windows. ini tutorial dari microsoft sendiri tentang cara melakukannya: <a href="http://www.iis.net/learn/application-frameworks/running-php-applications-on-iis/set-up-fastcgi-for-php">http://www.iis.net/ learn/application-frameworks/running-php-application-on-iis/set-up-fastcgi-for-php</a> </p> </li> <li> <p>gunakan cache opcode</p> <p>sekali lagi microsoft telah anda tutupi dengan ekstensi <a href="http://www.iis.net/downloads/microsoft/wincache-extension">wincache</a> .</p> </li> </ol><p>jika anda masih memiliki masalah kinerja setelah langkah-langkah ini, saya sarankan untuk membuat profil versi windows dan linux. anda dapat menggunakan <a href="http://www.php.net/manual/en/book.xhprof.php">xhprof</a> atau <a href="http://xdebug.org">xdebug</a> . coba cari tahu apakah anda memiliki masalah dengan kinerja php atau mysql. tes lain yang bisa anda lakukan adalah melayani kedua salinan dari server database yang sama (harus menjadi server ketiga). itu akan dengan cepat memberi tahu anda apakah anda memiliki php atau masalah mysql.</p>
<p>ini terdengar bodoh tapi saya punya masalah yang sangat lambat sql server management studio dan trik ini menyelesaikannya:</p><ul> <li>buka internet explorer</li> <li>pergi ke alat -&gt; opsi internet</li> <li>buka tab "advanced"</li> <li>hapus centang "periksa pencabutan sertifikat server (harus dimulai ulang)"</li> </ul><p>trik ini hanya efektif jika komputer tempat sql server management studio anda diinstal tidak terhubung ke internet. hanya melakukan itu menyelesaikan masalah saya. mungkin itu akan menyelesaikan masalah anda.</p> <p>rencana yang anda miliki saat ini terlihat seperti rencana paling optimal bagi saya.</p><p>saya tidak setuju dengan pernyataan di jawaban lain bahwa ia mengirim baris 2.6m ke server jarak jauh.</p><p>rencana itu terlihat bagi saya seolah-olah untuk masing-masing 54 baris yang dikembalikan dari permintaan jarak jauh itu melakukan pencarian indeks ke tabel lokal anda untuk menentukan apakah cocok atau tidak. ini adalah rencana optimal.</p><p>mengganti dengan hash join atau gabung bergabung akan menjadi kontraproduktif mengingat ukuran tabel dan menambahkan perantara <code>#temp</code> table hanya menambahkan langkah tambahan yang sepertinya tidak memberi anda keuntungan.</p> <p>tidak, redis lebih dari sekadar cache. </p><p>seperti cache, redis menyimpan kunci = pasangan nilai. tetapi tidak seperti cache, redis memungkinkan anda beroperasi pada nilai-nilai. ada 5 tipe data dalam redis - string, set, hash, daftar dan set diurutkan. setiap tipe data memperlihatkan berbagai operasi.</p><p>cara terbaik untuk memahami redis adalah dengan memodelkan suatu aplikasi tanpa memikirkan bagaimana anda akan menyimpannya dalam database. </p><p>katakanlah kita ingin membangun stackoverflow.com. untuk membuatnya sederhana, kita membutuhkan pertanyaan, jawaban, tag, dan pengguna.</p><h2>pertanyaan modeling, pengguna dan jawaban</h2><p>setiap objek dapat dimodelkan sebagai peta. misalnya, pertanyaan adalah peta dengan bidang {id, judul, date\_asked, suara, asked\_by, status}. demikian pula, sebuah jawaban adalah peta dengan bidang {id, question\_id, answer\_text, answer\_by, suara, status}. demikian pula, kita dapat memodelkan objek pengguna.</p><p>masing-masing benda ini dapat langsung disimpan di redis sebagai hash. untuk menghasilkan id unik, anda dapat menggunakan perintah kenaikan atom. sesuatu seperti ini - </p><pre><code>$ hincrby unique\_ids question 1 (integer) 1 $ hmset question:1 title "is redis just a cache?" asked\_by 12 votes 0 ok $ hincrby unique\_ids answer 1 (integer) 1 $ hmset answer:1 question\_id 1 answer\_text "no, its a lot more" answered\_by 15 votes 1 ok </code></pre><h2>menangani suara</h2><p>sekarang, setiap kali seseorang menjawab pertanyaan atau jawaban, anda hanya perlu melakukan ini </p><pre><code>$ hincrby question:1 votes 1 (integer) 1 $ hincrby question:1 votes 1 (integer) 2 </code></pre><h2>daftar pertanyaan untuk beranda</h2><p>selanjutnya, kami ingin menyimpan pertanyaan terbaru untuk ditampilkan di beranda. jika anda sedang menulis program .net atau java, anda akan menyimpan pertanyaan dalam daftar. ternyata, itu adalah cara terbaik untuk menyimpan ini di redis juga. </p><p>setiap kali seseorang mengajukan pertanyaan, kami menambahkan idnya ke daftar. </p><pre><code>$ lpush questions question:1 (integer) 1 $ lpush questions question:2 (integer) 1 </code></pre><p>sekarang, ketika anda ingin merender beranda, anda meminta redis untuk 25 pertanyaan terbaru. </p><pre><code>$ lrange questions 0 24 1) "question:100" 2) "question:99" 3) "question:98" 4) "question:97" 5) "question:96" ... 25) "question:76" </code></pre><p>sekarang setelah anda memiliki id, ambil item dari redis menggunakan pipelining dan menunjukkannya kepada pengguna.</p><h2>pertanyaan dengan tag, diurut berdasarkan pilihan</h2><p>selanjutnya, kami ingin mengambil pertanyaan untuk setiap tag. tetapi so memungkinkan anda untuk melihat pertanyaan pilihan teratas, pertanyaan baru atau pertanyaan yang tidak dijawab di bawah setiap tag.</p><p>untuk memodelkan ini, kami menggunakan fitur set diurutkan redis. set diurutkan memungkinkan anda untuk mengaitkan skor dengan setiap elemen. anda kemudian dapat mengambil elemen berdasarkan skor mereka. </p><p>ayo maju dan lakukan ini untuk tag redis </p><pre><code>$ zadd questions\_by\_votes\_tagged:redis 2 question:1 (integer) 1 $ zadd questions\_by\_votes\_tagged:redis 10 question:2 (integer) 1 $ zadd questions\_by\_votes\_tagged:redis 5 question:613 (integer) 1 $ zrange questions\_by\_votes\_tagged:redis 0 5 1) "question:1" 2) "question:613" 3) "question:2" $ zrevrange questions\_by\_votes\_tagged:redis 0 5 1) "question:2" 2) "question:613" 3) "question:1" </code></pre><p>apa yang kita lakukan di sini? kami menambahkan pertanyaan ke set yang diurutkan, dan mengaitkan skor (jumlah suara) untuk setiap pertanyaan. setiap kali sebuah pertanyaan dibatalkan, kami akan menambah nilainya. dan ketika pengguna mengklik &quot;pertanyaan yang ditandai redis, disortir berdasarkan suara&quot;, kami hanya melakukan <code>zrevrange</code> dan mendapatkan kembali pertanyaan teratas.</p><h2>pertanyaan waktu nyata tanpa halaman yang menyegarkan</h2><p>dan akhirnya, fitur bonus. jika anda membiarkan halaman pertanyaan terbuka, so akan memberi tahu anda ketika pertanyaan baru ditambahkan. bagaimana redis bisa membantu di sini?</p><p>redis memiliki model pub-sub. anda dapat membuat saluran, misalnya &quot;channel\_questions\_tagged\_redis&quot;. anda kemudian <code>subscribe</code> pengguna ke saluran tertentu. ketika pertanyaan baru ditambahkan, anda akan <code>publish</code> pesan ke saluran itu. semua pengguna akan mendapatkan pesan. anda harus menggunakan teknologi web seperti soket atau komet web untuk benar-benar mengirimkan pesan ke browser, tetapi redis membantu anda dengan semua pipa ledeng di sisi server.</p><h2>kegigihan, keandalan, dll.</h2><p>tidak seperti cache, redis tetap menyimpan data pada hard disk. anda dapat memiliki pengaturan master-slave untuk memberikan keandalan yang lebih baik. untuk mempelajari lebih lanjut, buka topik kegigihan dan replikasi di sini - <a href="http://redis.io/documentation">http://redis.io/documentation</a> </p> <p>arsitektur innodb menuntut penggunaan empat tipe dasar halaman info</p><ul> <li>halaman data tabel</li> <li>halaman indeks tabel</li> <li>tabel metadata</li> <li> <a href="http://en.wikipedia.org/wiki/multiversion\_concurrency\_control"><strong> [~ # ~] mvcc [~ # ~] </strong></a> data (untuk mendukung isolasi transaksi dan <a href="http://en.wikipedia.org/wiki/acid"><strong> kepatuhan acid </strong></a> ) <ul> <li>segmen kembalikan</li> <li>batalkan spasi</li> <li>double write buffer (penulisan latar belakang untuk mencegah ketergantungan pada caching os)</li> <li>masukkan buffer (mengelola perubahan pada indeks sekunder yang tidak unik)</li> </ul> </li> </ul><p> <a href="http://www.scribd.com/doc/31337494/xtradb-innodb-internals-in-drawing"><strong> <em> lihat representasi pictorial dari ibdata1</em> </strong></a> </p><p>secara default, <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan. ini menyebabkan keempat jenis halaman info mendaratkan satu file bernama ibdata1. banyak orang mencoba menyebar data dengan membuat banyak file ibdata. ini dapat menyebabkan fragmentasi data dan halaman indeks.</p><p>inilah sebabnya saya sering <a href="https://stackoverflow.com/a/4056261/491757">merekomendasikan untuk membersihkan infrastruktur innodb, menggunakan file ibdata1 default dan tidak lebih</a> .</p><p>menyalin sangat berbahaya karena infrastruktur di mana innodb bekerja. ada dua infrastruktur dasar</p><ul> <li>innodb\_file\_per\_table dinonaktifkan</li> <li>innodb\_file\_per\_table diaktifkan</li> </ul><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan, semua jenis info innodb ini tinggal di dalam ibdata1. satu-satunya manifestasi dari setiap tabel innodb di luar ibdata1 adalah file .frm dari tabel innodb. menyalin semua data innodb sekaligus membutuhkan menyalin semua/var/lib/mysql.</p><p>menyalin tabel innodb individu sama sekali tidak mungkin. anda harus membuang mysql untuk mengekstrak dump tabel sebagai representasi logis dari data dan definisi indeks yang sesuai. anda kemudian akan memuat dump itu ke database lain di server yang sama atau server lain.</p><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan, data tabel dan indeksnya tinggal di folder database di sebelah file .frm. misalnya, untuk tabel db1.mytable, manifestasi dari tabel innodb di luar ibdata1 adalah:</p><ul> <li><code>/var/lib/mysql/db1/mytable.frm</code></li> <li><code>/var/lib/mysql/db1/mytable.ibd</code></li> </ul><h1>tablespace sistem <code>ibdata1</code></h1><p>semua metadata untuk db1.mytable masih berada di ibdata1 dan <em> sama sekali tidak ada jalan lain</em>. redo log dan data mvcc juga masih hidup dengan ibdata1.</p><p>ketika datang ke tabel fragmentasi, inilah yang terjadi pada ibdata1:</p><ul> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan </strong>: anda dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code>. ini menghasilkan /var/lib/mysql/db1/mytable.ibd secara fisik lebih kecil tanpa fragmentasi.</li> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan </strong>: anda tidak dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code> karena berada dengan ibdata1. menjalankan perintah mana pun sebenarnya, membuat tabel berdekatan dan lebih cepat untuk membaca dan menulis. sayangnya, itu terjadi pada akhir ibdata1. ini membuat ibdata1 tumbuh dengan cepat. <a href="https://stackoverflow.com/a/4056261/491757">ini sepenuhnya dibahas di pos pembersihan innodb saya</a> .</li> </ul><h1>peringatan (atau bahaya sebagai <a href="http://www.youtube.com/watch?v=rg0ochx16dg&amp;feature=related">robot akan mengatakan dalam lost in space</a> )</h1><p>jika anda berpikir untuk hanya menyalin file .frm dan .ibd, anda sejalan dengan dunia yang menyakitkan. menyalin file .frm dan .ibd dari tabel innodb hanya baik <strong> <em> jika dan hanya jika anda dapat menjamin bahwa id tablespace dari file .ibd cocok persis dengan entri tablespace id di metadata dari file ibdata1</em> </strong>.</p><p>saya menulis dua posting di dba stackexchange tentang konsep id tablespace ini</p><ul> <li> <a href="https://dba.stackexchange.com/questions/9500/table-compression-in-innodb/9555#9555">kompresi tabel dalam innodb?</a> (di bawah judul 'memulihkan database')</li> <li> <a href="https://dba.stackexchange.com/questions/6268/how-to-recover-an-innodb-table-whose-files-were-moved-around/6269#6269">cara memulihkan tabel innodb yang file-nya dipindahkan</a> </li> </ul><p>berikut ini adalah tautan yang sangat baik tentang cara memasang kembali file .ibd ke ibdata1 jika id tablespace tidak cocok: <a href="http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file">http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in- file</a> . setelah membaca ini, anda harus segera menyadari bahwa menyalin file .ibd benar-benar gila.</p><p>untuk innodb, anda hanya perlu memindahkan sesuatu ini</p><pre><code>create table db2.mytable like db1.mytable; insert into db2.mytable select * from db1.mytable; </code></pre><p>untuk membuat salinan tabel innodb.</p><p>jika anda memigrasikannya ke server db lain, gunakan mysqldump.</p><p>sehubungan dengan mencampur semua tabel innodb dari semua database, saya benar-benar dapat melihat kebijaksanaan dalam melakukannya. di perusahaan hosting db/web perusahaan saya, saya memiliki satu klien mysql yang memiliki tabel di satu basis data yang batasannya dipetakan ke tabel lain di basis data lain dalam instance mysql yang sama. dengan satu repositori metadata yang umum, itu membuat dukungan transaksional dan pengoperasian mvcc mungkin di beberapa basis data.</p> <p>tersandung pada ini, anehnya sulit ditemukan lagi nanti. menempatkan di sini untuk anak cucu:</p><pre><code>sudo yum install nodejs npm --enablerepo=epel </code></pre><p><strong>edit 3:</strong> pada juli 2016, <strong>edit 1</strong> tidak lagi berfungsi untuk nodejs 4 (dan <strong>edit 2</strong> keduanya). jawaban ini ( <a href="https://stackoverflow.com/a/35165401/78935">https://stackoverflow.com/a/35165401/78935</a> ) memberikan one-liner sejati.</p><p><strong>edit 1:</strong> jika anda mencari nodejs 4, silakan coba repo pengujian epel:</p><pre><code>sudo yum install nodejs --enablerepo=epel-testing </code></pre><p><strong>edit 2:</strong> untuk memutakhirkan dari nodejs 0.12 diinstal melalui repo epel menggunakan perintah di atas, ke nodejs 4 dari repo pengujian epel, silakan ikuti langkah-langkah ini:</p><pre><code>sudo yum rm nodejs sudo rm -f /usr/local/bin/node sudo yum install nodejs --enablerepo=epel-testing </code></pre><p>paket-paket yang lebih baru menempatkan binari simpul di <code>/usr/bin</code>, bukan <code>/usr/local/bin</code>.</p><p><em>dan latar belakang:</em></p><p>opsi <code>--enablerepo=epel</code> menyebabkan <code>yum</code> untuk mencari paket dalam repositori epel.</p><blockquote> <p>epel (paket ekstra untuk perusahaan linux) adalah proyek repositori berbasis komunitas dan open source dari tim fedora yang menyediakan 100% paket perangkat lunak tambahan berkualitas tinggi untuk distribusi linux termasuk rhel (red hat enterprise linux), centos, dan scientific linux. proyek epel bukan bagian dari rhel/cent os tetapi dirancang untuk distribusi linux utama dengan menyediakan banyak paket sumber terbuka seperti jaringan, sys admin, pemrograman, pemantauan dan sebagainya. sebagian besar paket epel dikelola oleh fedora repo.</p> <p><em>via <a href="http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5/">http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5/</a> </em></p> </blockquote> Upload File kotak adalah di mana kita're saat ini jika anda don't ingin melibatkan teknologi lainnya seperti Flash, Java atau ActiveX.


Dengan HTML anda cukup banyak terbatas pada pengalaman anda've dijelaskan (tidak ada progress bar, double menyampaikan, dll). Jika anda bersedia untuk menggunakan beberapa javascript, anda dapat memecahkan beberapa masalah dengan memberikan umpan balik yang upload sedang berlangsung dan bahkan [menunjukkan kemajuan upload](http://www.raditha.com/php/progress.php) (ini adalah hack karena anda tidak't harus melakukan full round-trip ke server dan kembali, tapi setidaknya ia bekerja).


Jika anda bersedia untuk menggunakan Flash (yang tersedia cukup banyak di mana saja dan pada banyak platform), anda dapat mengatasi hampir semua masalah ini. Cepat googling muncul [dua](http://www.downloadsquad.com/2006/11/16/swfupload-open-source-flash-multi-file-upload/) [seperti](http://www.codeproject.com/KB/aspnet/FlashUpload.aspx) komponen, keduanya gratis *dan* open source. Saya tidak pernah menggunakan salah satu dari mereka, tapi mereka terlihat baik. BTW, Flash isn't tanpa masalah yang baik, misalnya ketika menggunakan multi-file uploader untuk slide share, browser yang terus-menerus menerjang pada saya :-(


Mungkin solusi terbaik saat ini adalah untuk mendeteksi secara dinamis jika pengguna memiliki Flash, dan jika itu's kasus, memberikan versi flash uploader, sementara masih membuat itu mungkin untuk memilih HTML dasar satu.


HTH <p> <a href="http://www.google.com/support/chrome/bin/answer.py?hl=en&amp;answer=96815">dokumen bantuan google</a> tunjukkan bagaimana melakukan ini:</p><ol> <li> <p>klik menu alat menu perkakas.</p> <p><img src="https://i.stack.imgur.com/w9rgt.gif" alt="wrench icon"></p> </li> <li>pilih pilihan.</li> <li>klik tab di balik terpal.</li> <li>di bagian 'jaringan', klik tombol ubah pengaturan proxy. ini akan membuka kotak dialog 'internet properties' di windows di mana anda dapat menyesuaikan pengaturan jaringan anda. lihat <a href="http://support.microsoft.com/kb/135982">di sini</a> untuk lebih jelasnya.</li> </ol> <p>statistik hanyalah bentuk metadata dinamis yang membantu pengoptimal kueri dalam membuat keputusan yang lebih baik. misalnya, jika hanya ada selusin baris dalam sebuah tabel, maka tidak ada gunanya pergi ke indeks untuk melakukan pencarian; anda akan selalu lebih baik melakukan pemindaian tabel penuh. tetapi jika tabel yang sama tumbuh hingga sejuta baris, maka anda mungkin akan lebih baik menggunakan indeks. tetapi jika anda kueri tabel itu pada kolom yang hanya memiliki sedikit nilai unik (misalnya itu mungkin kolom "jenis kelamin" yang hanya berisi "m" atau "f"), sebenarnya fts mungkin lebih baik daripada kasus itu karena anda ingin perlu mengambil blok pula untuk membangun set hasil. sekarang katakanlah meja anda adalah 99% "m" dan hanya 1% "f", kita harus fts dalam satu kasus atau menggunakan indeks dalam yang lain. tabel yang sama, permintaan yang sama, berpotensi empat paket permintaan yang berbeda tergantung pada isi tabel. hal-hal semacam ini adalah "statistik" dan bersifat individual untuk setiap basis data - bahkan dua basis data dengan tabel dan struktur indeks yang sama akan memiliki statistik yang berbeda.</p><p>singkatnya, dalam mesin basis data modern ada dua jenis optimisasi kueri: menulis ulang sql (optimasi berbasis aturan, seperti kompiler menulis ulang c anda agar lebih efisien) dan memilih jalur data yang tepat (optimasi berbasis biaya) , seperti kompiler jit yang mengidentifikasi hotspot saat runtime). anda hanya perlu khawatir tentang ini jika anda melihat pengoptimal kueri melakukan sesuatu yang jelas salah (mis. memilih fts saat anda <em>tah</em> indeks akan lebih baik).</p> <p>aku akan menusuk pertanyaanmu kemarin, tapi kupikir aku harus memikirkannya terlebih dahulu.</p><p>saya benar-benar tidak bisa memberi tahu anda apa "fungsi lain" yang harus anda berikan untuk pengguna anda. saya tidak terpisah dari tim anda. sepertinya anda memaku sebagian besar dari mereka, tetapi pada akhirnya saya tidak dapat membuat keputusan atau memberikan saran ketika kami benar-benar tidak memiliki perincian lengkap tentang apa yang dilakukan aplikasi anda di luar yang memungkinkan mereka membuat formulir.</p><p>namun, saya dapat mengarahkan anda ke beberapa aplikasi lain di luar sana yang dapat memberi anda beberapa gagasan tentang fungsi apa yang dapat anda tambahkan.</p><ul> <li> <a href="http://pencil.evolus.vn/en-us/home.aspx">pensil</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li> <a href="http://iplotz.com/">iplotz</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li>google - <a href="http://googlesystem.blogspot.com/2007/02/learning-googles-keyboard-shortcuts.html">ikhtisar pintasan</a> </li> <li>gmail - <a href="http://mail.google.com/support/bin/answer.py?hl=en&amp;answer=6594">daftar pintasan</a> </li> <li>google documents - <a href="http://docs.google.com/support/bin/answer.py?hl=en&amp;answer=66280">daftar pintasan</a> </li> <li> <a href="http://wufoo.com/">wufoo</a> - pembuat formulir online populer, lihat apa yang mereka lakukan</li> </ul><p>anda bisa membuat semua jenis pintasan keyboard gila untuk aplikasi anda. namun, anda mungkin ingin tetap menggunakan yang paling umum digunakan, yang sepertinya sudah anda daftarkan. jika anda akan membuat pintasan baru, pastikan pintasannya intuitif bagi pengguna.</p><p>saya harap tautan itu terbukti spark beberapa ide untuk anda dan tim anda, dan maaf saya tidak bisa memberikan contoh yang tepat.</p> <p>saya tidak yakin di sini, tapi saya akan mengambil risiko. saya pikir masalah anda mungkin dengan catatan <code>deny control</code> anda. lihat <a href="http://msdn.microsoft.com/en-us/library/ms188338.aspx">di sini</a> sekitar setengah halaman:</p><p><strong> menolak izin kontrol pada database secara implisit menolak izin connect pada database. prinsipal yang ditolak izin kontrol pada database tidak akan dapat terhubung ke database itu. </strong></p><p>saya menyadari bahwa contoh adalah untuk basis data, tetapi gunakan satu tingkat lagi. a <code>deny control</code> di atas tabel akan menolak <em> semua</em> hak istimewa di atasnya, saya menduga. lakukan <code>revoke control</code> untuk menyingkirkannya dan lihat apakah itu memperbaiki masalah anda.</p><p>jika demikian, anda harus menempatkan pengguna dalam peran basis data atau menolak mereka hak istimewa eksplisit terhadap tabel.</p>